tree:
https://android.googlesource.com/kernel/common android12-5.4
head: b9c4f1b9b54a54b68bf995eae93a5f300f2506d3
commit: 5444477e8a4d31f6e6ff720c2d018d06e405bcc1 [13960/19166] UPSTREAM: seccomp: Remove
bogus __user annotations
config: i386-randconfig-s002-20211116 (attached as .config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
# apt-get install sparse
# sparse version: v0.6.4-dirty
git remote add android-common
https://android.googlesource.com/kernel/common
git fetch --no-tags android-common android12-5.4
git checkout 5444477e8a4d31f6e6ff720c2d018d06e405bcc1
# save the attached .config to linux build tree
make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp(a)intel.com>
sparse warnings: (new ones prefixed by >>)
> kernel/seccomp.c:2041:41: sparse: sparse: incorrect type in
argument 3 (different address spaces) @@ expected void [noderef] <asn:1> * @@
got void *buffer @@
kernel/seccomp.c:2041:41: sparse: expected void
[noderef] <asn:1> *
kernel/seccomp.c:2041:41: sparse: got void *buffer
kernel/seccomp.c:2059:40: sparse: sparse: incorrect type in argument 3 (different
address spaces) @@ expected void [noderef] <asn:1> * @@ got void *buffer @@
kernel/seccomp.c:2059:40: sparse: expected void [noderef] <asn:1> *
kernel/seccomp.c:2059:40: sparse: got void *buffer
> kernel/seccomp.c:2115:54: sparse: sparse: incorrect type in
argument 2 (different address spaces) @@ expected void *buffer @@ got void
[noderef] <asn:1> *buffer @@
kernel/seccomp.c:2115:54: sparse: expected
void *buffer
kernel/seccomp.c:2115:54: sparse: got void [noderef] <asn:1> *buffer
kernel/seccomp.c:2119:53: sparse: sparse: incorrect type in argument 2 (different
address spaces) @@ expected void *buffer @@ got void [noderef] <asn:1>
*buffer @@
kernel/seccomp.c:2119:53: sparse: expected void *buffer
kernel/seccomp.c:2119:53: sparse: got void [noderef] <asn:1> *buffer
vim +2041 kernel/seccomp.c
0ddec0fc890020 Tyler Hicks 2017-08-11 2025
5444477e8a4d31 Jann Horn 2020-11-20 2026 static int read_actions_logged(struct
ctl_table *ro_table, void *buffer,
d013db029491b4 Tyler Hicks 2018-05-04 2027 size_t *lenp, loff_t *ppos)
0ddec0fc890020 Tyler Hicks 2017-08-11 2028 {
0ddec0fc890020 Tyler Hicks 2017-08-11 2029 char names[sizeof(seccomp_actions_avail)];
0ddec0fc890020 Tyler Hicks 2017-08-11 2030 struct ctl_table table;
0ddec0fc890020 Tyler Hicks 2017-08-11 2031
0ddec0fc890020 Tyler Hicks 2017-08-11 2032 memset(names, 0, sizeof(names));
0ddec0fc890020 Tyler Hicks 2017-08-11 2033
0ddec0fc890020 Tyler Hicks 2017-08-11 2034 if
(!seccomp_names_from_actions_logged(names, sizeof(names),
beb44acaf000c9 Tyler Hicks 2018-05-04 2035 seccomp_actions_logged, "
"))
0ddec0fc890020 Tyler Hicks 2017-08-11 2036 return -EINVAL;
d013db029491b4 Tyler Hicks 2018-05-04 2037
d013db029491b4 Tyler Hicks 2018-05-04 2038 table = *ro_table;
d013db029491b4 Tyler Hicks 2018-05-04 2039 table.data = names;
d013db029491b4 Tyler Hicks 2018-05-04 2040 table.maxlen = sizeof(names);
d013db029491b4 Tyler Hicks 2018-05-04 @2041 return proc_dostring(&table, 0, buffer,
lenp, ppos);
0ddec0fc890020 Tyler Hicks 2017-08-11 2042 }
0ddec0fc890020 Tyler Hicks 2017-08-11 2043
5444477e8a4d31 Jann Horn 2020-11-20 2044 static int write_actions_logged(struct
ctl_table *ro_table, void *buffer,
ea6eca778500b0 Tyler Hicks 2018-05-04 2045 size_t *lenp, loff_t *ppos, u32
*actions_logged)
d013db029491b4 Tyler Hicks 2018-05-04 2046 {
d013db029491b4 Tyler Hicks 2018-05-04 2047 char names[sizeof(seccomp_actions_avail)];
d013db029491b4 Tyler Hicks 2018-05-04 2048 struct ctl_table table;
d013db029491b4 Tyler Hicks 2018-05-04 2049 int ret;
d013db029491b4 Tyler Hicks 2018-05-04 2050
d013db029491b4 Tyler Hicks 2018-05-04 2051 if (!capable(CAP_SYS_ADMIN))
d013db029491b4 Tyler Hicks 2018-05-04 2052 return -EPERM;
d013db029491b4 Tyler Hicks 2018-05-04 2053
d013db029491b4 Tyler Hicks 2018-05-04 2054 memset(names, 0, sizeof(names));
d013db029491b4 Tyler Hicks 2018-05-04 2055
0ddec0fc890020 Tyler Hicks 2017-08-11 2056 table = *ro_table;
0ddec0fc890020 Tyler Hicks 2017-08-11 2057 table.data = names;
0ddec0fc890020 Tyler Hicks 2017-08-11 2058 table.maxlen = sizeof(names);
d013db029491b4 Tyler Hicks 2018-05-04 2059 ret = proc_dostring(&table, 1, buffer,
lenp, ppos);
0ddec0fc890020 Tyler Hicks 2017-08-11 2060 if (ret)
0ddec0fc890020 Tyler Hicks 2017-08-11 2061 return ret;
0ddec0fc890020 Tyler Hicks 2017-08-11 2062
ea6eca778500b0 Tyler Hicks 2018-05-04 2063 if
(!seccomp_actions_logged_from_names(actions_logged, table.data))
0ddec0fc890020 Tyler Hicks 2017-08-11 2064 return -EINVAL;
0ddec0fc890020 Tyler Hicks 2017-08-11 2065
ea6eca778500b0 Tyler Hicks 2018-05-04 2066 if (*actions_logged &
SECCOMP_LOG_ALLOW)
0ddec0fc890020 Tyler Hicks 2017-08-11 2067 return -EINVAL;
0ddec0fc890020 Tyler Hicks 2017-08-11 2068
ea6eca778500b0 Tyler Hicks 2018-05-04 2069 seccomp_actions_logged = *actions_logged;
d013db029491b4 Tyler Hicks 2018-05-04 2070 return 0;
0ddec0fc890020 Tyler Hicks 2017-08-11 2071 }
0ddec0fc890020 Tyler Hicks 2017-08-11 2072
ea6eca778500b0 Tyler Hicks 2018-05-04 2073 static void audit_actions_logged(u32
actions_logged, u32 old_actions_logged,
ea6eca778500b0 Tyler Hicks 2018-05-04 2074 int ret)
ea6eca778500b0 Tyler Hicks 2018-05-04 2075 {
ea6eca778500b0 Tyler Hicks 2018-05-04 2076 char names[sizeof(seccomp_actions_avail)];
ea6eca778500b0 Tyler Hicks 2018-05-04 2077 char
old_names[sizeof(seccomp_actions_avail)];
ea6eca778500b0 Tyler Hicks 2018-05-04 2078 const char *new = names;
ea6eca778500b0 Tyler Hicks 2018-05-04 2079 const char *old = old_names;
ea6eca778500b0 Tyler Hicks 2018-05-04 2080
ea6eca778500b0 Tyler Hicks 2018-05-04 2081 if (!audit_enabled)
ea6eca778500b0 Tyler Hicks 2018-05-04 2082 return;
ea6eca778500b0 Tyler Hicks 2018-05-04 2083
ea6eca778500b0 Tyler Hicks 2018-05-04 2084 memset(names, 0, sizeof(names));
ea6eca778500b0 Tyler Hicks 2018-05-04 2085 memset(old_names, 0, sizeof(old_names));
ea6eca778500b0 Tyler Hicks 2018-05-04 2086
ea6eca778500b0 Tyler Hicks 2018-05-04 2087 if (ret)
ea6eca778500b0 Tyler Hicks 2018-05-04 2088 new = "?";
ea6eca778500b0 Tyler Hicks 2018-05-04 2089 else if (!actions_logged)
ea6eca778500b0 Tyler Hicks 2018-05-04 2090 new = "(none)";
ea6eca778500b0 Tyler Hicks 2018-05-04 2091 else if
(!seccomp_names_from_actions_logged(names, sizeof(names),
ea6eca778500b0 Tyler Hicks 2018-05-04 2092 actions_logged, ","))
ea6eca778500b0 Tyler Hicks 2018-05-04 2093 new = "?";
ea6eca778500b0 Tyler Hicks 2018-05-04 2094
ea6eca778500b0 Tyler Hicks 2018-05-04 2095 if (!old_actions_logged)
ea6eca778500b0 Tyler Hicks 2018-05-04 2096 old = "(none)";
ea6eca778500b0 Tyler Hicks 2018-05-04 2097 else if
(!seccomp_names_from_actions_logged(old_names,
ea6eca778500b0 Tyler Hicks 2018-05-04 2098 sizeof(old_names),
ea6eca778500b0 Tyler Hicks 2018-05-04 2099 old_actions_logged,
","))
ea6eca778500b0 Tyler Hicks 2018-05-04 2100 old = "?";
ea6eca778500b0 Tyler Hicks 2018-05-04 2101
ea6eca778500b0 Tyler Hicks 2018-05-04 2102 return audit_seccomp_actions_logged(new,
old, !ret);
ea6eca778500b0 Tyler Hicks 2018-05-04 2103 }
ea6eca778500b0 Tyler Hicks 2018-05-04 2104
d013db029491b4 Tyler Hicks 2018-05-04 2105 static int
seccomp_actions_logged_handler(struct ctl_table *ro_table, int write,
d013db029491b4 Tyler Hicks 2018-05-04 2106 void __user *buffer, size_t *lenp,
d013db029491b4 Tyler Hicks 2018-05-04 2107 loff_t *ppos)
d013db029491b4 Tyler Hicks 2018-05-04 2108 {
ea6eca778500b0 Tyler Hicks 2018-05-04 2109 int ret;
ea6eca778500b0 Tyler Hicks 2018-05-04 2110
ea6eca778500b0 Tyler Hicks 2018-05-04 2111 if (write) {
ea6eca778500b0 Tyler Hicks 2018-05-04 2112 u32 actions_logged = 0;
ea6eca778500b0 Tyler Hicks 2018-05-04 2113 u32 old_actions_logged =
seccomp_actions_logged;
ea6eca778500b0 Tyler Hicks 2018-05-04 2114
ea6eca778500b0 Tyler Hicks 2018-05-04 @2115 ret = write_actions_logged(ro_table,
buffer, lenp, ppos,
ea6eca778500b0 Tyler Hicks 2018-05-04 2116 &actions_logged);
ea6eca778500b0 Tyler Hicks 2018-05-04 2117 audit_actions_logged(actions_logged,
old_actions_logged, ret);
ea6eca778500b0 Tyler Hicks 2018-05-04 2118 } else
ea6eca778500b0 Tyler Hicks 2018-05-04 2119 ret = read_actions_logged(ro_table, buffer,
lenp, ppos);
ea6eca778500b0 Tyler Hicks 2018-05-04 2120
ea6eca778500b0 Tyler Hicks 2018-05-04 2121 return ret;
0ddec0fc890020 Tyler Hicks 2017-08-11 2122 }
0ddec0fc890020 Tyler Hicks 2017-08-11 2123
:::::: The code at line 2041 was first introduced by commit
:::::: d013db029491b49e1459d5a55ecd9ec1be1447ca seccomp: Separate read and write code for
actions_logged sysctl
:::::: TO: Tyler Hicks <tyhicks(a)canonical.com>
:::::: CC: Paul Moore <paul(a)paul-moore.com>
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org