[Crash-utility] loop in crash

Dave Anderson anderson at redhat.com
Fri Apr 27 13:28:13 UTC 2012



----- Original Message -----
> Thanks Dave.
> 
> I found one more issue with a somewhat "corrupt" vmcore. In this case
> it is ARM-specific in unwind_arm.c, so maybe Mika will also look at
> it.
> 
> In the case I am investigating I get a readmem error while reading
> the unwind tables. The way unwinding currently is implemented Crash
> then stops and no further analysis is possible. When I patched Crash
> to continue anyhow, every command I tried worked nicely including
> bt, so there is no reason to stop at this kind of problem.
> 
> When investigating further I found that the problem occurs in
> init_module_unwind_tables. It is in the call to do_list(&ld) that
> the readmem error is found. I also looked in the code for do_list
> and saw that it could be configured to return even if errors were
> found, by setting ld.flags.
> 
> 	/*
> 	 * Iterate through unwind table list and store start address of each
> 	 * table in table_list.
> 	 */
> 	ld.flags += RETURN_ON_LIST_ERROR;           /* added line */
> 	hq_open();
> 	cnt = do_list(&ld);
> 	if (cnt == -1) {           /* added if statement, 3 lines */
> 		return FALSE;
> 	}
> 	table_list = (ulong *)GETBUF(cnt * sizeof(ulong));
> 	cnt = retrieve_list(table_list, cnt);
> 	hq_close();
> 
> By adding the lines indicated above I get an appropriate warning that
> the unwind tables cannot be read, and then Crash works as usual.
> 
> Jan

Your patch makes perfect sense.  Any error(FATAL, ...) call prior to
RUNTIME being set kills the whole session.  But if it is possible for
the session to continue, then it should be allowed to.  

I'll also add an unwind-specific warning message, and make the same
change to the x86_64 populate_local_tables() function, upon which it
appears that the ARM version was based.

Queued for crash-6.0.6.  (Later today...)

Thanks,
  Dave




More information about the Crash-utility mailing list