Commit 028e1561 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/uaccess: Remove __chk_user_ptr() in __get/put_user

Commit d02f6b7d ("powerpc/uaccess: Evaluate macro arguments once,
before user access is allowed") changed the __chk_user_ptr()
argument from the passed ptr pointer to the locally
declared __gu_addr. But __gu_addr is locally defined as __user
so the check is pointless.

During kernel build __chk_user_ptr() voids and is only evaluated
during sparse checks so it should have been armless to leave the
original pointer check there.

Nevertheless, this check is indeed redundant with the assignment
above which casts the ptr pointer to the local __user __gu_addr.
In case of mismatch, sparse will detect it there, so the
__check_user_ptr() is not needed anywhere else than in access_ok().
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/69f17d75046733b891ab2e668dbf464787cdf598.1615398265.git.christophe.leroy@csgroup.eu
parent be15a165
...@@ -78,7 +78,6 @@ __pu_failed: \ ...@@ -78,7 +78,6 @@ __pu_failed: \
__typeof__(size) __pu_size = (size); \ __typeof__(size) __pu_size = (size); \
\ \
might_fault(); \ might_fault(); \
__chk_user_ptr(__pu_addr); \
__put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \ __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \
\ \
__pu_err; \ __pu_err; \
...@@ -197,7 +196,6 @@ extern long __get_user_bad(void); ...@@ -197,7 +196,6 @@ extern long __get_user_bad(void);
#define __get_user_size_allowed(x, ptr, size, retval) \ #define __get_user_size_allowed(x, ptr, size, retval) \
do { \ do { \
retval = 0; \ retval = 0; \
__chk_user_ptr(ptr); \
if (size > sizeof(x)) \ if (size > sizeof(x)) \
(x) = __get_user_bad(); \ (x) = __get_user_bad(); \
switch (size) { \ switch (size) { \
...@@ -230,7 +228,6 @@ do { \ ...@@ -230,7 +228,6 @@ do { \
__typeof__(*(ptr)) __user *__gu_addr = (ptr); \ __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
__typeof__(size) __gu_size = (size); \ __typeof__(size) __gu_size = (size); \
\ \
__chk_user_ptr(__gu_addr); \
if (do_allow) { \ if (do_allow) { \
might_fault(); \ might_fault(); \
__get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \ __get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \
......
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