diff options
Diffstat (limited to 'kernel/signal.c')
| -rw-r--r-- | kernel/signal.c | 9 | 
1 files changed, 6 insertions, 3 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index 906ae5a1779..bded6518778 100644 --- a/kernel/signal.c +++ b/kernel/signal.c @@ -637,7 +637,7 @@ static inline bool si_fromuser(const struct siginfo *info)  /*   * Bad permissions for sending the signal - * - the caller must hold at least the RCU read lock + * - the caller must hold the RCU read lock   */  static int check_kill_permission(int sig, struct siginfo *info,  				 struct task_struct *t) @@ -1127,11 +1127,14 @@ struct sighand_struct *lock_task_sighand(struct task_struct *tsk, unsigned long  /*   * send signal info to all the members of a group - * - the caller must hold the RCU read lock at least   */  int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p)  { -	int ret = check_kill_permission(sig, info, p); +	int ret; + +	rcu_read_lock(); +	ret = check_kill_permission(sig, info, p); +	rcu_read_unlock();  	if (!ret && sig)  		ret = do_send_sig_info(sig, info, p, true);  |