diff options
author | Mark Rutland <mark.rutland@arm.com> | 2018-04-16 16:45:01 +0100 |
---|---|---|
committer | Catalin Marinas <catalin.marinas@arm.com> | 2018-04-18 15:13:27 +0100 |
commit | b2d71b3cda19831ec67f49d7c6ba0214d9367b29 (patch) | |
tree | 3fe300429e6d585372fe6ac1c5048b0e5283e5ba /arch/arm64 | |
parent | 800cb2e553d44541b83aa3ec45d9839385fe8ab6 (diff) | |
download | linux-stable-b2d71b3cda19831ec67f49d7c6ba0214d9367b29.tar.gz linux-stable-b2d71b3cda19831ec67f49d7c6ba0214d9367b29.tar.bz2 linux-stable-b2d71b3cda19831ec67f49d7c6ba0214d9367b29.zip |
arm64: signal: don't force known signals to SIGKILL
Since commit:
a7e6f1ca90354a31 ("arm64: signal: Force SIGKILL for unknown signals in force_signal_inject")
... any signal which is not SIGKILL will be upgraded to a SIGKILL be
force_signal_inject(). This includes signals we do expect, such as
SIGILL triggered by do_undefinstr().
Fix the check to use a logical AND rather than a logical OR, permitting
signals whose layout is SIL_FAULT.
Fixes: a7e6f1ca90354a31 ("arm64: signal: Force SIGKILL for unknown signals in force_signal_inject")
Cc: Will Deacon <will.deacon@arm.com>
Reviewed-by: Dave Martin <Dave.Martin@arm.com>
Signed-off-by: Mark Rutland <mark.rutland@arm.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
Diffstat (limited to 'arch/arm64')
-rw-r--r-- | arch/arm64/kernel/traps.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index ba964da31a25..1cb2749a72bf 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -366,7 +366,7 @@ void force_signal_inject(int signal, int code, unsigned long address) } /* Force signals we don't understand to SIGKILL */ - if (WARN_ON(signal != SIGKILL || + if (WARN_ON(signal != SIGKILL && siginfo_layout(signal, code) != SIL_FAULT)) { signal = SIGKILL; } |