]> git.baikalelectronics.ru Git - kernel.git/commitdiff
powerpc/inst: Fix sparse detection on get_user_instr()
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Thu, 20 May 2021 13:50:38 +0000 (13:50 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Tue, 15 Jun 2021 14:16:49 +0000 (00:16 +1000)
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: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/0320e5b41a794fd456ab8c5993bbfadcf9e1d8b4.1621516826.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/inst.h

index 268d3bd073c8ac0b93221992fcc1377d79eccd1d..887ef150fdda7bf8085dfd846732612b98493950 100644 (file)
@@ -12,6 +12,8 @@
        unsigned long __gui_ptr = (unsigned long)ptr;                   \
        struct ppc_inst __gui_inst;                                     \
        unsigned int __prefix, __suffix;                                \
+                                                                       \
+       __chk_user_ptr(ptr);                                            \
        __gui_ret = gu_op(__prefix, (unsigned int __user *)__gui_ptr);  \
        if (__gui_ret == 0) {                                           \
                if ((__prefix >> 26) == OP_PREFIX) {                    \
 })
 #else /* !CONFIG_PPC64 */
 #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 */
 
 #define get_user_instr(x, ptr) \