diff options
| author | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-11-05 23:00:48 -0800 |
|---|---|---|
| committer | Dmitry Torokhov <dmitry.torokhov@gmail.com> | 2009-11-05 23:00:48 -0800 |
| commit | 02cee68998010c4a2cc2383c86babc2ecc737183 (patch) | |
| tree | 13c6483472f672c3b2570b075ed2ad4fd4c5405e /kernel/sys.c | |
| parent | f5ba35023697e54a24487bcd822194390a333893 (diff) | |
| parent | b419148e567728f6af0c3b01965c1cc141e3e13a (diff) | |
Merge commit 'v2.6.32-rc6' into next
Diffstat (limited to 'kernel/sys.c')
| -rw-r--r-- | kernel/sys.c | 25 |
1 files changed, 20 insertions, 5 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index 255475d163e..ce17760d9c5 100644 --- a/kernel/sys.c +++ b/kernel/sys.c @@ -1110,6 +1110,8 @@ SYSCALL_DEFINE0(setsid) err = session; out: write_unlock_irq(&tasklist_lock); + if (err > 0) + proc_sid_connector(group_leader); return err; } @@ -1546,24 +1548,37 @@ SYSCALL_DEFINE5(prctl, int, option, unsigned long, arg2, unsigned long, arg3, if (arg4 | arg5) return -EINVAL; switch (arg2) { - case 0: + case PR_MCE_KILL_CLEAR: if (arg3 != 0) return -EINVAL; current->flags &= ~PF_MCE_PROCESS; break; - case 1: + case PR_MCE_KILL_SET: current->flags |= PF_MCE_PROCESS; - if (arg3 != 0) + if (arg3 == PR_MCE_KILL_EARLY) current->flags |= PF_MCE_EARLY; - else + else if (arg3 == PR_MCE_KILL_LATE) current->flags &= ~PF_MCE_EARLY; + else if (arg3 == PR_MCE_KILL_DEFAULT) + current->flags &= + ~(PF_MCE_EARLY|PF_MCE_PROCESS); + else + return -EINVAL; break; default: return -EINVAL; } error = 0; break; - + case PR_MCE_KILL_GET: + if (arg2 | arg3 | arg4 | arg5) + return -EINVAL; + if (current->flags & PF_MCE_PROCESS) + error = (current->flags & PF_MCE_EARLY) ? + PR_MCE_KILL_EARLY : PR_MCE_KILL_LATE; + else + error = PR_MCE_KILL_DEFAULT; + break; default: error = -EINVAL; break; |
