linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [ammarfaizi2-block:google/android/kernel/common/android12-5.4 3638/9999] kernel/seccomp.c:2041:41: sparse: sparse: incorrect type in argument 3 (different address spaces)
@ 2022-01-25 11:24 kernel test robot
  2022-01-25 11:43 ` seccomp __user annotation fix backported too far in Android [was: Re: [ammarfaizi2-block:google/android/kernel/common/android12-5.4 3638/9999] kernel/seccomp.c:2041:41: sparse: sparse: incorrect type in argument 3 (different address spaces)] Jann Horn
  0 siblings, 1 reply; 2+ messages in thread
From: kernel test robot @ 2022-01-25 11:24 UTC (permalink / raw)
  To: Jann Horn
  Cc: kbuild-all, GNU/Weeb Mailing List, linux-kernel, Todd Kjos,
	Tyler Hicks, Kees Cook, Jeff Vander Stoep

tree:   https://github.com/ammarfaizi2/linux-block google/android/kernel/common/android12-5.4
head:   3307e1a058380163f1a11c8f7632706168f9fcb1
commit: 5444477e8a4d31f6e6ff720c2d018d06e405bcc1 [3638/9999] UPSTREAM: seccomp: Remove bogus __user annotations
config: x86_64-randconfig-s022 (https://download.01.org/0day-ci/archive/20220125/202201251943.TPk8Y7Ob-lkp@intel.com/config)
compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/ammarfaizi2/linux-block/commit/5444477e8a4d31f6e6ff720c2d018d06e405bcc1
        git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
        git fetch --no-tags ammarfaizi2-block google/android/kernel/common/android12-5.4
        git checkout 5444477e8a4d31f6e6ff720c2d018d06e405bcc1
        # save the config file to linux build tree
        mkdir build_dir
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@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@canonical.com>
:::::: CC: Paul Moore <paul@paul-moore.com>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

^ permalink raw reply	[flat|nested] 2+ messages in thread

* seccomp __user annotation fix backported too far in Android [was: Re: [ammarfaizi2-block:google/android/kernel/common/android12-5.4 3638/9999] kernel/seccomp.c:2041:41: sparse: sparse: incorrect type in argument 3 (different address spaces)]
  2022-01-25 11:24 [ammarfaizi2-block:google/android/kernel/common/android12-5.4 3638/9999] kernel/seccomp.c:2041:41: sparse: sparse: incorrect type in argument 3 (different address spaces) kernel test robot
@ 2022-01-25 11:43 ` Jann Horn
  0 siblings, 0 replies; 2+ messages in thread
From: Jann Horn @ 2022-01-25 11:43 UTC (permalink / raw)
  To: Jeff Vander Stoep, Todd Kjos
  Cc: kbuild-all, GNU/Weeb Mailing List, kernel list, Tyler Hicks,
	Kees Cook, kernel test robot

On Tue, Jan 25, 2022 at 12:25 PM kernel test robot <lkp@intel.com> wrote:
> tree:   https://github.com/ammarfaizi2/linux-block google/android/kernel/common/android12-5.4
> head:   3307e1a058380163f1a11c8f7632706168f9fcb1
> commit: 5444477e8a4d31f6e6ff720c2d018d06e405bcc1 [3638/9999] UPSTREAM: seccomp: Remove bogus __user annotations
> config: x86_64-randconfig-s022 (https://download.01.org/0day-ci/archive/20220125/202201251943.TPk8Y7Ob-lkp@intel.com/config)
> compiler: gcc-9 (Debian 9.3.0-22) 9.3.0
> reproduce:
>         # apt-get install sparse
>         # sparse version: v0.6.4-dirty
>         # https://github.com/ammarfaizi2/linux-block/commit/5444477e8a4d31f6e6ff720c2d018d06e405bcc1
>         git remote add ammarfaizi2-block https://github.com/ammarfaizi2/linux-block
>         git fetch --no-tags ammarfaizi2-block google/android/kernel/common/android12-5.4
>         git checkout 5444477e8a4d31f6e6ff720c2d018d06e405bcc1
>         # save the config file to linux build tree
>         mkdir build_dir
>         make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=x86_64 SHELL=/bin/bash
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>

It looks like this was a bogus backport -
fab686eb0307121e7a2890b6d6c57edd2457863d is marked as 'Fixes:
32927393dc1c ("sysctl: pass kernel pointers to ->proc_handler")', but
Android incorrectly backported the patch further
(https://android-review.googlesource.com/c/kernel/common/+/1535131/).

> 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  }
[...]

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-01-25 11:54 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-01-25 11:24 [ammarfaizi2-block:google/android/kernel/common/android12-5.4 3638/9999] kernel/seccomp.c:2041:41: sparse: sparse: incorrect type in argument 3 (different address spaces) kernel test robot
2022-01-25 11:43 ` seccomp __user annotation fix backported too far in Android [was: Re: [ammarfaizi2-block:google/android/kernel/common/android12-5.4 3638/9999] kernel/seccomp.c:2041:41: sparse: sparse: incorrect type in argument 3 (different address spaces)] Jann Horn

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).