Commit b3a9e523 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

powerpc/inst: Fix sparse detection on get_user_instr()

get_user_instr() lacks sparse detection for the __user tag.

This is because __gui_ptr is assigned with a cast.

Fix that by adding a __chk_user_ptr()
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/0320e5b41a794fd456ab8c5993bbfadcf9e1d8b4.1621516826.git.christophe.leroy@csgroup.eu
parent f30becb5
...@@ -12,6 +12,8 @@ ...@@ -12,6 +12,8 @@
unsigned long __gui_ptr = (unsigned long)ptr; \ unsigned long __gui_ptr = (unsigned long)ptr; \
struct ppc_inst __gui_inst; \ struct ppc_inst __gui_inst; \
unsigned int __prefix, __suffix; \ unsigned int __prefix, __suffix; \
\
__chk_user_ptr(ptr); \
__gui_ret = gu_op(__prefix, (unsigned int __user *)__gui_ptr); \ __gui_ret = gu_op(__prefix, (unsigned int __user *)__gui_ptr); \
if (__gui_ret == 0) { \ if (__gui_ret == 0) { \
if ((__prefix >> 26) == OP_PREFIX) { \ if ((__prefix >> 26) == OP_PREFIX) { \
...@@ -29,7 +31,10 @@ ...@@ -29,7 +31,10 @@
}) })
#else /* !CONFIG_PPC64 */ #else /* !CONFIG_PPC64 */
#define ___get_user_instr(gu_op, dest, ptr) \ #define ___get_user_instr(gu_op, dest, ptr) \
gu_op((dest).val, (u32 __user *)(ptr)) ({ \
__chk_user_ptr(ptr); \
gu_op((dest).val, (u32 __user *)(ptr)); \
})
#endif /* CONFIG_PPC64 */ #endif /* CONFIG_PPC64 */
#define get_user_instr(x, ptr) \ #define get_user_instr(x, ptr) \
......
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