aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPavel Emelyanov <xemul@openvz.org>2007-11-26 15:21:49 -0500
committerIngo Molnar <mingo@elte.hu>2007-11-26 15:21:49 -0500
commit5e8869bb699d50be5c0733edfc71cfcd5b43e10a (patch)
tree5ce6e7b25ffb2c78bb876861e4b0c83fd6f9b565
parent2ffbb8377c7a0713baf6644e285adc27a5654582 (diff)
sched: don't forget to unlock uids_mutex on error paths
The commit commit 5cb350baf580017da38199625b7365b1763d7180 Author: Dhaval Giani <dhaval@linux.vnet.ibm.com> Date: Mon Oct 15 17:00:14 2007 +0200 sched: group scheduling, sysfs tunables introduced the uids_mutex and the helpers to lock/unlock it. Unfortunately, the error paths of alloc_uid() were not patched to unlock it. Signed-off-by: Pavel Emelyanov <xemul@openvz.org> Acked-by: Dhaval Giani <dhaval@linux.vnet.ibm.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
-rw-r--r--kernel/user.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/kernel/user.c b/kernel/user.c
index 0f3aa0234107..8320a87f3e5a 100644
--- a/kernel/user.c
+++ b/kernel/user.c
@@ -337,8 +337,11 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
337 struct user_struct *new; 337 struct user_struct *new;
338 338
339 new = kmem_cache_alloc(uid_cachep, GFP_KERNEL); 339 new = kmem_cache_alloc(uid_cachep, GFP_KERNEL);
340 if (!new) 340 if (!new) {
341 uids_mutex_unlock();
341 return NULL; 342 return NULL;
343 }
344
342 new->uid = uid; 345 new->uid = uid;
343 atomic_set(&new->__count, 1); 346 atomic_set(&new->__count, 1);
344 atomic_set(&new->processes, 0); 347 atomic_set(&new->processes, 0);
@@ -355,6 +358,7 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
355 358
356 if (alloc_uid_keyring(new, current) < 0) { 359 if (alloc_uid_keyring(new, current) < 0) {
357 kmem_cache_free(uid_cachep, new); 360 kmem_cache_free(uid_cachep, new);
361 uids_mutex_unlock();
358 return NULL; 362 return NULL;
359 } 363 }
360 364
@@ -362,6 +366,7 @@ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
362 key_put(new->uid_keyring); 366 key_put(new->uid_keyring);
363 key_put(new->session_keyring); 367 key_put(new->session_keyring);
364 kmem_cache_free(uid_cachep, new); 368 kmem_cache_free(uid_cachep, new);
369 uids_mutex_unlock();
365 return NULL; 370 return NULL;
366 } 371 }
367 372