Commit 9a159190 authored by Vasily Gorbik's avatar Vasily Gorbik

s390/unwind: avoid int overflow in outside_of_stack

When current task is interrupted in-between stack frame allocation
and backchain write instructions new stack frame backchain pointer
is left uninitialized. That invalid backchain value is passed into
outside_of_stack for sanity check. Make sure int overflow does not happen
by subtracting stack_frame size from the stack "end" rather than adding
it to "random" backchain value.

Fixes: 41b0474c1b1c ("s390/unwind: introduce stack unwind API")
Reviewed-by: default avatarChristian Borntraeger <borntraeger@de.ibm.com>
Signed-off-by: default avatarVasily Gorbik <gor@linux.ibm.com>
parent 73df167c
...@@ -20,7 +20,7 @@ EXPORT_SYMBOL_GPL(unwind_get_return_address); ...@@ -20,7 +20,7 @@ EXPORT_SYMBOL_GPL(unwind_get_return_address);
static bool outside_of_stack(struct unwind_state *state, unsigned long sp) static bool outside_of_stack(struct unwind_state *state, unsigned long sp)
{ {
return (sp <= state->sp) || return (sp <= state->sp) ||
(sp + sizeof(struct stack_frame) > state->stack_info.end); (sp > state->stack_info.end - sizeof(struct stack_frame));
} }
static bool update_stack_info(struct unwind_state *state, unsigned long sp) static bool update_stack_info(struct unwind_state *state, unsigned long sp)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment