summaryrefslogtreecommitdiff
path: root/security/keys/keyctl.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2012-06-30 11:55:24 +0400
committerAl Viro <viro@zeniv.linux.org.uk>2012-07-22 23:58:01 +0400
commitd35abdb28824cf74f0a106a0f9c6f3ff700a35bf (patch)
tree860bbe5c9e2d42293698cd93c32299b2c6dac5a2 /security/keys/keyctl.c
parent6120d3dbb1220792ebea88cd475e1ec8f8620a93 (diff)
downloadlinux-d35abdb28824cf74f0a106a0f9c6f3ff700a35bf.tar.xz
hold task_lock around checks in keyctl
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'security/keys/keyctl.c')
-rw-r--r--security/keys/keyctl.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/security/keys/keyctl.c b/security/keys/keyctl.c
index 0291b3f9397c..f1b59ae39d7e 100644
--- a/security/keys/keyctl.c
+++ b/security/keys/keyctl.c
@@ -1486,6 +1486,7 @@ long keyctl_session_to_parent(void)
oldwork = NULL;
parent = me->real_parent;
+ task_lock(parent);
/* the parent mustn't be init and mustn't be a kernel thread */
if (parent->pid <= 1 || !parent->mm)
goto unlock;
@@ -1529,6 +1530,7 @@ long keyctl_session_to_parent(void)
if (!ret)
newwork = NULL;
unlock:
+ task_unlock(parent);
write_unlock_irq(&tasklist_lock);
rcu_read_unlock();
if (oldwork)