2022-12-28 03:17:38

by guo.ziliang

[permalink] [raw]
Subject: [PATCH] arm64/uprobes: change the uprobe_opcode_t typedef to fix the sparse warning

From: junhua huang <[email protected]>

After we fixed the uprobe inst endian in aarch_be, the sparse check report
the following warning info:

sparse warnings: (new ones prefixed by >>)
>> kernel/events/uprobes.c:223:25: sparse: sparse: restricted __le32 degrades to integer
>> kernel/events/uprobes.c:574:56: sparse: sparse: incorrect type in argument 4 (different base types)
@@ expected unsigned int [addressable] [usertype] opcode @@ got restricted __le32 [usertype] @@
kernel/events/uprobes.c:574:56: sparse: expected unsigned int [addressable] [usertype] opcode
kernel/events/uprobes.c:574:56: sparse: got restricted __le32 [usertype]
>> kernel/events/uprobes.c:1483:32: sparse: sparse: incorrect type in initializer (different base types)
@@ expected unsigned int [usertype] insn @@ got restricted __le32 [usertype] @@
kernel/events/uprobes.c:1483:32: sparse: expected unsigned int [usertype] insn
kernel/events/uprobes.c:1483:32: sparse: got restricted __le32 [usertype]

use the __le32 to u32 for uprobe_opcode_t, to keep the same.

Fixes: 60f07e22a73d ("arm64:uprobe fix the uprobe SWBP_INSN in big-endian")
Reported-by: kernel test robot <[email protected]>
Signed-off-by: junhua huang <[email protected]>
---
arch/arm64/include/asm/uprobes.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm64/include/asm/uprobes.h b/arch/arm64/include/asm/uprobes.h
index ba4bff5ca674..2b09495499c6 100644
--- a/arch/arm64/include/asm/uprobes.h
+++ b/arch/arm64/include/asm/uprobes.h
@@ -16,7 +16,7 @@
#define UPROBE_SWBP_INSN_SIZE AARCH64_INSN_SIZE
#define UPROBE_XOL_SLOT_BYTES MAX_UINSN_BYTES

-typedef u32 uprobe_opcode_t;
+typedef __le32 uprobe_opcode_t;

struct arch_uprobe_task {
};
--
2.15.2


2023-01-05 18:58:58

by Will Deacon

[permalink] [raw]
Subject: Re: [PATCH] arm64/uprobes: change the uprobe_opcode_t typedef to fix the sparse warning

On Wed, 28 Dec 2022 09:54:12 +0800 (CST), [email protected] wrote:
> From: junhua huang <[email protected]>
>
> After we fixed the uprobe inst endian in aarch_be, the sparse check report
> the following warning info:
>
> sparse warnings: (new ones prefixed by >>)
> >> kernel/events/uprobes.c:223:25: sparse: sparse: restricted __le32 degrades to integer
> >> kernel/events/uprobes.c:574:56: sparse: sparse: incorrect type in argument 4 (different base types)
> @@ expected unsigned int [addressable] [usertype] opcode @@ got restricted __le32 [usertype] @@
> kernel/events/uprobes.c:574:56: sparse: expected unsigned int [addressable] [usertype] opcode
> kernel/events/uprobes.c:574:56: sparse: got restricted __le32 [usertype]
> >> kernel/events/uprobes.c:1483:32: sparse: sparse: incorrect type in initializer (different base types)
> @@ expected unsigned int [usertype] insn @@ got restricted __le32 [usertype] @@
> kernel/events/uprobes.c:1483:32: sparse: expected unsigned int [usertype] insn
> kernel/events/uprobes.c:1483:32: sparse: got restricted __le32 [usertype]
>
> [...]

Applied to arm64 (for-next/fixes), thanks!

[1/1] arm64/uprobes: change the uprobe_opcode_t typedef to fix the sparse warning
https://git.kernel.org/arm64/c/ef08c0fadd8a

Cheers,
--
Will

https://fixes.arm64.dev
https://next.arm64.dev
https://will.arm64.dev