Hi,Yep, thanks Nic, I was just looking at the kernel patch, andDave 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.
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