From b6d1b8c9fa343e9ca2345e259ef99085f954472e Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Thu, 21 Mar 2013 03:38:46 +0000 Subject: [PATCH] signal: Fix use of missing sa_restorer field (build regression introduced by fix for CVE-2013-0914) svn path=/dists/trunk/linux/; revision=19927 --- debian/changelog | 2 + ...fix-use-of-missing-sa_restorer-field.patch | 149 ++++++++++++++++++ debian/patches/series | 2 + 3 files changed, 153 insertions(+) create mode 100644 debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch diff --git a/debian/changelog b/debian/changelog index 3ebc86645..44ffd76b6 100644 --- a/debian/changelog +++ b/debian/changelog @@ -2,6 +2,8 @@ linux (3.8.4-1~experimental.1) UNRELEASED; urgency=low * New upstream stable update: http://www.kernel.org/pub/linux/kernel/v3.x/ChangeLog-3.8.4 + * signal: Fix use of missing sa_restorer field (build regression + introduced by fix for CVE-2013-0914) -- Ben Hutchings Wed, 20 Mar 2013 23:32:20 +0000 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..04c890554 --- /dev/null +++ b/debian/patches/bugfix/all/signal-fix-use-of-missing-sa_restorer-field.patch @@ -0,0 +1,149 @@ +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 +@@ -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 + + #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 + #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 + ++#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 15d31aff5..02cba59b9 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -77,3 +77,5 @@ bugfix/x86/drm-i915-add-quirk-to-invert-brightness-on-packard-bell-ncl20.patch bugfix/all/mm-Try-harder-to-allocate-vmemmap-blocks.patch features/all/alx/alx-update-for-3.8.patch bugfix/mips/mips-add-dependencies-for-have_arch_transparent_hugepage.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