summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndries E. Brouwer <andries.brouwer@cwi.nl>2003-02-10 17:23:38 -0800
committerLinus Torvalds <torvalds@home.transmeta.com>2003-02-10 17:23:38 -0800
commit02bdc207da7a083f7fdc5c8be23804021906798e (patch)
tree706ef463909b8e9ffc4cba1da607f7206613fb92
parent36dc13b901961bacd6a3ccee8ec9992c247964b7 (diff)
[PATCH] signal error return fix
-rw-r--r--kernel/sys.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/kernel/sys.c b/kernel/sys.c
index dffb67035c78..afa6d2fc1372 100644
--- a/kernel/sys.c
+++ b/kernel/sys.c
@@ -907,6 +907,7 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
p = find_task_by_pid(pid);
if (!p)
goto out;
+
err = -EINVAL;
if (!thread_group_leader(p))
goto out;
@@ -918,11 +919,16 @@ asmlinkage long sys_setpgid(pid_t pid, pid_t pgid)
err = -EACCES;
if (p->did_exec)
goto out;
- } else if (p != current)
- goto out;
+ } else {
+ err = -ESRCH;
+ if (p != current)
+ goto out;
+ }
+
err = -EPERM;
if (p->leader)
goto out;
+
if (pgid != pid) {
struct task_struct *p;
struct pid *pid;