X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=kernel%2Futsname.c;h=815237a55af8f277b43aea2c81471b9c05a4d00d;hb=f73be6dedf4fa058ce80846dae604b08fa805ca1;hp=160c8c5136bd6a6607ccfae5cfc2e285fe5791c6;hpb=cab8e5c4444cb7d9b8035de5d81fbfd5284a02fa;p=linux-2.6 diff --git a/kernel/utsname.c b/kernel/utsname.c index 160c8c5136..815237a55a 100644 --- a/kernel/utsname.c +++ b/kernel/utsname.c @@ -12,7 +12,8 @@ #include #include #include -#include +#include +#include /* * Clone a new ns copying an original utsname, setting refcount to 1 @@ -24,10 +25,13 @@ static struct uts_namespace *clone_uts_ns(struct uts_namespace *old_ns) struct uts_namespace *ns; ns = kmalloc(sizeof(struct uts_namespace), GFP_KERNEL); - if (ns) { - memcpy(&ns->name, &old_ns->name, sizeof(ns->name)); - kref_init(&ns->kref); - } + if (!ns) + return ERR_PTR(-ENOMEM); + + down_read(&uts_sem); + memcpy(&ns->name, &old_ns->name, sizeof(ns->name)); + up_read(&uts_sem); + kref_init(&ns->kref); return ns; } @@ -37,7 +41,7 @@ static struct uts_namespace *clone_uts_ns(struct uts_namespace *old_ns) * utsname of this process won't be seen by parent, and vice * versa. */ -struct uts_namespace *copy_utsname(int flags, struct uts_namespace *old_ns) +struct uts_namespace *copy_utsname(unsigned long flags, struct uts_namespace *old_ns) { struct uts_namespace *new_ns;