From: Chris Wright Date: Thu, 16 Feb 2006 08:15:14 +0000 (-0800) Subject: sigaction sa_mask fixes X-Git-Tag: v2.6.15.5~31 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=17237590af88e040d2100f116822be1751c6ddb8;p=thirdparty%2Fkernel%2Fstable-queue.git sigaction sa_mask fixes --- diff --git a/queue/do_sigaction-cleanup-sa_mask-manipulation.patch b/queue/do_sigaction-cleanup-sa_mask-manipulation.patch new file mode 100644 index 00000000000..a9af38cafd5 --- /dev/null +++ b/queue/do_sigaction-cleanup-sa_mask-manipulation.patch @@ -0,0 +1,65 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Oleg Nesterov +Date: Thu Feb 9 22:41:50 2006 +0300 +Subject: [PATCH] do_sigaction: cleanup ->sa_mask manipulation + +Clear unblockable signals beforehand. + +Signed-off-by: Oleg Nesterov +Signed-off-by: Linus Torvalds +Signed-off-by: Chris Wright +--- + + include/linux/sched.h | 2 +- + kernel/signal.c | 8 +++----- + 2 files changed, 4 insertions(+), 6 deletions(-) + +--- linux-2.6.15.4.orig/include/linux/sched.h ++++ linux-2.6.15.4/include/linux/sched.h +@@ -1075,7 +1075,7 @@ extern struct sigqueue *sigqueue_alloc(v + extern void sigqueue_free(struct sigqueue *); + extern int send_sigqueue(int, struct sigqueue *, struct task_struct *); + extern int send_group_sigqueue(int, struct sigqueue *, struct task_struct *); +-extern int do_sigaction(int, const struct k_sigaction *, struct k_sigaction *); ++extern int do_sigaction(int, struct k_sigaction *, struct k_sigaction *); + extern int do_sigaltstack(const stack_t __user *, stack_t __user *, unsigned long); + + /* These can be the second arg to send_sig_info/send_group_sig_info. */ +--- linux-2.6.15.4.orig/kernel/signal.c ++++ linux-2.6.15.4/kernel/signal.c +@@ -2335,7 +2335,7 @@ sys_rt_sigqueueinfo(int pid, int sig, si + } + + int +-do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact) ++do_sigaction(int sig, struct k_sigaction *act, struct k_sigaction *oact) + { + struct k_sigaction *k; + +@@ -2358,6 +2358,8 @@ do_sigaction(int sig, const struct k_sig + *oact = *k; + + if (act) { ++ sigdelsetmask(&act->sa.sa_mask, ++ sigmask(SIGKILL) | sigmask(SIGSTOP)); + /* + * POSIX 3.3.1.3: + * "Setting a signal action to SIG_IGN for a signal that is +@@ -2383,8 +2385,6 @@ do_sigaction(int sig, const struct k_sig + read_lock(&tasklist_lock); + spin_lock_irq(&t->sighand->siglock); + *k = *act; +- sigdelsetmask(&k->sa.sa_mask, +- sigmask(SIGKILL) | sigmask(SIGSTOP)); + rm_from_queue(sigmask(sig), &t->signal->shared_pending); + do { + rm_from_queue(sigmask(sig), &t->pending); +@@ -2397,8 +2397,6 @@ do_sigaction(int sig, const struct k_sig + } + + *k = *act; +- sigdelsetmask(&k->sa.sa_mask, +- sigmask(SIGKILL) | sigmask(SIGSTOP)); + } + + spin_unlock_irq(¤t->sighand->siglock); diff --git a/queue/fix-s390-build-failure.patch b/queue/fix-s390-build-failure.patch new file mode 100644 index 00000000000..0aba84fb361 --- /dev/null +++ b/queue/fix-s390-build-failure.patch @@ -0,0 +1,28 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Dave Jones +Date: Fri Feb 10 16:27:11 2006 -0500 +Subject: [PATCH] Fix s390 build failure. + +arch/s390/kernel/compat_signal.c:199: error: conflicting types for 'do_sigaction' +include/linux/sched.h:1115: error: previous declaration of 'do_sigaction' was here + +Signed-off-by: Dave Jones +Signed-off-by: Linus Torvalds +Signed-off-by: Chris Wright +--- + + arch/s390/kernel/compat_signal.c | 3 --- + 1 files changed, 3 deletions(-) + +--- linux-2.6.15.4.orig/arch/s390/kernel/compat_signal.c ++++ linux-2.6.15.4/arch/s390/kernel/compat_signal.c +@@ -258,9 +258,6 @@ sys32_sigaction(int sig, const struct ol + return ret; + } + +-int +-do_sigaction(int sig, const struct k_sigaction *act, struct k_sigaction *oact); +- + asmlinkage long + sys32_rt_sigaction(int sig, const struct sigaction32 __user *act, + struct sigaction32 __user *oact, size_t sigsetsize) diff --git a/queue/series b/queue/series index e61a6fc2173..a666e762c02 100644 --- a/queue/series +++ b/queue/series @@ -8,3 +8,7 @@ reiserfs-disable-automatic-enabling-of-reiserfs-inode-attributes.patch revert-skb_copy_datagram_iovec-recursion-elimination.patch address-autoconfiguration-does-not-work-after-device-down-up-cycle.patch i386-x86-64-don-t-ipi-to-offline-cpus-on-shutdown.patch +sys_signal-initialize-sa_mask.patch +do_sigaction-cleanup-sa_mask-manipulation.patch +sys32_signal-forgets-to-initialize-sa_mask.patch +fix-s390-build-failure.patch diff --git a/queue/sys32_signal-forgets-to-initialize-sa_mask.patch b/queue/sys32_signal-forgets-to-initialize-sa_mask.patch new file mode 100644 index 00000000000..cbc6222ef4a --- /dev/null +++ b/queue/sys32_signal-forgets-to-initialize-sa_mask.patch @@ -0,0 +1,25 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Tony Luck +Date: Thu Feb 9 14:41:41 2006 -0800 +Subject: [PATCH] [IA64] sys32_signal() forgets to initialize ->sa_mask + +Pointed out by Oleg Nesterov , who in turn +got the hint from Linus. + +Signed-off-by: Tony Luck +Signed-off-by: Chris Wright +--- + + arch/ia64/ia32/ia32_signal.c | 1 + + 1 files changed, 1 insertion(+) + +--- linux-2.6.15.4.orig/arch/ia64/ia32/ia32_signal.c ++++ linux-2.6.15.4/arch/ia64/ia32/ia32_signal.c +@@ -515,6 +515,7 @@ sys32_signal (int sig, unsigned int hand + + sigact_set_handler(&new_sa, handler, 0); + new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK; ++ sigemptyset(&new_sa.sa.sa_mask); + + ret = do_sigaction(sig, &new_sa, &old_sa); + diff --git a/queue/sys_signal-initialize-sa_mask.patch b/queue/sys_signal-initialize-sa_mask.patch new file mode 100644 index 00000000000..fefa21cb928 --- /dev/null +++ b/queue/sys_signal-initialize-sa_mask.patch @@ -0,0 +1,30 @@ +From nobody Mon Sep 17 00:00:00 2001 +From: Oleg Nesterov +Date: Thu Feb 9 22:41:41 2006 +0300 +Subject: [PATCH] sys_signal: initialize ->sa_mask + +Pointed out by Linus Torvalds. + +sys_signal() forgets to initialize ->sa_mask. + +( I suspect arch/ia64/ia32/ia32_signal.c:sys32_signal() + also needs this fix ) + +Signed-off-by: Oleg Nesterov +Signed-off-by: Linus Torvalds +Signed-off-by: Chris Wright +--- + + kernel/signal.c | 1 + + 1 files changed, 1 insertion(+) + +--- linux-2.6.15.4.orig/kernel/signal.c ++++ linux-2.6.15.4/kernel/signal.c +@@ -2604,6 +2604,7 @@ sys_signal(int sig, __sighandler_t handl + + new_sa.sa.sa_handler = handler; + new_sa.sa.sa_flags = SA_ONESHOT | SA_NOMASK; ++ sigemptyset(&new_sa.sa.sa_mask); + + ret = do_sigaction(sig, &new_sa, &old_sa); +