summaryrefslogtreecommitdiffstats
path: root/crypto
diff options
context:
space:
mode:
authorWill Deacon <will.deacon@arm.com>2012-11-23 12:34:13 +0000
committerCatalin Marinas <catalin.marinas@arm.com>2012-11-23 18:09:19 +0000
commit304ef4e8367244b547734143c792a2ab764831e8 (patch)
treebcc73b221daac07e8cea238cbea2344edb778aa0 /crypto
parent0f07dfee2776a875613e2eeef25408d350322b71 (diff)
downloadop-kernel-dev-304ef4e8367244b547734143c792a2ab764831e8.zip
op-kernel-dev-304ef4e8367244b547734143c792a2ab764831e8.tar.gz
arm64: signal: push the unwinding prologue on the signal stack
To allow debuggers to unwind through signal frames, we create a fake stack unwinding prologue containing the link register and frame pointer of the interrupted context. The signal frame is then offset by 16 bytes to make room for the two saved registers which are pushed onto the frame of the *interrupted* context, rather than placed directly above the signal stack. This doesn't work when an alternative signal stack is set up for a SEGV handler, which is raised in response to RLIMIT_STACK being reached. In this case, we try to push the unwinding prologue onto the full stack and subsequently take a fault which we fail to resolve, causing setup_return to return -EFAULT and handle_signal to force_sigsegv on the current task. This patch fixes the problem by including the unwinding prologue as part of the rt_sigframe definition, which is populated during setup_sigframe, ensuring that it always ends up on the signal stack. Signed-off-by: Will Deacon <will.deacon@arm.com> Signed-off-by: Catalin Marinas <catalin.marinas@arm.com> Cc: <stable@vger.kernel.org>
Diffstat (limited to 'crypto')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud