[Crash-utility] [PATCH] Fix "sys [-t]|mod -S" after "mod -t" when crash runs with -s option

HAGIO KAZUHITO(萩尾 一仁) k-hagio-ab at nec.com
Sun Jan 24 23:18:37 UTC 2021


Hi Lianbo,

-----Original Message-----
> > When crash runs with -s option, SIZE(taint_flag) and OFFSET(tnt_false)
> > are not set during initialization.  If the "mod -t" option is executed,
> > it sets the former but does not set the latter.  After that, the "sys"
> > command uses OFFSET(tnt_false) without setting it, because it checks
> > only if SIZE(taint_flag) is set.
> >
> > Without the patch, the "sys [-t]" and "mod -S" options after "mod -t"
> > option fail with the error message:
> >
> Hmm, I also ran into a similar issue with an old vmcore, that can be reproduced
> with the following steps:
> 
> crash> history
> [1] mod -S 3.10.0-957.el7.x86_64
> [2] mod -s dm_service_time
> [3] set scope st_create
> [4] mod -d dm_service_time
> [5] mod -sr dm_service_time
> [6] set scope st_create
> [7] sys
> [8] set scope st_create
> 
> And after the step[7] "sys" command, the step[8] will definitely fail. But step[6]
> is successful before the "sys" command.
> 
> Seems that it should be another issue.

Do you mean the following error?
...
crash> set scope st_create
scope: ffffffffc0918270 (st_create)
crash> sys
      KERNEL: /usr/lib/debug/lib/modules/3.10.0-1127.el7.x86_64/vmlinux
    DUMPFILE: /dev/crash
...
crash> set scope st_create
set: gdb cannot find text block for address: st_create

This looks strange but different from the issue this patch fixes.
This fixes the following error:

# crash -s

WARNING: kernel relocated [340MB]: patching 87167 gdb minimal_symbol values
crash> mod -t
no tainted modules
crash> sys

sys: invalid structure member offset: tnt_false
     FILE: kernel.c  LINE: 10838  FUNCTION: show_kernel_taints_v4_10()

[/usr/bin/crash] error trace: 469008 => 4f4b29 => 4d7e19 => 5376d2

  5376d2: OFFSET_verify+130
  4d7e19: (undetermined)
  4f4b29: cmd_sys+121
  469008: exec_command+760

sys: invalid structure member offset: tnt_false
     FILE: kernel.c  LINE: 10838  FUNCTION: show_kernel_taints_v4_10()

My test script runs with this command order..

Thanks,
Kazu

> 
> Thanks.
> Lianbo
> 
> >   sys: invalid structure member offset: tnt_false
> >        FILE: kernel.c  LINE: 11203  FUNCTION: show_kernel_taints_v4_10()
> >
> > Signed-off-by: Kazuhito Hagio <k-hagio-ab at nec.com>
> > ---
> >  kernel.c | 3 ++-
> >  1 file changed, 2 insertions(+), 1 deletion(-)
> >
> > diff --git a/kernel.c b/kernel.c
> > index 272e0d8751cf..5fcd86575be5 100644
> > --- a/kernel.c
> > +++ b/kernel.c
> > @@ -11160,7 +11160,8 @@ show_kernel_taints_v4_10(char *buf, int verbose)
> >  	ulong tainted_mask, *tainted_mask_ptr;
> >  	struct syment *sp;
> >
> > -	if (!VALID_STRUCT(taint_flag)) {
> > +	if (!(VALID_STRUCT(taint_flag) &&
> > +	     VALID_MEMBER(tnt_true) && VALID_MEMBER(tnt_false))) {
> >  		STRUCT_SIZE_INIT(taint_flag, "taint_flag");
> >  		MEMBER_OFFSET_INIT(tnt_true, "taint_flag", "true");
> >  		MEMBER_OFFSET_INIT(tnt_false, "taint_flag", "false");
> > -- 2.18.4





More information about the Crash-utility mailing list