Dave Anderson wrote:
Jun'ichi Nomura wrote:
> Hi,
>
> Dave Anderson wrote:
> >> static inline struct new_utsname *utsname(void)
> >> {
> >> return ¤t->nsproxy->uts_ns->name;
> >> }
> >>
> >>
> > Ok, thanks...
> >
> > Well, at a minimum we'll have to skip the
> > verify_namelist() stage, or perhaps call it later,
> > some time after:
> >
> > (1) task_init() is complete, and
> > (2) the required new_utsname fields get filled in from
> > following the trail above, perhaps from the first
> > idle task?
> >
> > Unless there's some other way we can access it.
>
> I think you can get it from init_uts_ns.name,
> where 'name' is struct new_utsname.
>
> init/version.c:
> struct uts_namespace init_uts_ns = {
> .kref = {
> .refcount = ATOMIC_INIT(2),
> },
> .name = {
> .sysname = UTS_SYSNAME,
> .nodename = UTS_NODENAME,
> .release = UTS_RELEASE,
> .version = UTS_VERSION,
> .machine = UTS_MACHINE,
> .domainname = UTS_DOMAINNAME,
> },
> };
>
> Thanks,
> --
> Jun'ichi Nomura, NEC Solutions (America), Inc.
>
Yep, thanks Nic, I was just looking at the kernel patch, and
it looks simple enough.
Badari, since this is read PRE_GDB, can you try something
like this:
$ diff kernel.c.orig kernel.c
120,122c120,130
< readmem(symbol_value("system_utsname"), KVADDR,
&kt->utsname,
< sizeof(struct new_utsname), "system_utsname",
< FAULT_ON_ERROR);
---
> if (symbol_exists("system_utsname"))
> readmem(symbol_value("system_utsname"),
KVADDR, &kt->utsname,
> sizeof(struct new_utsname),
"system_utsname",
> RETURN_ON_ERROR);
> else if (symbol_exists("init_uts_ns"))
> readmem(symbol_value("init_uts_ns") + sizeof(int),
> KVADDR, &kt->utsname, sizeof(struct
new_utsname),
> "init_uts_ns", RETURN_ON_ERROR);
> else
> error(INFO, "cannot access utsname
information\n\n");
>
$
Thanks,
Dave
Sorry for not replying earlier. I did the same thing earlier and it
works fine with the fix.
I guess we can wait till the kernel changes make it in.
Thanks,
Badari