diff --git a/debian/changelog b/debian/changelog index 0c0ada1d3..1f4bdc131 100644 --- a/debian/changelog +++ b/debian/changelog @@ -105,6 +105,8 @@ linux (3.2.41-1) UNRELEASED; urgency=low - drm: don't add inferred modes for monitors that don't support them - drm/i915: EBUSY status handling added to i915_gem_fault(). - drm/i915: Increase the RC6p threshold. + * signal: Fix use of missing sa_restorer field (build regression + introduced by fix for CVE-2013-0914) -- Ben Hutchings Wed, 27 Feb 2013 03:48:30 +0000 diff --git a/debian/patches/bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch b/debian/patches/bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch new file mode 100644 index 000000000..2a6c05fd9 --- /dev/null +++ b/debian/patches/bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch @@ -0,0 +1,36 @@ +From: Andrew Morton +Date: Wed, 13 Mar 2013 14:59:34 -0700 +Subject: kernel/signal.c: use __ARCH_HAS_SA_RESTORER instead of SA_RESTORER + +commit 522cff142d7d2f9230839c9e1f21a4d8bcc22a4a upstream. + +__ARCH_HAS_SA_RESTORER is the preferred conditional for use in 3.9 and +later kernels, per Kees. + +Cc: Emese Revfy +Cc: Emese Revfy +Cc: PaX Team +Cc: Al Viro +Cc: Oleg Nesterov +Cc: "Eric W. Biederman" +Cc: Serge Hallyn +Cc: Julien Tinnes +Signed-off-by: Andrew Morton +Signed-off-by: Linus Torvalds +--- + kernel/signal.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/kernel/signal.c b/kernel/signal.c +index 43b0d4a..dd72567 100644 +--- a/kernel/signal.c ++++ b/kernel/signal.c +@@ -485,7 +485,7 @@ flush_signal_handlers(struct task_struct *t, int force_default) + if (force_default || ka->sa.sa_handler != SIG_IGN) + ka->sa.sa_handler = SIG_DFL; + ka->sa.sa_flags = 0; +-#ifdef SA_RESTORER ++#ifdef __ARCH_HAS_SA_RESTORER + ka->sa.sa_restorer = NULL; + #endif + sigemptyset(&ka->sa.sa_mask); diff --git a/debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch b/debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch new file mode 100644 index 000000000..c564ae999 --- /dev/null +++ b/debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch @@ -0,0 +1,148 @@ +From: Ben Hutchings +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 +Cc: Al Viro +--- +--- 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 + ++#ifdef SA_RESTORER ++#define __ARCH_HAS_SA_RESTORER ++#endif ++ + struct sigaction { + __sighandler_t sa_handler; + unsigned long sa_flags; diff --git a/debian/patches/series b/debian/patches/series index 40c784120..d2c57b91c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -617,3 +617,5 @@ debian/efi-autoload-efivars.patch bugfix/all/kexec-remove-KMSG_DUMP_KEXEC.patch bugfix/all/kmsg_dump-don-t-run-on-non-error-paths-by-default.patch bugfix/all/i915-initialize-CADL-in-opregion.patch +bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch +bugfix/all/kernel-signal.c-use-__ARCH_HAS_SA_RESTORER-instead-o.patch