arm64: signal: Allow expansion of the signal frame
authorDave Martin <Dave.Martin@arm.com>
Tue, 20 Jun 2017 17:23:39 +0000 (18:23 +0100)
committerWill Deacon <will.deacon@arm.com>
Fri, 23 Jun 2017 17:20:18 +0000 (18:20 +0100)
commit33f082614c3443d937f50fe936f284f62bbb4a1b
treef3d1f5fc5eaa4a3dca12e052a19ff6f462c5c880
parent8effeaaf2cacc8a8007d3089e253e7baaff57bb7
arm64: signal: Allow expansion of the signal frame

This patch defines an extra_context signal frame record that can be
used to describe an expanded signal frame, and modifies the context
block allocator and signal frame setup and parsing code to create,
populate, parse and decode this block as necessary.

To avoid abuse by userspace, parse_user_sigframe() attempts to
ensure that:

 * no more than one extra_context is accepted;
 * the extra context data is a sensible size, and properly placed
   and aligned.

The extra_context data is required to start at the first 16-byte
aligned address immediately after the dummy terminator record
following extra_context in rt_sigframe.__reserved[] (as ensured
during signal delivery).  This serves as a sanity-check that the
signal frame has not been moved or copied without taking the extra
data into account.

Signed-off-by: Dave Martin <Dave.Martin@arm.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
[will: add __force annotation when casting extra_datap to __user pointer]
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/include/uapi/asm/sigcontext.h
arch/arm64/kernel/signal.c