[PATCH v2 1/1] Calculate offset to field 'init_uts_ns.name'

HAGIO KAZUHITO(萩尾 一仁) k-hagio-ab at nec.com
Thu Sep 17 22:23:40 EDT 2020


Hi Alex,

-----Original Message-----
> HAGIO KAZUHITO(萩尾 一仁)	<k-hagio-ab at nec.com> writes:
> 
> >
> > Thank you for catching this and the patch.
> >
> > but do you know the kernel patch corresponding to this patch, i.e. adds
> > the OFFSET(init_uts_ns.name) (strictly, OFFSET(uts_namespace.name) probably)
> > entry to vmcoreinfo?  The makedumpfile usually just read it from vmcore,
> > so cannot calculate without debug info in vmlinux.
> >
> > If it has not been posted yet, we need to do.  The best situation is
> > that the patch is merged into linux-next first and then merged into
> > mainline together with the commit 9a56493f6942.
> >
> > Is it possible for you?  otherwise, anyone or I might try.
> >
> 
> Hi Kazu,
> 
> my patch doesn't really work :( The offset from 'init_uts_ns' to 'name'
> has changed from 4 to 0 but how do you handle that in makedumpfile w/o
> first knowing what kernel version that is. It is a chicken-and-egg
> problem. Not sure how to solve it. The Linux kernel doesn't provide
> the symbol 'init_ns_ns.name' as i initially thought and ,therefore,
> i based my patch on a wrong assumption. It would be nice if kernel just
> provided a symbol for 'init_uts_ns.name' instead of 'init_uts_ns' which
> might change anytime.

Yes, I think there are two options to solve it:

(1) Replace VMCOREINFO_SYMBOL(init_uts_ns) with VMCOREINFO_SYMBOL(init_uts_ns.name)
in vmcoreinfo (kernel/crash_core.c, which you checked)

and makedumpfile side:

  if (SYMBOL(init_uts_ns.name) != NOT_FOUND_SYMBOL)
    utsname = SYMBOL(init_uts_ns.name)
  else if (SYMBOL(init_uts_ns) != NOT_FOUND_SYMBOL)
    utsname = SYMBOL(init_uts_ns) + sizeof(int)
  ...

According to the definition of the VMCOREINFO_SYMBO() macro, this will
work file, but I've not seen such a usage (specifies a member of struct)
and it would be better to avoid.  And we will have to have a bit tricky
part in makedumpfile source for "-x vmlinux" option support.

Also I'm not sure whether there are other users than makedumpfile depending
on the current SYMBOL(init_uts_ns) and whether we can change it.
(probably no other user, though..)

(2) Append VMCOREINFO_OFFSET(uts_namespace, name) to vmcoreinfo.

and makedumpfile side:

  if (SYMBOL(init_uts_ns) != NOT_FOUND_SYMBOL) {
    if (OFFSET(uts_namespace.name) != NOT_FOUND_STRUCTURE)
      utsname = SYMBOL(init_uts_ns) + OFFSET(uts_namespace.name)
    else
      utsname = SYMBOL(init_uts_ns) + sizeof(int)
  ...

The VMCOREINFO_OFFSET() macro takes a struct name and its member name.
This option doesn't change the current SYMBOL(init_uts_ns).

So personally I would prefer (2) rather than (1).
If you can post a kernel patch, please cc this kexec list.

Thanks,
Kazu



More information about the kexec mailing list