diff options
| author | Chris Metcalf <cmetcalf@tilera.com> | 2010-08-06 10:37:02 -0400 |
|---|---|---|
| committer | Chris Metcalf <cmetcalf@tilera.com> | 2010-08-06 10:37:02 -0400 |
| commit | ab11b487402f97975f3ac1eeea09c82f4431481e (patch) | |
| tree | 86337c5cbbd2b0c4bd07c0847a1dc7de3d898147 /kernel/signal.c | |
| parent | 1c689cbcf2c2b7a35cd237abddd9206bb1b6fee1 (diff) | |
| parent | fc1caf6eafb30ea185720e29f7f5eccca61ecd60 (diff) | |
Merge branch 'master' into for-linus
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 906ae5a1779c..bded65187780 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
| @@ -637,7 +637,7 @@ static inline bool si_fromuser(const struct siginfo *info) | |||
| 637 | 637 | ||
| 638 | /* | 638 | /* |
| 639 | * Bad permissions for sending the signal | 639 | * Bad permissions for sending the signal |
| 640 | * - the caller must hold at least the RCU read lock | 640 | * - the caller must hold the RCU read lock |
| 641 | */ | 641 | */ |
| 642 | static int check_kill_permission(int sig, struct siginfo *info, | 642 | static int check_kill_permission(int sig, struct siginfo *info, |
| 643 | struct task_struct *t) | 643 | struct task_struct *t) |
| @@ -1127,11 +1127,14 @@ struct sighand_struct *lock_task_sighand(struct task_struct *tsk, unsigned long | |||
| 1127 | 1127 | ||
| 1128 | /* | 1128 | /* |
| 1129 | * send signal info to all the members of a group | 1129 | * send signal info to all the members of a group |
| 1130 | * - the caller must hold the RCU read lock at least | ||
| 1131 | */ | 1130 | */ |
| 1132 | int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) | 1131 | int group_send_sig_info(int sig, struct siginfo *info, struct task_struct *p) |
| 1133 | { | 1132 | { |
| 1134 | int ret = check_kill_permission(sig, info, p); | 1133 | int ret; |
| 1134 | |||
| 1135 | rcu_read_lock(); | ||
| 1136 | ret = check_kill_permission(sig, info, p); | ||
| 1137 | rcu_read_unlock(); | ||
| 1135 | 1138 | ||
| 1136 | if (!ret && sig) | 1139 | if (!ret && sig) |
| 1137 | ret = do_send_sig_info(sig, info, p, true); | 1140 | ret = do_send_sig_info(sig, info, p, true); |
