Commit 035785ab authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/uaccess: Introduce __get_user_size_goto()

We have got two places doing a goto based on the result
of __get_user_size_allowed().

Refactor that into __get_user_size_goto().
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/def8a39289e02653cfb1583b3b19837de9efed3a.1615398265.git.christophe.leroy@csgroup.eu
parent e72fcdb2
...@@ -183,6 +183,15 @@ do { \ ...@@ -183,6 +183,15 @@ do { \
} \ } \
} while (0) } while (0)
#define __get_user_size_goto(x, ptr, size, label) \
do { \
long __gus_retval; \
\
__get_user_size_allowed(x, ptr, size, __gus_retval); \
if (__gus_retval) \
goto label; \
} while (0)
/* /*
* This is a type: either unsigned long, if the argument fits into * This is a type: either unsigned long, if the argument fits into
* that type, or otherwise unsigned long long. * that type, or otherwise unsigned long long.
...@@ -351,13 +360,10 @@ user_write_access_begin(const void __user *ptr, size_t len) ...@@ -351,13 +360,10 @@ user_write_access_begin(const void __user *ptr, size_t len)
#define user_write_access_end prevent_current_write_to_user #define user_write_access_end prevent_current_write_to_user
#define unsafe_get_user(x, p, e) do { \ #define unsafe_get_user(x, p, e) do { \
long __gu_err; \
__long_type(*(p)) __gu_val; \ __long_type(*(p)) __gu_val; \
__typeof__(*(p)) __user *__gu_addr = (p); \ __typeof__(*(p)) __user *__gu_addr = (p); \
\ \
__get_user_size_allowed(__gu_val, __gu_addr, sizeof(*(p)), __gu_err); \ __get_user_size_goto(__gu_val, __gu_addr, sizeof(*(p)), e); \
if (__gu_err) \
goto e; \
(x) = (__typeof__(*(p)))__gu_val; \ (x) = (__typeof__(*(p)))__gu_val; \
} while (0) } while (0)
...@@ -409,14 +415,8 @@ do { \ ...@@ -409,14 +415,8 @@ do { \
#define HAVE_GET_KERNEL_NOFAULT #define HAVE_GET_KERNEL_NOFAULT
#define __get_kernel_nofault(dst, src, type, err_label) \ #define __get_kernel_nofault(dst, src, type, err_label) \
do { \ __get_user_size_goto(*((type *)(dst)), \
int __kr_err; \ (__force type __user *)(src), sizeof(type), err_label)
\
__get_user_size_allowed(*((type *)(dst)), (__force type __user *)(src),\
sizeof(type), __kr_err); \
if (unlikely(__kr_err)) \
goto err_label; \
} while (0)
#define __put_kernel_nofault(dst, src, type, err_label) \ #define __put_kernel_nofault(dst, src, type, err_label) \
__put_user_size_goto(*((type *)(src)), \ __put_user_size_goto(*((type *)(src)), \
......
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