|
@@ -1191,8 +1191,10 @@ EXPORT_SYMBOL_GPL(kill_pid_info_as_uid);
|
|
|
|
|
|
static int kill_something_info(int sig, struct siginfo *info, int pid)
|
|
|
{
|
|
|
+ int ret;
|
|
|
+ rcu_read_lock();
|
|
|
if (!pid) {
|
|
|
- return kill_pg_info(sig, info, process_group(current));
|
|
|
+ ret = kill_pgrp_info(sig, info, task_pgrp(current));
|
|
|
} else if (pid == -1) {
|
|
|
int retval = 0, count = 0;
|
|
|
struct task_struct * p;
|
|
@@ -1207,12 +1209,14 @@ static int kill_something_info(int sig, struct siginfo *info, int pid)
|
|
|
}
|
|
|
}
|
|
|
read_unlock(&tasklist_lock);
|
|
|
- return count ? retval : -ESRCH;
|
|
|
+ ret = count ? retval : -ESRCH;
|
|
|
} else if (pid < 0) {
|
|
|
- return kill_pg_info(sig, info, -pid);
|
|
|
+ ret = kill_pgrp_info(sig, info, find_pid(-pid));
|
|
|
} else {
|
|
|
- return kill_proc_info(sig, info, pid);
|
|
|
+ ret = kill_pid_info(sig, info, find_pid(pid));
|
|
|
}
|
|
|
+ rcu_read_unlock();
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
/*
|