[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