]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
sigaction sa_mask fixes
authorChris Wright <chrisw@sous-sol.org>
Thu, 16 Feb 2006 08:15:14 +0000 (00:15 -0800)
committerChris Wright <chrisw@sous-sol.org>
Thu, 16 Feb 2006 08:15:14 +0000 (00:15 -0800)
queue/do_sigaction-cleanup-sa_mask-manipulation.patch [new file with mode: 0644]
queue/fix-s390-build-failure.patch [new file with mode: 0644]
queue/series
queue/sys32_signal-forgets-to-initialize-sa_mask.patch [new file with mode: 0644]
queue/sys_signal-initialize-sa_mask.patch [new file with mode: 0644]

diff --git a/queue/do_sigaction-cleanup-sa_mask-manipulation.patch b/queue/do_sigaction-cleanup-sa_mask-manipulation.patch
new file mode 100644 (file)
index 0000000..a9af38c
--- /dev/null
@@ -0,0 +1,65 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Oleg Nesterov <oleg@tv-sign.ru>
+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 <oleg@tv-sign.ru>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ 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(&current->sighand->siglock);
diff --git a/queue/fix-s390-build-failure.patch b/queue/fix-s390-build-failure.patch
new file mode 100644 (file)
index 0000000..0aba84f
--- /dev/null
@@ -0,0 +1,28 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Dave Jones <davej@redhat.com>
+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 <davej@redhat.com>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ 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)
index e61a6fc2173c4335741e72c3a1bb71fa84202898..a666e762c029b3b3d0162b2ab81c0a81c15d5bea 100644 (file)
@@ -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 (file)
index 0000000..cbc6222
--- /dev/null
@@ -0,0 +1,25 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Tony Luck <tony.luck@intel.com>
+Date: Thu Feb 9 14:41:41 2006 -0800
+Subject: [PATCH] [IA64] sys32_signal() forgets to initialize ->sa_mask
+
+Pointed out by Oleg Nesterov <oleg@tv-sign.ru>, who in turn
+got the hint from Linus.
+
+Signed-off-by: Tony Luck <tony.luck@intel.com>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ 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 (file)
index 0000000..fefa21c
--- /dev/null
@@ -0,0 +1,30 @@
+From nobody Mon Sep 17 00:00:00 2001
+From: Oleg Nesterov <oleg@tv-sign.ru>
+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 <oleg@tv-sign.ru>
+Signed-off-by: Linus Torvalds <torvalds@osdl.org>
+Signed-off-by: Chris Wright <chrisw@sous-sol.org>
+---
+
+ 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);