All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [ 12/48] signal: always clear sa_restorer on execve
       [not found] <514A07DC.60708@dd-wrt.com>
@ 2013-03-20 20:43   ` Sebastian Gottschall (DD-WRT)
  0 siblings, 0 replies; 6+ messages in thread
From: Sebastian Gottschall (DD-WRT) @ 2013-03-20 20:43 UTC (permalink / raw)
  To: stable, linux-kernel

Am 20.03.2013 20:02, schrieb Sebastian Gottschall (DD-WRT):
> Hello
>
> The patch for sa_restorer will break mips builds, since sa_restorer 
> isnt defined as field within the struct, but the MACRO is.
> so use the __ARCH_HAS_SA_RESTORER way which is implemented in that way 
> in linux 3.9 or simply revert the patch
>
>
> regards,
> Sebastian Gottschall
>
> -- 
> Mit freundlichen Grüssen / Regards
>
> Sebastian Gottschall / CTO
>
> NewMedia-NET GmbH - DD-WRT
> Firmensitz:  Berliner Ring 101, 64625 Bensheim
> Registergericht: Amtsgericht Darmstadt, HRB 25473
> Geschäftsführer: Peter Steinhäuser, Christian Scheele
> http://www.dd-wrt.com
> email: s.gottschall@dd-wrt.com
> Tel.: +496251-582650 / Fax: +496251-5826565
>


-- 
Mit freundlichen Grüssen / Regards

Sebastian Gottschall / CTO

NewMedia-NET GmbH - DD-WRT
Firmensitz:  Berliner Ring 101, 64625 Bensheim
Registergericht: Amtsgericht Darmstadt, HRB 25473
Geschäftsführer: Peter Steinhäuser, Christian Scheele
http://www.dd-wrt.com
email: s.gottschall@dd-wrt.com
Tel.: +496251-582650 / Fax: +496251-5826565


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [ 12/48] signal: always clear sa_restorer on execve
@ 2013-03-20 20:43   ` Sebastian Gottschall (DD-WRT)
  0 siblings, 0 replies; 6+ messages in thread
From: Sebastian Gottschall (DD-WRT) @ 2013-03-20 20:43 UTC (permalink / raw)
  To: stable, linux-kernel

Am 20.03.2013 20:02, schrieb Sebastian Gottschall (DD-WRT):
> Hello
>
> The patch for sa_restorer will break mips builds, since sa_restorer 
> isnt defined as field within the struct, but the MACRO is.
> so use the __ARCH_HAS_SA_RESTORER way which is implemented in that way 
> in linux 3.9 or simply revert the patch
>
>
> regards,
> Sebastian Gottschall
>
> -- 
> Mit freundlichen Grï¿œssen / Regards
>
> Sebastian Gottschall / CTO
>
> NewMedia-NET GmbH - DD-WRT
> Firmensitz:  Berliner Ring 101, 64625 Bensheim
> Registergericht: Amtsgericht Darmstadt, HRB 25473
> Geschï¿œftsfï¿œhrer: Peter Steinhï¿œuser, Christian Scheele
> http://www.dd-wrt.com
> email: s.gottschall@dd-wrt.com
> Tel.: +496251-582650 / Fax: +496251-5826565
>


-- 
Mit freundlichen Grï¿œssen / Regards

Sebastian Gottschall / CTO

NewMedia-NET GmbH - DD-WRT
Firmensitz:  Berliner Ring 101, 64625 Bensheim
Registergericht: Amtsgericht Darmstadt, HRB 25473
Geschï¿œftsfï¿œhrer: Peter Steinhï¿œuser, Christian Scheele
http://www.dd-wrt.com
email: s.gottschall@dd-wrt.com
Tel.: +496251-582650 / Fax: +496251-5826565


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [ 12/48] signal: always clear sa_restorer on execve
  2013-03-20 20:43   ` Sebastian Gottschall (DD-WRT)
  (?)
@ 2013-03-21  1:41   ` Ben Hutchings
  2013-03-26  4:45     ` signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer Ben Hutchings
  -1 siblings, 1 reply; 6+ messages in thread
From: Ben Hutchings @ 2013-03-21  1:41 UTC (permalink / raw)
  To: Sebastian Gottschall (DD-WRT)
  Cc: stable, linux-kernel, Al Viro, Andrew Morton


[-- Attachment #1.1: Type: text/plain, Size: 971 bytes --]

On Wed, 2013-03-20 at 21:43 +0100, Sebastian Gottschall (DD-WRT) wrote:
> Am 20.03.2013 20:02, schrieb Sebastian Gottschall (DD-WRT):
> > Hello
> >
> > The patch for sa_restorer will break mips builds, since sa_restorer 
> > isnt defined as field within the struct, but the MACRO is.
> > so use the __ARCH_HAS_SA_RESTORER way which is implemented in that way 
> > in linux 3.9 or simply revert the patch

This also appears to break blackfin, ia64, parisc and tile.

I think for earlier 3.x.y series we can use one of the attached
(untested) patches to define __ARCH_HAS_SA_RESTORER appropriately, and
then apply the upstream change:

commit 522cff142d7d2f9230839c9e1f21a4d8bcc22a4a
Author: Andrew Morton <akpm@linux-foundation.org>
Date:   Wed Mar 13 14:59:34 2013 -0700

    kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER

Ben.

-- 
Ben Hutchings
It is easier to write an incorrect program than to understand a correct one.

[-- Attachment #1.2: signal-fix-use-of-missing-sa_restorer-field-3.0-3.2-3.4.patch --]
[-- Type: text/x-patch, Size: 4436 bytes --]

From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 25 Nov 2012 22:24:19 -0500
Subject: signal: Fix use of missing sa_restorer field

flush_signal_handlers() needs to know whether sigaction::sa_restorer
is defined, not whether SA_RESTORER is defined.  Define the
__ARCH_HAS_SA_RESTORER macro to indicate this.

Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side
struct sigaction declarations'.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: Al Viro <viro@zeniv.linux.org.uk>
---
--- a/arch/arm/include/asm/signal.h
+++ b/arch/arm/include/asm/signal.h
@@ -127,6 +127,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/avr32/include/asm/signal.h
+++ b/arch/avr32/include/asm/signal.h
@@ -128,6 +128,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/cris/include/asm/signal.h
+++ b/arch/cris/include/asm/signal.h
@@ -122,6 +122,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/h8300/include/asm/signal.h
+++ b/arch/h8300/include/asm/signal.h
@@ -121,6 +121,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m32r/include/asm/signal.h
+++ b/arch/m32r/include/asm/signal.h
@@ -123,6 +123,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m68k/include/asm/signal.h
+++ b/arch/m68k/include/asm/signal.h
@@ -119,6 +119,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/mn10300/include/asm/signal.h
+++ b/arch/mn10300/include/asm/signal.h
@@ -131,6 +131,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/powerpc/include/asm/signal.h
+++ b/arch/powerpc/include/asm/signal.h
@@ -109,6 +109,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/s390/include/asm/signal.h
+++ b/arch/s390/include/asm/signal.h
@@ -131,6 +131,7 @@ struct sigaction {
         void (*sa_restorer)(void);
         sigset_t sa_mask;               /* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
         struct sigaction sa;
--- a/arch/sparc/include/asm/signal.h
+++ b/arch/sparc/include/asm/signal.h
@@ -191,6 +191,7 @@ struct __old_sigaction {
 	unsigned long		sa_flags;
 	void			(*sa_restorer)(void);  /* not used by Linux/SPARC yet */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 typedef struct sigaltstack {
 	void			__user *ss_sp;
--- a/arch/x86/include/asm/signal.h
+++ b/arch/x86/include/asm/signal.h
@@ -125,6 +125,8 @@ typedef unsigned long sigset_t;
 extern void do_notify_resume(struct pt_regs *, void *, __u32);
 # endif /* __KERNEL__ */
 
+#define __ARCH_HAS_SA_RESTORER
+
 #ifdef __i386__
 # ifdef __KERNEL__
 struct old_sigaction {
--- a/arch/xtensa/include/asm/signal.h
+++ b/arch/xtensa/include/asm/signal.h
@@ -133,6 +133,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/include/asm-generic/signal.h
+++ b/include/asm-generic/signal.h
@@ -99,6 +99,10 @@ typedef unsigned long old_sigset_t;
 
 #include <asm-generic/signal-defs.h>
 
+#ifdef SA_RESTORER
+#define __ARCH_HAS_SA_RESTORER
+#endif
+
 struct sigaction {
 	__sighandler_t sa_handler;
 	unsigned long sa_flags;

[-- Attachment #1.3: signal-fix-use-of-missing-sa_restorer-field-3.8.patch --]
[-- Type: text/x-patch, Size: 4380 bytes --]

From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 25 Nov 2012 22:24:19 -0500
Subject: signal: Fix use of missing sa_restorer field

flush_signal_handlers() needs to know whether sigaction::sa_restorer
is defined, not whether SA_RESTORER is defined.  Define the
__ARCH_HAS_SA_RESTORER macro to indicate this.

Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side
struct sigaction declarations'.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: Al Viro <viro@zeniv.linux.org.uk>
---
--- a/arch/arm/include/asm/signal.h
+++ b/arch/arm/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/avr32/include/asm/signal.h
+++ b/arch/avr32/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/cris/include/asm/signal.h
+++ b/arch/cris/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/h8300/include/asm/signal.h
+++ b/arch/h8300/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m32r/include/asm/signal.h
+++ b/arch/m32r/include/asm/signal.h
@@ -22,6 +22,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m68k/include/asm/signal.h
+++ b/arch/m68k/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/mn10300/include/asm/signal.h
+++ b/arch/mn10300/include/asm/signal.h
@@ -39,6 +39,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/powerpc/include/asm/signal.h
+++ b/arch/powerpc/include/asm/signal.h
@@ -1,6 +1,7 @@
 #ifndef _ASM_POWERPC_SIGNAL_H
 #define _ASM_POWERPC_SIGNAL_H
 
+#define __ARCH_HAS_SA_RESTORER
 #include <uapi/asm/signal.h>
 
 #endif /* _ASM_POWERPC_SIGNAL_H */
--- a/arch/s390/include/asm/signal.h
+++ b/arch/s390/include/asm/signal.h
@@ -34,6 +34,7 @@ struct sigaction {
         void (*sa_restorer)(void);
         sigset_t sa_mask;               /* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
         struct sigaction sa;
--- a/arch/sparc/include/asm/signal.h
+++ b/arch/sparc/include/asm/signal.h
@@ -26,5 +26,7 @@ struct k_sigaction {
 	void			__user *ka_restorer;
 };
 
+#define __ARCH_HAS_SA_RESTORER
+
 #endif /* !(__ASSEMBLY__) */
 #endif /* !(__SPARC_SIGNAL_H) */
--- a/arch/x86/include/asm/signal.h
+++ b/arch/x86/include/asm/signal.h
@@ -31,6 +31,9 @@ typedef sigset_t compat_sigset_t;
 #include <uapi/asm/signal.h>
 #ifndef __ASSEMBLY__
 extern void do_notify_resume(struct pt_regs *, void *, __u32);
+
+#define __ARCH_HAS_SA_RESTORER
+
 #ifdef __i386__
 struct old_sigaction {
 	__sighandler_t sa_handler;
--- a/arch/xtensa/include/asm/signal.h
+++ b/arch/xtensa/include/asm/signal.h
@@ -21,6 +21,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/include/uapi/asm-generic/signal.h
+++ b/include/uapi/asm-generic/signal.h
@@ -93,6 +93,10 @@ typedef unsigned long old_sigset_t;
 
 #include <asm-generic/signal-defs.h>
 
+#ifdef SA_RESTORER
+#define __ARCH_HAS_SA_RESTORER
+#endif
+
 struct sigaction {
 	__sighandler_t sa_handler;
 	unsigned long sa_flags;

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer
  2013-03-21  1:41   ` Ben Hutchings
@ 2013-03-26  4:45     ` Ben Hutchings
  2013-03-26 14:04       ` Luis Henriques
  0 siblings, 1 reply; 6+ messages in thread
From: Ben Hutchings @ 2013-03-26  4:45 UTC (permalink / raw)
  To: stable
  Cc: linux-kernel, Al Viro, Andrew Morton, Sebastian Gottschall (DD-WRT)


[-- Attachment #1.1: Type: text/plain, Size: 1481 bytes --]

On Thu, 2013-03-21 at 01:41 +0000, Ben Hutchings wrote:
> On Wed, 2013-03-20 at 21:43 +0100, Sebastian Gottschall (DD-WRT) wrote:
> > Am 20.03.2013 20:02, schrieb Sebastian Gottschall (DD-WRT):
> > > Hello
> > >
> > > The patch for sa_restorer will break mips builds, since sa_restorer 
> > > isnt defined as field within the struct, but the MACRO is.
> > > so use the __ARCH_HAS_SA_RESTORER way which is implemented in that way 
> > > in linux 3.9 or simply revert the patch
> 
> This also appears to break blackfin, ia64, parisc and tile.
> 
> I think for earlier 3.x.y series we can use one of the attached
> (untested) patches to define __ARCH_HAS_SA_RESTORER appropriately, and
> then apply the upstream change:
> 
> commit 522cff142d7d2f9230839c9e1f21a4d8bcc22a4a
> Author: Andrew Morton <akpm@linux-foundation.org>
> Date:   Wed Mar 13 14:59:34 2013 -0700
> 
>     kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER
> 
> Ben.

The Debian package of 3.2.41, which included these two patches, built on
mips and ia64.  (Actually it failed on ia64, but *compilation* was
successful.)

(This does not, of course, prove that I didn't un-fix the information
leak.)

Here is the first patch again (separate versions for 3.8.y and for
earlier series), now with a more accurate subject line.  I'm going to
include this in 3.2.42.

Ben.

-- 
Ben Hutchings
The two most common things in the universe are hydrogen and stupidity.


[-- Attachment #1.2: signal-define-__arch_has_sa_restorer-so-we-know-whether-to-clear-3.0-3.2-3.4.patch --]
[-- Type: text/x-patch, Size: 4469 bytes --]

From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 25 Nov 2012 22:24:19 -0500
Subject: signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer

flush_signal_handlers() needs to know whether sigaction::sa_restorer
is defined, not whether SA_RESTORER is defined.  Define the
__ARCH_HAS_SA_RESTORER macro to indicate this.

Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side
struct sigaction declarations'.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: Al Viro <viro@zeniv.linux.org.uk>
---
--- a/arch/arm/include/asm/signal.h
+++ b/arch/arm/include/asm/signal.h
@@ -127,6 +127,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/avr32/include/asm/signal.h
+++ b/arch/avr32/include/asm/signal.h
@@ -128,6 +128,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/cris/include/asm/signal.h
+++ b/arch/cris/include/asm/signal.h
@@ -122,6 +122,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/h8300/include/asm/signal.h
+++ b/arch/h8300/include/asm/signal.h
@@ -121,6 +121,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m32r/include/asm/signal.h
+++ b/arch/m32r/include/asm/signal.h
@@ -123,6 +123,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m68k/include/asm/signal.h
+++ b/arch/m68k/include/asm/signal.h
@@ -119,6 +119,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/mn10300/include/asm/signal.h
+++ b/arch/mn10300/include/asm/signal.h
@@ -131,6 +131,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/powerpc/include/asm/signal.h
+++ b/arch/powerpc/include/asm/signal.h
@@ -109,6 +109,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/s390/include/asm/signal.h
+++ b/arch/s390/include/asm/signal.h
@@ -131,6 +131,7 @@ struct sigaction {
         void (*sa_restorer)(void);
         sigset_t sa_mask;               /* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
         struct sigaction sa;
--- a/arch/sparc/include/asm/signal.h
+++ b/arch/sparc/include/asm/signal.h
@@ -191,6 +191,7 @@ struct __old_sigaction {
 	unsigned long		sa_flags;
 	void			(*sa_restorer)(void);  /* not used by Linux/SPARC yet */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 typedef struct sigaltstack {
 	void			__user *ss_sp;
--- a/arch/x86/include/asm/signal.h
+++ b/arch/x86/include/asm/signal.h
@@ -125,6 +125,8 @@ typedef unsigned long sigset_t;
 extern void do_notify_resume(struct pt_regs *, void *, __u32);
 # endif /* __KERNEL__ */
 
+#define __ARCH_HAS_SA_RESTORER
+
 #ifdef __i386__
 # ifdef __KERNEL__
 struct old_sigaction {
--- a/arch/xtensa/include/asm/signal.h
+++ b/arch/xtensa/include/asm/signal.h
@@ -133,6 +133,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/include/asm-generic/signal.h
+++ b/include/asm-generic/signal.h
@@ -99,6 +99,10 @@ typedef unsigned long old_sigset_t;
 
 #include <asm-generic/signal-defs.h>
 
+#ifdef SA_RESTORER
+#define __ARCH_HAS_SA_RESTORER
+#endif
+
 struct sigaction {
 	__sighandler_t sa_handler;
 	unsigned long sa_flags;

[-- Attachment #1.3: signal-define-__arch_has_sa_restorer-so-we-know-whether-to-clear-3.8.patch --]
[-- Type: text/x-patch, Size: 4413 bytes --]

From: Ben Hutchings <ben@decadent.org.uk>
Date: Sun, 25 Nov 2012 22:24:19 -0500
Subject: signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer

flush_signal_handlers() needs to know whether sigaction::sa_restorer
is defined, not whether SA_RESTORER is defined.  Define the
__ARCH_HAS_SA_RESTORER macro to indicate this.

Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side
struct sigaction declarations'.

Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
Cc: Al Viro <viro@zeniv.linux.org.uk>
---
--- a/arch/arm/include/asm/signal.h
+++ b/arch/arm/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/avr32/include/asm/signal.h
+++ b/arch/avr32/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/cris/include/asm/signal.h
+++ b/arch/cris/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/h8300/include/asm/signal.h
+++ b/arch/h8300/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m32r/include/asm/signal.h
+++ b/arch/m32r/include/asm/signal.h
@@ -22,6 +22,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/m68k/include/asm/signal.h
+++ b/arch/m68k/include/asm/signal.h
@@ -29,6 +29,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/mn10300/include/asm/signal.h
+++ b/arch/mn10300/include/asm/signal.h
@@ -39,6 +39,7 @@ struct sigaction {
 	__sigrestore_t sa_restorer;
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/arch/powerpc/include/asm/signal.h
+++ b/arch/powerpc/include/asm/signal.h
@@ -1,6 +1,7 @@
 #ifndef _ASM_POWERPC_SIGNAL_H
 #define _ASM_POWERPC_SIGNAL_H
 
+#define __ARCH_HAS_SA_RESTORER
 #include <uapi/asm/signal.h>
 
 #endif /* _ASM_POWERPC_SIGNAL_H */
--- a/arch/s390/include/asm/signal.h
+++ b/arch/s390/include/asm/signal.h
@@ -34,6 +34,7 @@ struct sigaction {
         void (*sa_restorer)(void);
         sigset_t sa_mask;               /* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
         struct sigaction sa;
--- a/arch/sparc/include/asm/signal.h
+++ b/arch/sparc/include/asm/signal.h
@@ -26,5 +26,7 @@ struct k_sigaction {
 	void			__user *ka_restorer;
 };
 
+#define __ARCH_HAS_SA_RESTORER
+
 #endif /* !(__ASSEMBLY__) */
 #endif /* !(__SPARC_SIGNAL_H) */
--- a/arch/x86/include/asm/signal.h
+++ b/arch/x86/include/asm/signal.h
@@ -31,6 +31,9 @@ typedef sigset_t compat_sigset_t;
 #include <uapi/asm/signal.h>
 #ifndef __ASSEMBLY__
 extern void do_notify_resume(struct pt_regs *, void *, __u32);
+
+#define __ARCH_HAS_SA_RESTORER
+
 #ifdef __i386__
 struct old_sigaction {
 	__sighandler_t sa_handler;
--- a/arch/xtensa/include/asm/signal.h
+++ b/arch/xtensa/include/asm/signal.h
@@ -21,6 +21,7 @@ struct sigaction {
 	void (*sa_restorer)(void);
 	sigset_t sa_mask;		/* mask last for extensibility */
 };
+#define __ARCH_HAS_SA_RESTORER
 
 struct k_sigaction {
 	struct sigaction sa;
--- a/include/uapi/asm-generic/signal.h
+++ b/include/uapi/asm-generic/signal.h
@@ -93,6 +93,10 @@ typedef unsigned long old_sigset_t;
 
 #include <asm-generic/signal-defs.h>
 
+#ifdef SA_RESTORER
+#define __ARCH_HAS_SA_RESTORER
+#endif
+
 struct sigaction {
 	__sighandler_t sa_handler;
 	unsigned long sa_flags;

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 828 bytes --]

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer
  2013-03-26  4:45     ` signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer Ben Hutchings
@ 2013-03-26 14:04       ` Luis Henriques
  0 siblings, 0 replies; 6+ messages in thread
From: Luis Henriques @ 2013-03-26 14:04 UTC (permalink / raw)
  To: Ben Hutchings
  Cc: stable, linux-kernel, Al Viro, Andrew Morton,
	Sebastian Gottschall (DD-WRT)

On Tue, Mar 26, 2013 at 04:45:42AM +0000, Ben Hutchings wrote:
> On Thu, 2013-03-21 at 01:41 +0000, Ben Hutchings wrote:
> > On Wed, 2013-03-20 at 21:43 +0100, Sebastian Gottschall (DD-WRT) wrote:
> > > Am 20.03.2013 20:02, schrieb Sebastian Gottschall (DD-WRT):
> > > > Hello
> > > >
> > > > The patch for sa_restorer will break mips builds, since sa_restorer 
> > > > isnt defined as field within the struct, but the MACRO is.
> > > > so use the __ARCH_HAS_SA_RESTORER way which is implemented in that way 
> > > > in linux 3.9 or simply revert the patch
> > 
> > This also appears to break blackfin, ia64, parisc and tile.
> > 
> > I think for earlier 3.x.y series we can use one of the attached
> > (untested) patches to define __ARCH_HAS_SA_RESTORER appropriately, and
> > then apply the upstream change:
> > 
> > commit 522cff142d7d2f9230839c9e1f21a4d8bcc22a4a
> > Author: Andrew Morton <akpm@linux-foundation.org>
> > Date:   Wed Mar 13 14:59:34 2013 -0700
> > 
> >     kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER
> > 
> > Ben.
> 
> The Debian package of 3.2.41, which included these two patches, built on
> mips and ia64.  (Actually it failed on ia64, but *compilation* was
> successful.)
> 
> (This does not, of course, prove that I didn't un-fix the information
> leak.)
> 
> Here is the first patch again (separate versions for 3.8.y and for
> earlier series), now with a more accurate subject line.  I'm going to
> include this in 3.2.42.

Thanks a lot Ben.  I'm queuing it for 3.5.

Cheers,
--
Luis


> 
> Ben.
> 
> -- 
> Ben Hutchings
> The two most common things in the universe are hydrogen and stupidity.
> 

> From: Ben Hutchings <ben@decadent.org.uk>
> Date: Sun, 25 Nov 2012 22:24:19 -0500
> Subject: signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer
> 
> flush_signal_handlers() needs to know whether sigaction::sa_restorer
> is defined, not whether SA_RESTORER is defined.  Define the
> __ARCH_HAS_SA_RESTORER macro to indicate this.
> 
> Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side
> struct sigaction declarations'.
> 
> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> ---
> --- a/arch/arm/include/asm/signal.h
> +++ b/arch/arm/include/asm/signal.h
> @@ -127,6 +127,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/avr32/include/asm/signal.h
> +++ b/arch/avr32/include/asm/signal.h
> @@ -128,6 +128,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/cris/include/asm/signal.h
> +++ b/arch/cris/include/asm/signal.h
> @@ -122,6 +122,7 @@ struct sigaction {
>  	void (*sa_restorer)(void);
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/h8300/include/asm/signal.h
> +++ b/arch/h8300/include/asm/signal.h
> @@ -121,6 +121,7 @@ struct sigaction {
>  	void (*sa_restorer)(void);
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/m32r/include/asm/signal.h
> +++ b/arch/m32r/include/asm/signal.h
> @@ -123,6 +123,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/m68k/include/asm/signal.h
> +++ b/arch/m68k/include/asm/signal.h
> @@ -119,6 +119,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/mn10300/include/asm/signal.h
> +++ b/arch/mn10300/include/asm/signal.h
> @@ -131,6 +131,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/powerpc/include/asm/signal.h
> +++ b/arch/powerpc/include/asm/signal.h
> @@ -109,6 +109,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/s390/include/asm/signal.h
> +++ b/arch/s390/include/asm/signal.h
> @@ -131,6 +131,7 @@ struct sigaction {
>          void (*sa_restorer)(void);
>          sigset_t sa_mask;               /* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>          struct sigaction sa;
> --- a/arch/sparc/include/asm/signal.h
> +++ b/arch/sparc/include/asm/signal.h
> @@ -191,6 +191,7 @@ struct __old_sigaction {
>  	unsigned long		sa_flags;
>  	void			(*sa_restorer)(void);  /* not used by Linux/SPARC yet */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  typedef struct sigaltstack {
>  	void			__user *ss_sp;
> --- a/arch/x86/include/asm/signal.h
> +++ b/arch/x86/include/asm/signal.h
> @@ -125,6 +125,8 @@ typedef unsigned long sigset_t;
>  extern void do_notify_resume(struct pt_regs *, void *, __u32);
>  # endif /* __KERNEL__ */
>  
> +#define __ARCH_HAS_SA_RESTORER
> +
>  #ifdef __i386__
>  # ifdef __KERNEL__
>  struct old_sigaction {
> --- a/arch/xtensa/include/asm/signal.h
> +++ b/arch/xtensa/include/asm/signal.h
> @@ -133,6 +133,7 @@ struct sigaction {
>  	void (*sa_restorer)(void);
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/include/asm-generic/signal.h
> +++ b/include/asm-generic/signal.h
> @@ -99,6 +99,10 @@ typedef unsigned long old_sigset_t;
>  
>  #include <asm-generic/signal-defs.h>
>  
> +#ifdef SA_RESTORER
> +#define __ARCH_HAS_SA_RESTORER
> +#endif
> +
>  struct sigaction {
>  	__sighandler_t sa_handler;
>  	unsigned long sa_flags;

> From: Ben Hutchings <ben@decadent.org.uk>
> Date: Sun, 25 Nov 2012 22:24:19 -0500
> Subject: signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer
> 
> flush_signal_handlers() needs to know whether sigaction::sa_restorer
> is defined, not whether SA_RESTORER is defined.  Define the
> __ARCH_HAS_SA_RESTORER macro to indicate this.
> 
> Vaguely based on upstream commit 574c4866e33d 'consolidate kernel-side
> struct sigaction declarations'.
> 
> Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
> Cc: Al Viro <viro@zeniv.linux.org.uk>
> ---
> --- a/arch/arm/include/asm/signal.h
> +++ b/arch/arm/include/asm/signal.h
> @@ -29,6 +29,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/avr32/include/asm/signal.h
> +++ b/arch/avr32/include/asm/signal.h
> @@ -29,6 +29,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/cris/include/asm/signal.h
> +++ b/arch/cris/include/asm/signal.h
> @@ -29,6 +29,7 @@ struct sigaction {
>  	void (*sa_restorer)(void);
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/h8300/include/asm/signal.h
> +++ b/arch/h8300/include/asm/signal.h
> @@ -29,6 +29,7 @@ struct sigaction {
>  	void (*sa_restorer)(void);
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/m32r/include/asm/signal.h
> +++ b/arch/m32r/include/asm/signal.h
> @@ -22,6 +22,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/m68k/include/asm/signal.h
> +++ b/arch/m68k/include/asm/signal.h
> @@ -29,6 +29,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/mn10300/include/asm/signal.h
> +++ b/arch/mn10300/include/asm/signal.h
> @@ -39,6 +39,7 @@ struct sigaction {
>  	__sigrestore_t sa_restorer;
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/arch/powerpc/include/asm/signal.h
> +++ b/arch/powerpc/include/asm/signal.h
> @@ -1,6 +1,7 @@
>  #ifndef _ASM_POWERPC_SIGNAL_H
>  #define _ASM_POWERPC_SIGNAL_H
>  
> +#define __ARCH_HAS_SA_RESTORER
>  #include <uapi/asm/signal.h>
>  
>  #endif /* _ASM_POWERPC_SIGNAL_H */
> --- a/arch/s390/include/asm/signal.h
> +++ b/arch/s390/include/asm/signal.h
> @@ -34,6 +34,7 @@ struct sigaction {
>          void (*sa_restorer)(void);
>          sigset_t sa_mask;               /* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>          struct sigaction sa;
> --- a/arch/sparc/include/asm/signal.h
> +++ b/arch/sparc/include/asm/signal.h
> @@ -26,5 +26,7 @@ struct k_sigaction {
>  	void			__user *ka_restorer;
>  };
>  
> +#define __ARCH_HAS_SA_RESTORER
> +
>  #endif /* !(__ASSEMBLY__) */
>  #endif /* !(__SPARC_SIGNAL_H) */
> --- a/arch/x86/include/asm/signal.h
> +++ b/arch/x86/include/asm/signal.h
> @@ -31,6 +31,9 @@ typedef sigset_t compat_sigset_t;
>  #include <uapi/asm/signal.h>
>  #ifndef __ASSEMBLY__
>  extern void do_notify_resume(struct pt_regs *, void *, __u32);
> +
> +#define __ARCH_HAS_SA_RESTORER
> +
>  #ifdef __i386__
>  struct old_sigaction {
>  	__sighandler_t sa_handler;
> --- a/arch/xtensa/include/asm/signal.h
> +++ b/arch/xtensa/include/asm/signal.h
> @@ -21,6 +21,7 @@ struct sigaction {
>  	void (*sa_restorer)(void);
>  	sigset_t sa_mask;		/* mask last for extensibility */
>  };
> +#define __ARCH_HAS_SA_RESTORER
>  
>  struct k_sigaction {
>  	struct sigaction sa;
> --- a/include/uapi/asm-generic/signal.h
> +++ b/include/uapi/asm-generic/signal.h
> @@ -93,6 +93,10 @@ typedef unsigned long old_sigset_t;
>  
>  #include <asm-generic/signal-defs.h>
>  
> +#ifdef SA_RESTORER
> +#define __ARCH_HAS_SA_RESTORER
> +#endif
> +
>  struct sigaction {
>  	__sighandler_t sa_handler;
>  	unsigned long sa_flags;



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [ 12/48] signal: always clear sa_restorer on execve
  2013-03-18 21:08 [ 00/48] 3.4.37-stable review Greg Kroah-Hartman
@ 2013-03-18 21:08 ` Greg Kroah-Hartman
  0 siblings, 0 replies; 6+ messages in thread
From: Greg Kroah-Hartman @ 2013-03-18 21:08 UTC (permalink / raw)
  To: linux-kernel
  Cc: Greg Kroah-Hartman, stable, Kees Cook, Emese Revfy, PaX Team,
	Al Viro, Oleg Nesterov, Eric W. Biederman, Serge Hallyn,
	Julien Tinnes, Andrew Morton, Linus Torvalds

3.4-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Kees Cook <keescook@chromium.org>

commit 2ca39528c01a933f6689cd6505ce65bd6d68a530 upstream.

When the new signal handlers are set up, the location of sa_restorer is
not cleared, leaking a parent process's address space location to
children.  This allows for a potential bypass of the parent's ASLR by
examining the sa_restorer value returned when calling sigaction().

Based on what should be considered "secret" about addresses, it only
matters across the exec not the fork (since the VMAs haven't changed
until the exec).  But since exec sets SIG_DFL and keeps sa_restorer,
this is where it should be fixed.

Given the few uses of sa_restorer, a "set" function was not written
since this would be the only use.  Instead, we use
__ARCH_HAS_SA_RESTORER, as already done in other places.

Example of the leak before applying this patch:

  $ cat /proc/$$/maps
  ...
  7fb9f3083000-7fb9f3238000 r-xp 00000000 fd:01 404469 .../libc-2.15.so
  ...
  $ ./leak
  ...
  7f278bc74000-7f278be29000 r-xp 00000000 fd:01 404469 .../libc-2.15.so
  ...
  1 0 (nil) 0x7fb9f30b94a0
  2 4000000 (nil) 0x7f278bcaa4a0
  3 4000000 (nil) 0x7f278bcaa4a0
  4 0 (nil) 0x7fb9f30b94a0
  ...

[akpm@linux-foundation.org: use SA_RESTORER for backportability]
Signed-off-by: Kees Cook <keescook@chromium.org>
Reported-by: Emese Revfy <re.emese@gmail.com>
Cc: Emese Revfy <re.emese@gmail.com>
Cc: PaX Team <pageexec@freemail.hu>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Serge Hallyn <serge.hallyn@canonical.com>
Cc: Julien Tinnes <jln@google.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
 kernel/signal.c |    3 +++
 1 file changed, 3 insertions(+)

--- a/kernel/signal.c
+++ b/kernel/signal.c
@@ -482,6 +482,9 @@ flush_signal_handlers(struct task_struct
 		if (force_default || ka->sa.sa_handler != SIG_IGN)
 			ka->sa.sa_handler = SIG_DFL;
 		ka->sa.sa_flags = 0;
+#ifdef SA_RESTORER
+		ka->sa.sa_restorer = NULL;
+#endif
 		sigemptyset(&ka->sa.sa_mask);
 		ka++;
 	}



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2013-03-26 14:04 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <514A07DC.60708@dd-wrt.com>
2013-03-20 20:43 ` [ 12/48] signal: always clear sa_restorer on execve Sebastian Gottschall (DD-WRT)
2013-03-20 20:43   ` Sebastian Gottschall (DD-WRT)
2013-03-21  1:41   ` Ben Hutchings
2013-03-26  4:45     ` signal: Define __ARCH_HAS_SA_RESTORER so we know whether to clear sa_restorer Ben Hutchings
2013-03-26 14:04       ` Luis Henriques
2013-03-18 21:08 [ 00/48] 3.4.37-stable review Greg Kroah-Hartman
2013-03-18 21:08 ` [ 12/48] signal: always clear sa_restorer on execve Greg Kroah-Hartman

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.