capability: erase checker warnings about struct __user_cap_data_struct
authorGONG, Ruiqi <gongruiqi@huaweicloud.com>
Fri, 2 Jun 2023 05:45:27 +0000 (13:45 +0800)
committerPaul Moore <paul@paul-moore.com>
Tue, 6 Jun 2023 21:05:54 +0000 (17:05 -0400)
commit55382134366e641e97cd83264c22c60c7dc10ccd
tree9aaca9137470f1b92d7d72b091573a95284d6779
parent4432b507445acf3f8e09ce253d4ca852c177b625
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.

Signed-off-by: GONG, Ruiqi <gongruiqi@huaweicloud.com>
Acked-by: Serge Hallyn <serge@hallyn.com>
[PM: wrapped long lines in the description]
Signed-off-by: Paul Moore <paul@paul-moore.com>
include/uapi/linux/capability.h