s390: current_stack_pointer shouldn't be a function
s390 defines current_stack_pointer as function while all other
architectures use 'register unsigned long asm("<stackptr reg>").
This make codes like the following from check_stack_object() fail:
if (IS_ENABLED(CONFIG_STACK_GROWSUP)) {
if ((void *)current_stack_pointer < obj + len)
return BAD_STACK;
} else {
if (obj < (void *)current_stack_pointer)
return BAD_STACK;
}
because this would compare the address of current_stack_pointer() and
not the stackpointer value.
Reported-by: Karsten Graul <kgraul@linux.ibm.com>
Fixes: 2792d84e6d ("usercopy: Check valid lifetime via stack depth")
Cc: Kees Cook <keescook@chromium.org>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Alexander Gordeev <agordeev@linux.ibm.com>
Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Reviewed-by: Heiko Carstens <hca@linux.ibm.com>
Signed-off-by: Heiko Carstens <hca@linux.ibm.com>
This commit is contained in:
committed by
Heiko Carstens
parent
a25d588782
commit
30de14b188
@@ -46,7 +46,7 @@ struct stack_frame {
|
||||
};
|
||||
|
||||
/*
|
||||
* Unlike current_stack_pointer() which simply returns current value of %r15
|
||||
* Unlike current_stack_pointer which simply contains the current value of %r15
|
||||
* current_frame_address() returns function stack frame address, which matches
|
||||
* %r15 upon function invocation. It may differ from %r15 later if function
|
||||
* allocates stack for local variables or new stack frame to call other
|
||||
|
||||
Reference in New Issue
Block a user