diff options
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index ea154104a00b..75f7341b0c39 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -1922,6 +1922,8 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka, | |||
1922 | sigset_t *mask = ¤t->blocked; | 1922 | sigset_t *mask = ¤t->blocked; |
1923 | int signr = 0; | 1923 | int signr = 0; |
1924 | 1924 | ||
1925 | try_to_freeze(); | ||
1926 | |||
1925 | relock: | 1927 | relock: |
1926 | spin_lock_irq(¤t->sighand->siglock); | 1928 | spin_lock_irq(¤t->sighand->siglock); |
1927 | for (;;) { | 1929 | for (;;) { |
@@ -2099,10 +2101,11 @@ long do_no_restart_syscall(struct restart_block *param) | |||
2099 | int sigprocmask(int how, sigset_t *set, sigset_t *oldset) | 2101 | int sigprocmask(int how, sigset_t *set, sigset_t *oldset) |
2100 | { | 2102 | { |
2101 | int error; | 2103 | int error; |
2102 | sigset_t old_block; | ||
2103 | 2104 | ||
2104 | spin_lock_irq(¤t->sighand->siglock); | 2105 | spin_lock_irq(¤t->sighand->siglock); |
2105 | old_block = current->blocked; | 2106 | if (oldset) |
2107 | *oldset = current->blocked; | ||
2108 | |||
2106 | error = 0; | 2109 | error = 0; |
2107 | switch (how) { | 2110 | switch (how) { |
2108 | case SIG_BLOCK: | 2111 | case SIG_BLOCK: |
@@ -2119,8 +2122,7 @@ int sigprocmask(int how, sigset_t *set, sigset_t *oldset) | |||
2119 | } | 2122 | } |
2120 | recalc_sigpending(); | 2123 | recalc_sigpending(); |
2121 | spin_unlock_irq(¤t->sighand->siglock); | 2124 | spin_unlock_irq(¤t->sighand->siglock); |
2122 | if (oldset) | 2125 | |
2123 | *oldset = old_block; | ||
2124 | return error; | 2126 | return error; |
2125 | } | 2127 | } |
2126 | 2128 | ||
@@ -2307,7 +2309,6 @@ sys_rt_sigtimedwait(const sigset_t __user *uthese, | |||
2307 | 2309 | ||
2308 | timeout = schedule_timeout_interruptible(timeout); | 2310 | timeout = schedule_timeout_interruptible(timeout); |
2309 | 2311 | ||
2310 | try_to_freeze(); | ||
2311 | spin_lock_irq(¤t->sighand->siglock); | 2312 | spin_lock_irq(¤t->sighand->siglock); |
2312 | sig = dequeue_signal(current, &these, &info); | 2313 | sig = dequeue_signal(current, &these, &info); |
2313 | current->blocked = current->real_blocked; | 2314 | current->blocked = current->real_blocked; |