History

capability: erase checker warnings about struct __user_cap_data_struct

Currently Sparse warns the following when compiling kernel/capability.c: kernel/capability.c:191:35: warning: incorrect type in argument 2 (different address spaces) kernel/capability.c:191:35: expected void const *from kernel/capability.c:191:35: got struct __user_cap_data_struct [noderef] __user * kernel/capability.c:168:14: warning: dereference of noderef expression ...... (multiple noderef warnings on different locations) kernel/capability.c:244:29: warning: incorrect type in argument 1 (different address spaces) kernel/capability.c:244:29: expected void *to kernel/capability.c:244:29: got struct __user_cap_data_struct [noderef] __user ( * )[2] kernel/capability.c:247:42: warning: dereference of noderef expression ...... (multiple noderef warnings on different locations) It seems that defining `struct __user_cap_data_struct` together with `cap_user_data_t` make Sparse believe that the struct is `noderef` as well. Separate their definitions to clarify their respective attributes.

GONG, Ruiqi committed 3 years ago

Commit 55382131 parent 4432b501 file · +3 −2Browse files

Showing the changes to include/uapi/linux/capability.h (1 of 1 file). Show all

Unified · Split

include/uapi/linux/capability.h+3−2
@@ -41,11 +41,12 @@ typedef struct __user_cap_header_struct { · 40 unmodified lines
41 int pid;41 int pid;
42} __user *cap_user_header_t;42} __user *cap_user_header_t;
43 43
44typedef struct __user_cap_data_struct {44struct __user_cap_data_struct {
45 __u32 effective;45 __u32 effective;
46 __u32 permitted;46 __u32 permitted;
47 __u32 inheritable;47 __u32 inheritable;
48} __user *cap_user_data_t;48};
49typedef struct __user_cap_data_struct __user *cap_user_data_t;
49 50
50 51
51#define VFS_CAP_REVISION_MASK 0xFF00000052#define VFS_CAP_REVISION_MASK 0xFF000000