signal: Introduce COMPAT_SIGMINSTKSZ for use in compat_sys_sigaltstack
authorWill Deacon <[email protected]>
Wed, 5 Sep 2018 14:34:42 +0000 (15:34 +0100)
committerCatalin Marinas <[email protected]>
Mon, 1 Oct 2018 10:43:55 +0000 (11:43 +0100)
commit22839869f21ab3850fbbac9b425ccc4c0023926f
tree0400aeeaafa9c71b5378185043e37429c6db6b8d
parent03630b3b76ccc2999f77e11c4ba60b0a549d023a
signal: Introduce COMPAT_SIGMINSTKSZ for use in compat_sys_sigaltstack

The sigaltstack(2) system call fails with -ENOMEM if the new alternative
signal stack is found to be smaller than SIGMINSTKSZ. On architectures
such as arm64, where the native value for SIGMINSTKSZ is larger than
the compat value, this can result in an unexpected error being reported
to a compat task. See, for example:

  https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=904385

This patch fixes the problem by extending do_sigaltstack to take the
minimum signal stack size as an additional parameter, allowing the
native and compat system call entry code to pass in their respective
values. COMPAT_SIGMINSTKSZ is just defined as SIGMINSTKSZ if it has not
been defined by the architecture.

Cc: Arnd Bergmann <[email protected]>
Cc: Dominik Brodowski <[email protected]>
Cc: "Eric W. Biederman" <[email protected]>
Cc: Andrew Morton <[email protected]>
Cc: Al Viro <[email protected]>
Cc: Oleg Nesterov <[email protected]>
Reported-by: Steve McIntyre <[email protected]>
Tested-by: Steve McIntyre <[email protected]>
Signed-off-by: Will Deacon <[email protected]>
Signed-off-by: Catalin Marinas <[email protected]>
include/linux/compat.h
kernel/signal.c