OpenVZ Forum


Home » Mailing lists » Devel » Re: [RFC][PATCH 1/2] add user namespace [try #2]
Re: [RFC][PATCH 1/2] add user namespace [try #2] [message #16537] Mon, 28 August 2006 15:06 Go to next message
Dave Hansen is currently offline  Dave Hansen
Messages: 240
Registered: October 2005
Senior Member
On Mon, 2006-08-28 at 16:56 +0200, Cedric Le Goater wrote:
> 
> + * Clone a new ns copying an original user ns, setting refcount to 1
> + * @old_ns: namespace to clone
> + * Return NULL on error (failure to kmalloc), new ns otherwise
> + */
> +static struct user_namespace *clone_user_ns(struct user_namespace
> *old_ns)
> +{
> +       struct user_namespace *ns;
> +
> +       ns = kmalloc(sizeof(struct user_namespace), GFP_KERNEL);
> +       if (ns) {
> +               int n;
> +               struct user_struct *new_user;
> +
> +               kref_init(&ns->kref);
> +
> +               for(n = 0; n < UIDHASH_SZ; ++n)
> +                       INIT_LIST_HEAD(ns->uidhash_table + n);
> +
> +               /* Insert new root user.  */
> +               ns->root_user = alloc_uid(ns, 0);
> +               if (!ns->root_user) {
> +                       kfree(ns);
> +                       return NULL;
> +               }
> +
> +               /* Reset current->user with a new one */
> +               new_user = alloc_uid(ns, current->uid);
> +               if (!new_user) {
> +                       kfree(ns);
> +                       return NULL;
> +               }

Does this leak the ns->root_user?

> +
> +               switch_uid(new_user);
> +       }
> +       return ns;
> +} 

-- Dave

_______________________________________________
Containers mailing list
Containers@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/containers
Re: [RFC][PATCH 1/2] add user namespace [try #2] [message #16545 is a reply to message #16537] Mon, 28 August 2006 15:14 Go to previous messageGo to next message
Cedric Le Goater is currently offline  Cedric Le Goater
Messages: 443
Registered: February 2006
Senior Member
Dave Hansen wrote:
> On Mon, 2006-08-28 at 16:56 +0200, Cedric Le Goater wrote:
>> + * Clone a new ns copying an original user ns, setting refcount to 1
>> + * @old_ns: namespace to clone
>> + * Return NULL on error (failure to kmalloc), new ns otherwise
>> + */
>> +static struct user_namespace *clone_user_ns(struct user_namespace
>> *old_ns)
>> +{
>> +       struct user_namespace *ns;
>> +
>> +       ns = kmalloc(sizeof(struct user_namespace), GFP_KERNEL);
>> +       if (ns) {
>> +               int n;
>> +               struct user_struct *new_user;
>> +
>> +               kref_init(&ns->kref);
>> +
>> +               for(n = 0; n < UIDHASH_SZ; ++n)
>> +                       INIT_LIST_HEAD(ns->uidhash_table + n);
>> +
>> +               /* Insert new root user.  */
>> +               ns->root_user = alloc_uid(ns, 0);
>> +               if (!ns->root_user) {
>> +                       kfree(ns);
>> +                       return NULL;
>> +               }
>> +
>> +               /* Reset current->user with a new one */
>> +               new_user = alloc_uid(ns, current->uid);
>> +               if (!new_user) {
>> +                       kfree(ns);
>> +                       return NULL;
>> +               }
> 
> Does this leak the ns->root_user?

arg !

thanks,

C.
_______________________________________________
Containers mailing list
Containers@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/containers
Re: [RFC][PATCH 1/2] add user namespace [try #2] [message #16584 is a reply to message #16545] Thu, 31 August 2006 12:36 Go to previous message
Cedric Le Goater is currently offline  Cedric Le Goater
Messages: 443
Registered: February 2006
Senior Member
Cedric Le Goater wrote:
> Dave Hansen wrote:
>> On Mon, 2006-08-28 at 16:56 +0200, Cedric Le Goater wrote:
>>> + * Clone a new ns copying an original user ns, setting refcount to 1
>>> + * @old_ns: namespace to clone
>>> + * Return NULL on error (failure to kmalloc), new ns otherwise
>>> + */
>>> +static struct user_namespace *clone_user_ns(struct user_namespace
>>> *old_ns)
>>> +{
>>> +       struct user_namespace *ns;
>>> +
>>> +       ns = kmalloc(sizeof(struct user_namespace), GFP_KERNEL);
>>> +       if (ns) {
>>> +               int n;
>>> +               struct user_struct *new_user;
>>> +
>>> +               kref_init(&ns->kref);
>>> +
>>> +               for(n = 0; n < UIDHASH_SZ; ++n)
>>> +                       INIT_LIST_HEAD(ns->uidhash_table + n);
>>> +
>>> +               /* Insert new root user.  */
>>> +               ns->root_user = alloc_uid(ns, 0);
>>> +               if (!ns->root_user) {
>>> +                       kfree(ns);
>>> +                       return NULL;
>>> +               }
>>> +
>>> +               /* Reset current->user with a new one */
>>> +               new_user = alloc_uid(ns, current->uid);
>>> +               if (!new_user) {
>>> +                       kfree(ns);
>>> +                       return NULL;
>>> +               }
>> Does this leak the ns->root_user?
> 
> arg !
> 
> thanks,

Sorry, I forgot to include the fix.

C.

Signed-off-by: Cedric Le Goater <clg@fr.ibm.com>

---
 kernel/user.c |    1 +
 1 file changed, 1 insertion(+)

Index: 2.6.18-rc4-mm3/kernel/user.c
===================================================================
--- 2.6.18-rc4-mm3.orig/kernel/user.c
+++ 2.6.18-rc4-mm3/kernel/user.c
@@ -125,6 +125,7 @@ static struct user_namespace *clone_user
 		/* Reset current->user with a new one */
 		new_user = alloc_uid(ns, current->uid);
 		if (!new_user) {
+			free_uid(ns->root_user);
 			kfree(ns);
 			return NULL;
 		}
_______________________________________________
Containers mailing list
Containers@lists.osdl.org
https://lists.osdl.org/mailman/listinfo/containers
Previous Topic: Re: wiki page (was Re: [PATCH] kthread: saa7134-tvaudio.c)
Next Topic: Re: wiki page (was Re: [PATCH] kthread: saa7134-tvaudio.c)
Goto Forum:
  


Current Time: Tue Sep 10 11:31:45 GMT 2024

Total time taken to generate the page: 0.04736 seconds