diff mbox series

[v3,05/46] x86: asm: instrument usercopy in get_user() and __put_user_size()

Message ID 20220426164315.625149-6-glider@google.com (mailing list archive)
State New
Headers show
Series Add KernelMemorySanitizer infrastructure | expand

Commit Message

Alexander Potapenko April 26, 2022, 4:42 p.m. UTC
Use hooks from instrumented.h to notify bug detection tools about
usercopy events in get_user() and put_user_size().

It's still unclear how to instrument put_user(), which assumes that
instrumentation code doesn't clobber RAX.

Signed-off-by: Alexander Potapenko <glider@google.com>
---
Link: https://linux-review.googlesource.com/id/Ia9f12bfe5832623250e20f1859fdf5cc485a2fce
---
 arch/x86/include/asm/uaccess.h | 7 +++++++
 1 file changed, 7 insertions(+)

Comments

kernel test robot April 27, 2022, 3:45 a.m. UTC | #1
Hi Alexander,

I love your patch! Perhaps something to improve:

[auto build test WARNING on tip/x86/core]
[also build test WARNING on tip/x86/mm linus/master v5.18-rc4 next-20220426]
[cannot apply to hnaz-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 203d8919a9eda5d1bc68ac3cd7637588334c9dc1
config: i386-randconfig-s002-20220425 (https://download.01.org/0day-ci/archive/20220427/202204271153.LHpYYyCa-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/intel-lab-lkp/linux/commit/d216de19c8dd97fb6b0eac84fce4362489a61b2e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
        git checkout d216de19c8dd97fb6b0eac84fce4362489a61b2e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash arch/x86/kernel/ kernel/ mm/

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 >>)
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:360:9: sparse:     expected void const volatile [noderef] __user *ptr
   arch/x86/kernel/signal.c:360:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
>> arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:360:9: sparse:     expected void [noderef] __user *to
   arch/x86/kernel/signal.c:360:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:420:9: sparse:     expected void const volatile [noderef] __user *ptr
   arch/x86/kernel/signal.c:420:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:420:9: sparse:     expected void [noderef] __user *to
   arch/x86/kernel/signal.c:420:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:953:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct lockdep_map const *lock @@     got struct lockdep_map [noderef] __rcu * @@
   arch/x86/kernel/signal.c:953:9: sparse:     expected struct lockdep_map const *lock
   arch/x86/kernel/signal.c:953:9: sparse:     got struct lockdep_map [noderef] __rcu *
--
   kernel/signal.c: note: in included file (through arch/x86/include/uapi/asm/signal.h, arch/x86/include/asm/signal.h, include/uapi/linux/signal.h, ...):
   include/uapi/asm-generic/signal-defs.h:83:29: sparse: sparse: multiple address spaces given
   kernel/signal.c:195:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:195:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:195:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:198:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:198:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:198:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:480:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:480:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:480:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:484:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:484:34: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:484:34: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:517:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:517:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:517:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:520:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:520:36: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:520:36: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:542:53: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct k_sigaction *ka @@     got struct k_sigaction [noderef] __rcu * @@
   kernel/signal.c:542:53: sparse:     expected struct k_sigaction *ka
   kernel/signal.c:542:53: sparse:     got struct k_sigaction [noderef] __rcu *
   include/uapi/asm-generic/signal-defs.h:83:29: sparse: sparse: multiple address spaces given
   kernel/signal.c:698:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:698:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:698:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:700:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:700:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:700:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const volatile [noderef] __user *ptr
   kernel/signal.c:1263:29: sparse:     got unsigned char *
>> kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const [noderef] __user *from
   kernel/signal.c:1263:29: sparse:     got unsigned char *
>> kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const [noderef] __user *from
   kernel/signal.c:1263:29: sparse:     got unsigned char *
   kernel/signal.c:1330:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1330:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1330:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1331:16: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct k_sigaction *action @@     got struct k_sigaction [noderef] __rcu * @@
   kernel/signal.c:1331:16: sparse:     expected struct k_sigaction *action
   kernel/signal.c:1331:16: sparse:     got struct k_sigaction [noderef] __rcu *
   kernel/signal.c:1351:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1351:34: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1351:34: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1929:36: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1929:36: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1929:36: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2039:44: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2058:65: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *tsk @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2058:65: sparse:     expected struct task_struct *tsk
   kernel/signal.c:2058:65: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2059:40: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2077:14: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct sighand_struct *psig @@     got struct sighand_struct [noderef] __rcu *[noderef] __rcu sighand @@
   kernel/signal.c:2077:14: sparse:     expected struct sighand_struct *psig
   kernel/signal.c:2077:14: sparse:     got struct sighand_struct [noderef] __rcu *[noderef] __rcu sighand
   kernel/signal.c:2106:46: sparse: sparse: incorrect type in argument 3 (different address spaces) @@     expected struct task_struct *t @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2106:46: sparse:     expected struct task_struct *t
   kernel/signal.c:2106:46: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2107:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2107:34: sparse:     expected struct task_struct *parent
   kernel/signal.c:2107:34: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2136:24: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2136:24: sparse:     expected struct task_struct *parent
   kernel/signal.c:2136:24: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2139:24: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *real_parent @@
   kernel/signal.c:2139:24: sparse:     expected struct task_struct *parent
   kernel/signal.c:2139:24: sparse:     got struct task_struct [noderef] __rcu *real_parent
   kernel/signal.c:2172:17: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct sighand_struct *sighand @@     got struct sighand_struct [noderef] __rcu *sighand @@
   kernel/signal.c:2172:17: sparse:     expected struct sighand_struct *sighand
   kernel/signal.c:2172:17: sparse:     got struct sighand_struct [noderef] __rcu *sighand
   kernel/signal.c:2213:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2213:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2213:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2215:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2215:39: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2215:39: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2266:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2266:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2266:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2322:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2322:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2322:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2363:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2363:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2363:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2365:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2365:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2365:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2464:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2464:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2464:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2548:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2548:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2548:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2560:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2560:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2560:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2595:52: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *tsk @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2595:52: sparse:     expected struct task_struct *tsk
   kernel/signal.c:2595:52: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2597:49: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2635:49: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct sighand_struct *sighand @@     got struct sighand_struct [noderef] __rcu *sighand @@
   kernel/signal.c:2635:49: sparse:     expected struct sighand_struct *sighand
   kernel/signal.c:2635:49: sparse:     got struct sighand_struct [noderef] __rcu *sighand
   kernel/signal.c:2964:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2964:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2964:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2984:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2984:29: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2984:29: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3051:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3051:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3051:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3053:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3053:29: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3053:29: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3204:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3204:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3204:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3207:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3207:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3207:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3594:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3594:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3594:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3606:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3606:37: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3606:37: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3611:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3611:35: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3611:35: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3616:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3616:29: sparse:     expected struct spinlock [usertype] *lock

vim +360 arch/x86/kernel/signal.c

75779f05264b99 arch/x86/kernel/signal.c    Hiroshi Shimamoto 2009-02-27  325  
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  326  static int
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  327  __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  328  	      struct pt_regs *regs)
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  329  {
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  330  	struct sigframe __user *frame;
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  331  	void __user *restorer;
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  332  	void __user *fp = NULL;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  333  
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  334  	frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fp);
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  335  
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  336  	if (!user_access_begin(frame, sizeof(*frame)))
3d0aedd9538e6b arch/x86/kernel/signal_32.c Hiroshi Shimamoto 2008-09-12  337  		return -EFAULT;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  338  
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  339  	unsafe_put_user(sig, &frame->sig, Efault);
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  340  	unsafe_put_sigcontext(&frame->sc, fp, regs, set, Efault);
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  341  	unsafe_put_user(set->sig[1], &frame->extramask[0], Efault);
1a3e4ca41c5a38 arch/x86/kernel/signal_32.c Roland McGrath    2008-04-09  342  	if (current->mm->context.vdso)
6f121e548f8367 arch/x86/kernel/signal.c    Andy Lutomirski   2014-05-05  343  		restorer = current->mm->context.vdso +
0a6d1fa0d2b48f arch/x86/kernel/signal.c    Andy Lutomirski   2015-10-05  344  			vdso_image_32.sym___kernel_sigreturn;
9fbbd4dd17d071 arch/i386/kernel/signal.c   Andi Kleen        2007-02-13  345  	else
ade1af77129dea arch/x86/kernel/signal_32.c Jan Engelhardt    2008-01-30  346  		restorer = &frame->retcode;
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  347  	if (ksig->ka.sa.sa_flags & SA_RESTORER)
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  348  		restorer = ksig->ka.sa.sa_restorer;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  349  
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  350  	/* Set up to return from userspace.  */
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  351  	unsafe_put_user(restorer, &frame->pretcode, Efault);
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  352  
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  353  	/*
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  354  	 * This is popl %eax ; movl $__NR_sigreturn, %eax ; int $0x80
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  355  	 *
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  356  	 * WE DO NOT USE IT ANY MORE! It's only left here for historical
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  357  	 * reasons and because gdb uses it as a signature to notice
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  358  	 * signal handler stack frames.
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  359  	 */
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15 @360  	unsafe_put_user(*((u64 *)&retcode), (u64 *)frame->retcode, Efault);
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  361  	user_access_end();
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  362  
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  363  	/* Set up registers for signal handler */
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  364  	regs->sp = (unsigned long)frame;
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  365  	regs->ip = (unsigned long)ksig->ka.sa.sa_handler;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  366  	regs->ax = (unsigned long)sig;
92bc2056855b32 arch/x86/kernel/signal_32.c Harvey Harrison   2008-02-08  367  	regs->dx = 0;
92bc2056855b32 arch/x86/kernel/signal_32.c Harvey Harrison   2008-02-08  368  	regs->cx = 0;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  369  
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  370  	regs->ds = __USER_DS;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  371  	regs->es = __USER_DS;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  372  	regs->ss = __USER_DS;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  373  	regs->cs = __USER_CS;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  374  
283828f3c19ceb arch/i386/kernel/signal.c   David Howells     2006-01-18  375  	return 0;
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  376  
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  377  Efault:
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  378  	user_access_end();
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  379  	return -EFAULT;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  380  }
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  381
kernel test robot April 27, 2022, 6:58 a.m. UTC | #2
Hi Alexander,

I love your patch! Yet something to improve:

[auto build test ERROR on tip/x86/core]
[also build test ERROR on tip/x86/mm linus/master v5.18-rc4 next-20220426]
[cannot apply to hnaz-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 203d8919a9eda5d1bc68ac3cd7637588334c9dc1
config: i386-randconfig-a014-20220425 (https://download.01.org/0day-ci/archive/20220427/202204271447.yO4J25Hd-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce (this is a W=1 build):
        # https://github.com/intel-lab-lkp/linux/commit/d216de19c8dd97fb6b0eac84fce4362489a61b2e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
        git checkout d216de19c8dd97fb6b0eac84fce4362489a61b2e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 O=build_dir ARCH=i386 SHELL=/bin/bash

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   In file included from include/linux/uaccess.h:11,
                    from include/linux/sched/task.h:11,
                    from include/linux/sched/signal.h:9,
                    from include/linux/rcuwait.h:6,
                    from include/linux/percpu-rwsem.h:7,
                    from include/linux/fs.h:33,
                    from include/linux/huge_mm.h:8,
                    from include/linux/mm.h:700,
                    from arch/x86/math-emu/fpu_system.h:18,
                    from arch/x86/math-emu/fpu_emu.h:73,
                    from arch/x86/math-emu/reg_ld_str.c:21:
   arch/x86/math-emu/reg_ld_str.c: In function 'fldenv':
>> arch/x86/include/asm/uaccess.h:103:50: error: cannot take address of bit-field 'selector'
     103 |         instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
         |                                                  ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1043:17: note: in expansion of macro 'FPU_get_user'
    1043 |                 FPU_get_user(instruction_address.selector,
         |                 ^~~~~~~~~~~~
   arch/x86/include/asm/uaccess.h:109:49: error: cannot take address of bit-field 'selector'
     109 |         instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
         |                                                 ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1043:17: note: in expansion of macro 'FPU_get_user'
    1043 |                 FPU_get_user(instruction_address.selector,
         |                 ^~~~~~~~~~~~
>> arch/x86/include/asm/uaccess.h:103:50: error: cannot take address of bit-field 'selector'
     103 |         instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
         |                                                  ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1047:17: note: in expansion of macro 'FPU_get_user'
    1047 |                 FPU_get_user(operand_address.selector,
         |                 ^~~~~~~~~~~~
   arch/x86/include/asm/uaccess.h:109:49: error: cannot take address of bit-field 'selector'
     109 |         instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
         |                                                 ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1047:17: note: in expansion of macro 'FPU_get_user'
    1047 |                 FPU_get_user(operand_address.selector,
         |                 ^~~~~~~~~~~~
>> arch/x86/include/asm/uaccess.h:103:50: error: cannot take address of bit-field 'selector'
     103 |         instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
         |                                                  ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1065:17: note: in expansion of macro 'FPU_get_user'
    1065 |                 FPU_get_user(instruction_address.selector,
         |                 ^~~~~~~~~~~~
   arch/x86/include/asm/uaccess.h:109:49: error: cannot take address of bit-field 'selector'
     109 |         instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
         |                                                 ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1065:17: note: in expansion of macro 'FPU_get_user'
    1065 |                 FPU_get_user(instruction_address.selector,
         |                 ^~~~~~~~~~~~
>> arch/x86/include/asm/uaccess.h:103:50: error: cannot take address of bit-field 'opcode'
     103 |         instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
         |                                                  ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1067:17: note: in expansion of macro 'FPU_get_user'
    1067 |                 FPU_get_user(instruction_address.opcode,
         |                 ^~~~~~~~~~~~
   arch/x86/include/asm/uaccess.h:109:49: error: cannot take address of bit-field 'opcode'
     109 |         instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
         |                                                 ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1067:17: note: in expansion of macro 'FPU_get_user'
    1067 |                 FPU_get_user(instruction_address.opcode,
         |                 ^~~~~~~~~~~~
>> arch/x86/include/asm/uaccess.h:103:50: error: cannot take address of bit-field 'selector'
     103 |         instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
         |                                                  ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1071:17: note: in expansion of macro 'FPU_get_user'
    1071 |                 FPU_get_user(operand_address.selector,
         |                 ^~~~~~~~~~~~
   arch/x86/include/asm/uaccess.h:109:49: error: cannot take address of bit-field 'selector'
     109 |         instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
         |                                                 ^
   arch/x86/include/asm/uaccess.h:131:43: note: in expansion of macro 'do_get_user_call'
     131 | #define get_user(x,ptr) ({ might_fault(); do_get_user_call(get_user,x,ptr); })
         |                                           ^~~~~~~~~~~~~~~~
   arch/x86/math-emu/fpu_system.h:127:36: note: in expansion of macro 'get_user'
     127 | #define FPU_get_user(x,y) do { if (get_user((x),(y))) FPU_abort; } while (0)
         |                                    ^~~~~~~~
   arch/x86/math-emu/reg_ld_str.c:1071:17: note: in expansion of macro 'FPU_get_user'
    1071 |                 FPU_get_user(operand_address.selector,
         |                 ^~~~~~~~~~~~


vim +/selector +103 arch/x86/include/asm/uaccess.h

    66	
    67	/*
    68	 * This is the smallest unsigned integer type that can fit a value
    69	 * (up to 'long long')
    70	 */
    71	#define __inttype(x) __typeof__(		\
    72		__typefits(x,char,			\
    73		  __typefits(x,short,			\
    74		    __typefits(x,int,			\
    75		      __typefits(x,long,0ULL)))))
    76	
    77	#define __typefits(x,type,not) \
    78		__builtin_choose_expr(sizeof(x)<=sizeof(type),(unsigned type)0,not)
    79	
    80	/*
    81	 * This is used for both get_user() and __get_user() to expand to
    82	 * the proper special function call that has odd calling conventions
    83	 * due to returning both a value and an error, and that depends on
    84	 * the size of the pointer passed in.
    85	 *
    86	 * Careful: we have to cast the result to the type of the pointer
    87	 * for sign reasons.
    88	 *
    89	 * The use of _ASM_DX as the register specifier is a bit of a
    90	 * simplification, as gcc only cares about it as the starting point
    91	 * and not size: for a 64-bit value it will use %ecx:%edx on 32 bits
    92	 * (%ecx being the next register in gcc's x86 register sequence), and
    93	 * %rdx on 64 bits.
    94	 *
    95	 * Clang/LLVM cares about the size of the register, but still wants
    96	 * the base register for something that ends up being a pair.
    97	 */
    98	#define do_get_user_call(fn,x,ptr)					\
    99	({									\
   100		int __ret_gu;							\
   101		register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX);		\
   102		__chk_user_ptr(ptr);						\
 > 103		instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
   104		asm volatile("call __" #fn "_%P4"				\
   105			     : "=a" (__ret_gu), "=r" (__val_gu),		\
   106				ASM_CALL_CONSTRAINT				\
   107			     : "0" (ptr), "i" (sizeof(*(ptr))));		\
   108		(x) = (__force __typeof__(*(ptr))) __val_gu;			\
   109		instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
   110		__builtin_expect(__ret_gu, 0);					\
   111	})
   112
Arnd Bergmann April 27, 2022, 7:14 a.m. UTC | #3
On Tue, Apr 26, 2022 at 6:42 PM Alexander Potapenko <glider@google.com> wrote:
> @@ -99,11 +100,13 @@ extern int __get_user_bad(void);
>         int __ret_gu;                                                   \
>         register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX);            \
>         __chk_user_ptr(ptr);                                            \
> +       instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
>         asm volatile("call __" #fn "_%P4"                               \
>                      : "=a" (__ret_gu), "=r" (__val_gu),                \
>                         ASM_CALL_CONSTRAINT                             \
>                      : "0" (ptr), "i" (sizeof(*(ptr))));                \
>         (x) = (__force __typeof__(*(ptr))) __val_gu;                    \
> +       instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \

Isn't "ptr" the original pointer here? I think what happened with the
reported warning is that you get one output line for every instance this
is used in. There should probably be a

      __auto_type __ptr = (ptr);

at the beginning of the macro to ensure that 'ptr' is only evaluated once.

>>> arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@

It would also make sense to add the missing __user annotation in this line, but
I suspect there are others like it in drivers.

      Arnd
kernel test robot April 27, 2022, 2:24 p.m. UTC | #4
Hi Alexander,

I love your patch! Perhaps something to improve:

[auto build test WARNING on tip/x86/core]
[also build test WARNING on tip/x86/mm linus/master v5.18-rc4 next-20220427]
[cannot apply to hnaz-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 203d8919a9eda5d1bc68ac3cd7637588334c9dc1
config: i386-randconfig-s002-20220425 (https://download.01.org/0day-ci/archive/20220427/202204272235.9uw8ns1T-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/intel-lab-lkp/linux/commit/d216de19c8dd97fb6b0eac84fce4362489a61b2e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
        git checkout d216de19c8dd97fb6b0eac84fce4362489a61b2e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash arch/x86/kernel/ kernel/ mm/

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 >>)
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:360:9: sparse:     expected void const volatile [noderef] __user *ptr
   arch/x86/kernel/signal.c:360:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
>> arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:360:9: sparse:     expected void [noderef] __user *to
   arch/x86/kernel/signal.c:360:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:420:9: sparse:     expected void const volatile [noderef] __user *ptr
   arch/x86/kernel/signal.c:420:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:420:9: sparse:     expected void [noderef] __user *to
   arch/x86/kernel/signal.c:420:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:953:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct lockdep_map const *lock @@     got struct lockdep_map [noderef] __rcu * @@
   arch/x86/kernel/signal.c:953:9: sparse:     expected struct lockdep_map const *lock
   arch/x86/kernel/signal.c:953:9: sparse:     got struct lockdep_map [noderef] __rcu *
--
   kernel/signal.c: note: in included file (through arch/x86/include/uapi/asm/signal.h, arch/x86/include/asm/signal.h, include/uapi/linux/signal.h, ...):
   include/uapi/asm-generic/signal-defs.h:83:29: sparse: sparse: multiple address spaces given
   kernel/signal.c:195:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:195:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:195:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:198:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:198:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:198:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:480:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:480:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:480:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:484:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:484:34: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:484:34: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:517:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:517:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:517:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:520:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:520:36: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:520:36: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:542:53: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct k_sigaction *ka @@     got struct k_sigaction [noderef] __rcu * @@
   kernel/signal.c:542:53: sparse:     expected struct k_sigaction *ka
   kernel/signal.c:542:53: sparse:     got struct k_sigaction [noderef] __rcu *
   include/uapi/asm-generic/signal-defs.h:83:29: sparse: sparse: multiple address spaces given
   kernel/signal.c:698:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:698:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:698:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:700:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:700:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:700:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const volatile [noderef] __user *ptr
   kernel/signal.c:1263:29: sparse:     got unsigned char *
>> kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const [noderef] __user *from
   kernel/signal.c:1263:29: sparse:     got unsigned char *
>> kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const [noderef] __user *from
   kernel/signal.c:1263:29: sparse:     got unsigned char *
   kernel/signal.c:1330:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1330:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1330:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1331:16: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct k_sigaction *action @@     got struct k_sigaction [noderef] __rcu * @@
   kernel/signal.c:1331:16: sparse:     expected struct k_sigaction *action
   kernel/signal.c:1331:16: sparse:     got struct k_sigaction [noderef] __rcu *
   kernel/signal.c:1351:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1351:34: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1351:34: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1929:36: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1929:36: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1929:36: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2039:44: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2058:65: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *tsk @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2058:65: sparse:     expected struct task_struct *tsk
   kernel/signal.c:2058:65: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2059:40: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2077:14: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct sighand_struct *psig @@     got struct sighand_struct [noderef] __rcu *[noderef] __rcu sighand @@
   kernel/signal.c:2077:14: sparse:     expected struct sighand_struct *psig
   kernel/signal.c:2077:14: sparse:     got struct sighand_struct [noderef] __rcu *[noderef] __rcu sighand
   kernel/signal.c:2106:46: sparse: sparse: incorrect type in argument 3 (different address spaces) @@     expected struct task_struct *t @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2106:46: sparse:     expected struct task_struct *t
   kernel/signal.c:2106:46: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2107:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2107:34: sparse:     expected struct task_struct *parent
   kernel/signal.c:2107:34: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2136:24: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2136:24: sparse:     expected struct task_struct *parent
   kernel/signal.c:2136:24: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2139:24: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *real_parent @@
   kernel/signal.c:2139:24: sparse:     expected struct task_struct *parent
   kernel/signal.c:2139:24: sparse:     got struct task_struct [noderef] __rcu *real_parent
   kernel/signal.c:2172:17: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct sighand_struct *sighand @@     got struct sighand_struct [noderef] __rcu *sighand @@
   kernel/signal.c:2172:17: sparse:     expected struct sighand_struct *sighand
   kernel/signal.c:2172:17: sparse:     got struct sighand_struct [noderef] __rcu *sighand
   kernel/signal.c:2213:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2213:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2213:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2215:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2215:39: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2215:39: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2266:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2266:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2266:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2322:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2322:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2322:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2363:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2363:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2363:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2365:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2365:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2365:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2464:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2464:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2464:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2548:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2548:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2548:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2560:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2560:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2560:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2595:52: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *tsk @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2595:52: sparse:     expected struct task_struct *tsk
   kernel/signal.c:2595:52: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2597:49: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2635:49: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct sighand_struct *sighand @@     got struct sighand_struct [noderef] __rcu *sighand @@
   kernel/signal.c:2635:49: sparse:     expected struct sighand_struct *sighand
   kernel/signal.c:2635:49: sparse:     got struct sighand_struct [noderef] __rcu *sighand
   kernel/signal.c:2964:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2964:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2964:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2984:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2984:29: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2984:29: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3051:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3051:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3051:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3053:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3053:29: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3053:29: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3204:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3204:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3204:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3207:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3207:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3207:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3594:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3594:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3594:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3606:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3606:37: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3606:37: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3611:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3611:35: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3611:35: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3616:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3616:29: sparse:     expected struct spinlock [usertype] *lock

vim +360 arch/x86/kernel/signal.c

75779f05264b996 arch/x86/kernel/signal.c    Hiroshi Shimamoto 2009-02-27  325  
7e907f48980d666 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  326  static int
235b80226b986da arch/x86/kernel/signal.c    Al Viro           2012-11-09  327  __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
7e907f48980d666 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  328  	      struct pt_regs *regs)
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  329  {
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  330  	struct sigframe __user *frame;
7e907f48980d666 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  331  	void __user *restorer;
b00d8f8f0b2b392 arch/x86/kernel/signal.c    Al Viro           2020-02-15  332  	void __user *fp = NULL;
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  333  
b00d8f8f0b2b392 arch/x86/kernel/signal.c    Al Viro           2020-02-15  334  	frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fp);
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  335  
5c1f178094631e8 arch/x86/kernel/signal.c    Al Viro           2020-02-15  336  	if (!user_access_begin(frame, sizeof(*frame)))
3d0aedd9538e6be arch/x86/kernel/signal_32.c Hiroshi Shimamoto 2008-09-12  337  		return -EFAULT;
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  338  
5c1f178094631e8 arch/x86/kernel/signal.c    Al Viro           2020-02-15  339  	unsafe_put_user(sig, &frame->sig, Efault);
b00d8f8f0b2b392 arch/x86/kernel/signal.c    Al Viro           2020-02-15  340  	unsafe_put_sigcontext(&frame->sc, fp, regs, set, Efault);
5c1f178094631e8 arch/x86/kernel/signal.c    Al Viro           2020-02-15  341  	unsafe_put_user(set->sig[1], &frame->extramask[0], Efault);
1a3e4ca41c5a389 arch/x86/kernel/signal_32.c Roland McGrath    2008-04-09  342  	if (current->mm->context.vdso)
6f121e548f83674 arch/x86/kernel/signal.c    Andy Lutomirski   2014-05-05  343  		restorer = current->mm->context.vdso +
0a6d1fa0d2b48fb arch/x86/kernel/signal.c    Andy Lutomirski   2015-10-05  344  			vdso_image_32.sym___kernel_sigreturn;
9fbbd4dd17d0712 arch/i386/kernel/signal.c   Andi Kleen        2007-02-13  345  	else
ade1af77129dea6 arch/x86/kernel/signal_32.c Jan Engelhardt    2008-01-30  346  		restorer = &frame->retcode;
235b80226b986da arch/x86/kernel/signal.c    Al Viro           2012-11-09  347  	if (ksig->ka.sa.sa_flags & SA_RESTORER)
235b80226b986da arch/x86/kernel/signal.c    Al Viro           2012-11-09  348  		restorer = ksig->ka.sa.sa_restorer;
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  349  
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  350  	/* Set up to return from userspace.  */
5c1f178094631e8 arch/x86/kernel/signal.c    Al Viro           2020-02-15  351  	unsafe_put_user(restorer, &frame->pretcode, Efault);
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  352  
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  353  	/*
7e907f48980d666 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  354  	 * This is popl %eax ; movl $__NR_sigreturn, %eax ; int $0x80
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  355  	 *
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  356  	 * WE DO NOT USE IT ANY MORE! It's only left here for historical
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  357  	 * reasons and because gdb uses it as a signature to notice
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  358  	 * signal handler stack frames.
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  359  	 */
5c1f178094631e8 arch/x86/kernel/signal.c    Al Viro           2020-02-15 @360  	unsafe_put_user(*((u64 *)&retcode), (u64 *)frame->retcode, Efault);
5c1f178094631e8 arch/x86/kernel/signal.c    Al Viro           2020-02-15  361  	user_access_end();
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  362  
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  363  	/* Set up registers for signal handler */
65ea5b034990358 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  364  	regs->sp = (unsigned long)frame;
235b80226b986da arch/x86/kernel/signal.c    Al Viro           2012-11-09  365  	regs->ip = (unsigned long)ksig->ka.sa.sa_handler;
65ea5b034990358 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  366  	regs->ax = (unsigned long)sig;
92bc2056855b325 arch/x86/kernel/signal_32.c Harvey Harrison   2008-02-08  367  	regs->dx = 0;
92bc2056855b325 arch/x86/kernel/signal_32.c Harvey Harrison   2008-02-08  368  	regs->cx = 0;
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  369  
65ea5b034990358 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  370  	regs->ds = __USER_DS;
65ea5b034990358 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  371  	regs->es = __USER_DS;
65ea5b034990358 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  372  	regs->ss = __USER_DS;
65ea5b034990358 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  373  	regs->cs = __USER_CS;
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  374  
283828f3c19ceb3 arch/i386/kernel/signal.c   David Howells     2006-01-18  375  	return 0;
b00d8f8f0b2b392 arch/x86/kernel/signal.c    Al Viro           2020-02-15  376  
b00d8f8f0b2b392 arch/x86/kernel/signal.c    Al Viro           2020-02-15  377  Efault:
b00d8f8f0b2b392 arch/x86/kernel/signal.c    Al Viro           2020-02-15  378  	user_access_end();
b00d8f8f0b2b392 arch/x86/kernel/signal.c    Al Viro           2020-02-15  379  	return -EFAULT;
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  380  }
^1da177e4c3f415 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  381
kernel test robot April 28, 2022, 1:59 a.m. UTC | #5
Hi Alexander,

I love your patch! Perhaps something to improve:

[auto build test WARNING on tip/x86/core]
[also build test WARNING on tip/x86/mm linus/master v5.18-rc4 next-20220427]
[cannot apply to hnaz-mm/master]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
base:   https://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git 203d8919a9eda5d1bc68ac3cd7637588334c9dc1
config: i386-randconfig-s002-20220425 (https://download.01.org/0day-ci/archive/20220428/202204280353.PSo7gLJl-lkp@intel.com/config)
compiler: gcc-11 (Debian 11.2.0-20) 11.2.0
reproduce:
        # apt-get install sparse
        # sparse version: v0.6.4-dirty
        # https://github.com/intel-lab-lkp/linux/commit/d216de19c8dd97fb6b0eac84fce4362489a61b2e
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
        git checkout d216de19c8dd97fb6b0eac84fce4362489a61b2e
        # save the config file
        mkdir build_dir && cp config build_dir/.config
        make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' O=build_dir ARCH=i386 SHELL=/bin/bash arch/x86/kernel/ kernel/ mm/

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 >>)
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:360:9: sparse:     expected void const volatile [noderef] __user *ptr
   arch/x86/kernel/signal.c:360:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
>> arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:360:9: sparse:     expected void [noderef] __user *to
   arch/x86/kernel/signal.c:360:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:360:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:420:9: sparse:     expected void const volatile [noderef] __user *ptr
   arch/x86/kernel/signal.c:420:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@
   arch/x86/kernel/signal.c:420:9: sparse:     expected void [noderef] __user *to
   arch/x86/kernel/signal.c:420:9: sparse:     got unsigned long long [usertype] *
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:420:9: sparse: sparse: cast removes address space '__user' of expression
   arch/x86/kernel/signal.c:953:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct lockdep_map const *lock @@     got struct lockdep_map [noderef] __rcu * @@
   arch/x86/kernel/signal.c:953:9: sparse:     expected struct lockdep_map const *lock
   arch/x86/kernel/signal.c:953:9: sparse:     got struct lockdep_map [noderef] __rcu *
--
   kernel/signal.c: note: in included file (through arch/x86/include/uapi/asm/signal.h, arch/x86/include/asm/signal.h, include/uapi/linux/signal.h, ...):
   include/uapi/asm-generic/signal-defs.h:83:29: sparse: sparse: multiple address spaces given
   kernel/signal.c:195:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:195:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:195:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:198:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:198:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:198:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:480:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:480:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:480:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:484:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:484:34: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:484:34: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:517:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:517:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:517:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:520:36: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:520:36: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:520:36: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:542:53: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct k_sigaction *ka @@     got struct k_sigaction [noderef] __rcu * @@
   kernel/signal.c:542:53: sparse:     expected struct k_sigaction *ka
   kernel/signal.c:542:53: sparse:     got struct k_sigaction [noderef] __rcu *
   include/uapi/asm-generic/signal-defs.h:83:29: sparse: sparse: multiple address spaces given
   kernel/signal.c:698:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:698:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:698:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:700:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:700:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:700:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void const volatile [noderef] __user *ptr @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const volatile [noderef] __user *ptr
   kernel/signal.c:1263:29: sparse:     got unsigned char *
>> kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const [noderef] __user *from
   kernel/signal.c:1263:29: sparse:     got unsigned char *
>> kernel/signal.c:1263:29: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected void const [noderef] __user *from @@     got unsigned char * @@
   kernel/signal.c:1263:29: sparse:     expected void const [noderef] __user *from
   kernel/signal.c:1263:29: sparse:     got unsigned char *
   kernel/signal.c:1330:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1330:9: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1330:9: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1331:16: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct k_sigaction *action @@     got struct k_sigaction [noderef] __rcu * @@
   kernel/signal.c:1331:16: sparse:     expected struct k_sigaction *action
   kernel/signal.c:1331:16: sparse:     got struct k_sigaction [noderef] __rcu *
   kernel/signal.c:1351:34: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1351:34: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1351:34: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:1929:36: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:1929:36: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:1929:36: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2039:44: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2058:65: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *tsk @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2058:65: sparse:     expected struct task_struct *tsk
   kernel/signal.c:2058:65: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2059:40: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2077:14: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct sighand_struct *psig @@     got struct sighand_struct [noderef] __rcu *[noderef] __rcu sighand @@
   kernel/signal.c:2077:14: sparse:     expected struct sighand_struct *psig
   kernel/signal.c:2077:14: sparse:     got struct sighand_struct [noderef] __rcu *[noderef] __rcu sighand
   kernel/signal.c:2106:46: sparse: sparse: incorrect type in argument 3 (different address spaces) @@     expected struct task_struct *t @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2106:46: sparse:     expected struct task_struct *t
   kernel/signal.c:2106:46: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2107:34: sparse: sparse: incorrect type in argument 2 (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2107:34: sparse:     expected struct task_struct *parent
   kernel/signal.c:2107:34: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2136:24: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2136:24: sparse:     expected struct task_struct *parent
   kernel/signal.c:2136:24: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2139:24: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct task_struct *parent @@     got struct task_struct [noderef] __rcu *real_parent @@
   kernel/signal.c:2139:24: sparse:     expected struct task_struct *parent
   kernel/signal.c:2139:24: sparse:     got struct task_struct [noderef] __rcu *real_parent
   kernel/signal.c:2172:17: sparse: sparse: incorrect type in assignment (different address spaces) @@     expected struct sighand_struct *sighand @@     got struct sighand_struct [noderef] __rcu *sighand @@
   kernel/signal.c:2172:17: sparse:     expected struct sighand_struct *sighand
   kernel/signal.c:2172:17: sparse:     got struct sighand_struct [noderef] __rcu *sighand
   kernel/signal.c:2213:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2213:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2213:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2215:39: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2215:39: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2215:39: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2266:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2266:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2266:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2322:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2322:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2322:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2363:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2363:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2363:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2365:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2365:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2365:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2464:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2464:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2464:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2548:41: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2548:41: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2548:41: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2560:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2560:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2560:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2595:52: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct task_struct *tsk @@     got struct task_struct [noderef] __rcu *parent @@
   kernel/signal.c:2595:52: sparse:     expected struct task_struct *tsk
   kernel/signal.c:2595:52: sparse:     got struct task_struct [noderef] __rcu *parent
   kernel/signal.c:2597:49: sparse: sparse: cast removes address space '__rcu' of expression
   kernel/signal.c:2635:49: sparse: sparse: incorrect type in initializer (different address spaces) @@     expected struct sighand_struct *sighand @@     got struct sighand_struct [noderef] __rcu *sighand @@
   kernel/signal.c:2635:49: sparse:     expected struct sighand_struct *sighand
   kernel/signal.c:2635:49: sparse:     got struct sighand_struct [noderef] __rcu *sighand
   kernel/signal.c:2964:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2964:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2964:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:2984:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:2984:29: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:2984:29: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3051:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3051:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3051:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3053:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3053:29: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3053:29: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3204:31: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3204:31: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3204:31: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3207:33: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3207:33: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3207:33: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3594:27: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3594:27: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3594:27: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3606:37: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3606:37: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3606:37: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3611:35: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3611:35: sparse:     expected struct spinlock [usertype] *lock
   kernel/signal.c:3611:35: sparse:     got struct spinlock [noderef] __rcu *
   kernel/signal.c:3616:29: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected struct spinlock [usertype] *lock @@     got struct spinlock [noderef] __rcu * @@
   kernel/signal.c:3616:29: sparse:     expected struct spinlock [usertype] *lock

vim +360 arch/x86/kernel/signal.c

75779f05264b99 arch/x86/kernel/signal.c    Hiroshi Shimamoto 2009-02-27  325  
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  326  static int
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  327  __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  328  	      struct pt_regs *regs)
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  329  {
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  330  	struct sigframe __user *frame;
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  331  	void __user *restorer;
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  332  	void __user *fp = NULL;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  333  
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  334  	frame = get_sigframe(&ksig->ka, regs, sizeof(*frame), &fp);
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  335  
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  336  	if (!user_access_begin(frame, sizeof(*frame)))
3d0aedd9538e6b arch/x86/kernel/signal_32.c Hiroshi Shimamoto 2008-09-12  337  		return -EFAULT;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  338  
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  339  	unsafe_put_user(sig, &frame->sig, Efault);
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  340  	unsafe_put_sigcontext(&frame->sc, fp, regs, set, Efault);
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  341  	unsafe_put_user(set->sig[1], &frame->extramask[0], Efault);
1a3e4ca41c5a38 arch/x86/kernel/signal_32.c Roland McGrath    2008-04-09  342  	if (current->mm->context.vdso)
6f121e548f8367 arch/x86/kernel/signal.c    Andy Lutomirski   2014-05-05  343  		restorer = current->mm->context.vdso +
0a6d1fa0d2b48f arch/x86/kernel/signal.c    Andy Lutomirski   2015-10-05  344  			vdso_image_32.sym___kernel_sigreturn;
9fbbd4dd17d071 arch/i386/kernel/signal.c   Andi Kleen        2007-02-13  345  	else
ade1af77129dea arch/x86/kernel/signal_32.c Jan Engelhardt    2008-01-30  346  		restorer = &frame->retcode;
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  347  	if (ksig->ka.sa.sa_flags & SA_RESTORER)
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  348  		restorer = ksig->ka.sa.sa_restorer;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  349  
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  350  	/* Set up to return from userspace.  */
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  351  	unsafe_put_user(restorer, &frame->pretcode, Efault);
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  352  
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  353  	/*
7e907f48980d66 arch/x86/kernel/signal_32.c Ingo Molnar       2008-03-06  354  	 * This is popl %eax ; movl $__NR_sigreturn, %eax ; int $0x80
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  355  	 *
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  356  	 * WE DO NOT USE IT ANY MORE! It's only left here for historical
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  357  	 * reasons and because gdb uses it as a signature to notice
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  358  	 * signal handler stack frames.
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  359  	 */
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15 @360  	unsafe_put_user(*((u64 *)&retcode), (u64 *)frame->retcode, Efault);
5c1f178094631e arch/x86/kernel/signal.c    Al Viro           2020-02-15  361  	user_access_end();
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  362  
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  363  	/* Set up registers for signal handler */
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  364  	regs->sp = (unsigned long)frame;
235b80226b986d arch/x86/kernel/signal.c    Al Viro           2012-11-09  365  	regs->ip = (unsigned long)ksig->ka.sa.sa_handler;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  366  	regs->ax = (unsigned long)sig;
92bc2056855b32 arch/x86/kernel/signal_32.c Harvey Harrison   2008-02-08  367  	regs->dx = 0;
92bc2056855b32 arch/x86/kernel/signal_32.c Harvey Harrison   2008-02-08  368  	regs->cx = 0;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  369  
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  370  	regs->ds = __USER_DS;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  371  	regs->es = __USER_DS;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  372  	regs->ss = __USER_DS;
65ea5b03499035 arch/x86/kernel/signal_32.c H. Peter Anvin    2008-01-30  373  	regs->cs = __USER_CS;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  374  
283828f3c19ceb arch/i386/kernel/signal.c   David Howells     2006-01-18  375  	return 0;
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  376  
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  377  Efault:
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  378  	user_access_end();
b00d8f8f0b2b39 arch/x86/kernel/signal.c    Al Viro           2020-02-15  379  	return -EFAULT;
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  380  }
^1da177e4c3f41 arch/i386/kernel/signal.c   Linus Torvalds    2005-04-16  381
kernel test robot April 30, 2022, 10:16 a.m. UTC | #6
Greeting,

FYI, we noticed the following commit (built with gcc-11):

commit: d216de19c8dd97fb6b0eac84fce4362489a61b2e ("[PATCH v3 05/46] x86: asm: instrument usercopy in get_user() and __put_user_size()")
url: https://github.com/intel-lab-lkp/linux/commits/Alexander-Potapenko/Add-KernelMemorySanitizer-infrastructure/20220427-004851
base: https://git.kernel.org/cgit/linux/kernel/git/tip/tip.git 203d8919a9eda5d1bc68ac3cd7637588334c9dc1
patch link: https://lore.kernel.org/linux-mm/20220426164315.625149-6-glider@google.com

in testcase: kernel-selftests
version: kernel-selftests-x86_64-f6559bea-1_20220425
with following parameters:

	group: x86
	ucode: 0xec

test-description: The kernel contains a set of "self tests" under the tools/testing/selftests/ directory. These are intended to be small unit tests to exercise individual code paths in the kernel.
test-url: https://www.kernel.org/doc/Documentation/kselftest.txt


on test machine: 8 threads 1 sockets Intel(R) Core(TM) i7-7700 CPU @ 3.60GHz with 32G memory

caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):



If you fix the issue, kindly add following tag
Reported-by: kernel test robot <oliver.sang@intel.com>


actually we also observed other tests failed on this commit but pass on parent:

c30e163fc48e6944 d216de19c8dd97fb6b0eac84fce
---------------- ---------------------------
       fail:runs  %reproduction    fail:runs
           |             |             |
           :6          100%           6:6     kmsg.segfault_at_ip_sp_error
           :6          100%           6:6     kernel-selftests.x86.fsgsbase_restore_32.fail
           :6          100%           6:6     kernel-selftests.x86.fsgsbase_restore_64.fail
           :6          100%           6:6     kernel-selftests.x86.ioperm_32.fail
           :6          100%           6:6     kernel-selftests.x86.iopl_32.fail
           :6          100%           6:6     kernel-selftests.x86.ptrace_syscall_32.fail
           :6          100%           6:6     kernel-selftests.x86.ptrace_syscall_64.fail
           :6          100%           6:6     kernel-selftests.x86.syscall_numbering_64.fail



# selftests: x86: iopl_32
# iopl_32: sched_setaffinity to CPU 0: Invalid argument
not ok 7 selftests: x86: iopl_32 # exit=1
# selftests: x86: ioperm_32
# ioperm_32: sched_setaffinity to CPU 0: Invalid argument
not ok 8 selftests: x86: ioperm_32 # exit=1

....

# selftests: x86: fsgsbase_restore_32
# fsgsbase_restore_32: PTRACE_GETREGS: Input/output error
# 	Setting up a segment
# 	segment base address = 0xf7fb4000
# 	using LDT slot 0
# [OK]	The segment points to the right place.
# 	Child FS=0x7
# 	Tracer: redirecting tracee to tracee_zap_segment()
not ok 12 selftests: x86: fsgsbase_restore_32 # exit=1

....

# selftests: x86: ptrace_syscall_32
# ptrace_syscall_32: PTRACE_SETREGS: Input/output error
# [RUN]	Check int80 return regs
# [OK]	getpid() preserves regs
# [OK]	kill(getpid(), SIGUSR1) preserves regs
# [RUN]	Check AT_SYSINFO return regs
# [OK]	getpid() preserves regs
# [OK]	kill(getpid(), SIGUSR1) preserves regs
# [RUN]	ptrace-induced syscall restart
# [RUN]	SYSEMU
# [OK]	Initial nr and args are correct
# [RUN]	Restart the syscall (ip = 0xf7edb549)
not ok 22 selftests: x86: ptrace_syscall_32 # exit=1

....

# selftests: x86: fsgsbase_restore_64
# fsgsbase_restore_64: PTRACE_GETREGS: Input/output error
# 	Setting up a segment
# 	segment base address = 0x4075c000
# 	using LDT slot 0
# [OK]	The segment points to the right place.
# 	Child GS=0x7, GSBASE=0x4075c000
# 	Tracer: redirecting tracee to tracee_zap_segment()
not ok 34 selftests: x86: fsgsbase_restore_64 # exit=1

....

# selftests: x86: syscall_numbering_64
# [RUN]   Checking for x32 by calling x32 getpid()
# [INFO]      x32 is not supported
# [RUN]   Running tests without ptrace...
# [RUN]       Checking system calls with msb = 0 (0x0)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 0:0 returned 0 as expected
# [OK]                x64 syscall 0:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 0:19 returned 0 as expected
# [OK]                x64 syscall 0:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 0:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 0:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 0:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 0:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 0:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 0:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1 (0x1)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1:0 returned 0 as expected
# [OK]                x64 syscall 1:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1:19 returned 0 as expected
# [OK]                x64 syscall 1:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -1 (0xffffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -1:0 returned 0 as expected
# [OK]                x64 syscall -1:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -1:19 returned 0 as expected
# [OK]                x64 syscall -1:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -1:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -1:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -1:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -1:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -1:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -1:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741823 (0x3fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741823:0 returned 0 as expected
# [OK]                x64 syscall 1073741823:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741823:19 returned 0 as expected
# [OK]                x64 syscall 1073741823:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741823:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741823:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741823:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741823:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741824 (0x40000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741824:0 returned 0 as expected
# [OK]                x64 syscall 1073741824:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741824:19 returned 0 as expected
# [OK]                x64 syscall 1073741824:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741824:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741824:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741824:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741824:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741824:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741824:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741823 (0x3fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741823:0 returned 0 as expected
# [OK]                x64 syscall 1073741823:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741823:19 returned 0 as expected
# [OK]                x64 syscall 1073741823:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741823:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741823:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741823:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741823:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -1073741824 (0xc0000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -1073741824:0 returned 0 as expected
# [OK]                x64 syscall -1073741824:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -1073741824:19 returned 0 as expected
# [OK]                x64 syscall -1073741824:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -1073741824:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -1073741824:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -1073741824:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -1073741824:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -1073741824:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -1073741824:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 2147483647 (0x7fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 2147483647:0 returned 0 as expected
# [OK]                x64 syscall 2147483647:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 2147483647:19 returned 0 as expected
# [OK]                x64 syscall 2147483647:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 2147483647:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 2147483647:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 2147483647:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 2147483647:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 2147483647:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 2147483647:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -2147483648 (0x80000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -2147483648:0 returned 0 as expected
# [OK]                x64 syscall -2147483648:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -2147483648:19 returned 0 as expected
# [OK]                x64 syscall -2147483648:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -2147483648:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -2147483648:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483648:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483648:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -2147483648:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -2147483648:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -2147483647 (0x80000001)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -2147483647:0 returned 0 as expected
# [OK]                x64 syscall -2147483647:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -2147483647:19 returned 0 as expected
# [OK]                x64 syscall -2147483647:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -2147483647:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -2147483647:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483647:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483647:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -2147483647:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -2147483647:0..999 returned -ENOSYS as expected
# [RUN]   Running tests under ptrace: just stop, no data read
# [RUN]       Checking system calls with msb = 0 (0x0)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 0:0 returned 0 as expected
# [OK]                x64 syscall 0:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 0:19 returned 0 as expected
# [OK]                x64 syscall 0:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 0:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 0:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 0:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 0:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 0:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 0:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1 (0x1)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1:0 returned 0 as expected
# [OK]                x64 syscall 1:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1:19 returned 0 as expected
# [OK]                x64 syscall 1:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -1 (0xffffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -1:0 returned 0 as expected
# [OK]                x64 syscall -1:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -1:19 returned 0 as expected
# [OK]                x64 syscall -1:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -1:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -1:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -1:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -1:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -1:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -1:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741823 (0x3fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741823:0 returned 0 as expected
# [OK]                x64 syscall 1073741823:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741823:19 returned 0 as expected
# [OK]                x64 syscall 1073741823:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741823:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741823:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741823:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741823:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741824 (0x40000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741824:0 returned 0 as expected
# [OK]                x64 syscall 1073741824:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741824:19 returned 0 as expected
# [OK]                x64 syscall 1073741824:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741824:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741824:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741824:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741824:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741824:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741824:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741823 (0x3fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741823:0 returned 0 as expected
# [OK]                x64 syscall 1073741823:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741823:19 returned 0 as expected
# [OK]                x64 syscall 1073741823:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741823:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741823:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741823:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741823:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -1073741824 (0xc0000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -1073741824:0 returned 0 as expected
# [OK]                x64 syscall -1073741824:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -1073741824:19 returned 0 as expected
# [OK]                x64 syscall -1073741824:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -1073741824:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -1073741824:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -1073741824:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -1073741824:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -1073741824:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -1073741824:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 2147483647 (0x7fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 2147483647:0 returned 0 as expected
# [OK]                x64 syscall 2147483647:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 2147483647:19 returned 0 as expected
# [OK]                x64 syscall 2147483647:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 2147483647:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 2147483647:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 2147483647:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 2147483647:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 2147483647:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 2147483647:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -2147483648 (0x80000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -2147483648:0 returned 0 as expected
# [OK]                x64 syscall -2147483648:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -2147483648:19 returned 0 as expected
# [OK]                x64 syscall -2147483648:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -2147483648:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -2147483648:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483648:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483648:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -2147483648:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -2147483648:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -2147483647 (0x80000001)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -2147483647:0 returned 0 as expected
# [OK]                x64 syscall -2147483647:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -2147483647:19 returned 0 as expected
# [OK]                x64 syscall -2147483647:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -2147483647:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -2147483647:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483647:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483647:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -2147483647:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -2147483647:0..999 returned -ENOSYS as expected
# [RUN]   Running tests under ptrace: only getregs
# [RUN]       Checking system calls with msb = 0 (0x0)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 0:0 returned 0 as expected
# [OK]                x64 syscall 0:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 0:19 returned 0 as expected
# [OK]                x64 syscall 0:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 0:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 0:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 0:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 0:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 0:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 0:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1 (0x1)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1:0 returned 0 as expected
# [OK]                x64 syscall 1:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1:19 returned 0 as expected
# [OK]                x64 syscall 1:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -1 (0xffffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -1:0 returned 0 as expected
# [OK]                x64 syscall -1:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -1:19 returned 0 as expected
# [OK]                x64 syscall -1:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -1:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -1:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -1:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -1:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -1:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -1:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741823 (0x3fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741823:0 returned 0 as expected
# [OK]                x64 syscall 1073741823:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741823:19 returned 0 as expected
# [OK]                x64 syscall 1073741823:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741823:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741823:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741823:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741823:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741824 (0x40000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741824:0 returned 0 as expected
# [OK]                x64 syscall 1073741824:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741824:19 returned 0 as expected
# [OK]                x64 syscall 1073741824:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741824:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741824:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741824:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741824:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741824:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741824:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 1073741823 (0x3fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 1073741823:0 returned 0 as expected
# [OK]                x64 syscall 1073741823:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 1073741823:19 returned 0 as expected
# [OK]                x64 syscall 1073741823:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 1073741823:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 1073741823:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 1073741823:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 1073741823:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 1073741823:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -1073741824 (0xc0000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -1073741824:0 returned 0 as expected
# [OK]                x64 syscall -1073741824:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -1073741824:19 returned 0 as expected
# [OK]                x64 syscall -1073741824:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -1073741824:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -1073741824:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -1073741824:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -1073741824:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -1073741824:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -1073741824:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = 2147483647 (0x7fffffff)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall 2147483647:0 returned 0 as expected
# [OK]                x64 syscall 2147483647:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall 2147483647:19 returned 0 as expected
# [OK]                x64 syscall 2147483647:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls 2147483647:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall 2147483647:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls 2147483647:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls 2147483647:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls 2147483647:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls 2147483647:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -2147483648 (0x80000000)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -2147483648:0 returned 0 as expected
# [OK]                x64 syscall -2147483648:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -2147483648:19 returned 0 as expected
# [OK]                x64 syscall -2147483648:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -2147483648:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -2147483648:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483648:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483648:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -2147483648:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -2147483648:0..999 returned -ENOSYS as expected
# [RUN]       Checking system calls with msb = -2147483647 (0x80000001)
# [RUN]           Checking some common syscalls as 64 bit
# [OK]                x64 syscall -2147483647:0 returned 0 as expected
# [OK]                x64 syscall -2147483647:1 returned 0 as expected
# [RUN]           Checking some 64-bit only syscalls as 64 bit
# [OK]                x64 syscall -2147483647:19 returned 0 as expected
# [OK]                x64 syscall -2147483647:20 returned 0 as expected
# [RUN]           Checking out of range system calls
# [OK]                x32 syscalls -2147483647:-64..-2 returned -ENOSYS as expected
# [OK]                x32 syscall -2147483647:-1 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483647:1073741760..1073741823 returned -ENOSYS as expected
# [OK]                x64 syscalls -2147483647:-64..-1 returned -ENOSYS as expected
# [OK]                x32 syscalls -2147483647:1073741759..1073741822 returned -ENOSYS as expected
# [RUN]           Checking for absence of x32 system calls
# [OK]                x32 syscalls -2147483647:0..999 returned -ENOSYS as expected
# [RUN]   Running tests under ptrace: getregs, unmodified setregs
# [RUN]       Checking system calls with msb = 0 (0x0)
# [RUN]           Checking some common syscalls as 64 bit
#
not ok 38 selftests: x86: syscall_numbering_64 # TIMEOUT 300 seconds

....

# selftests: x86: ptrace_syscall_64
# ptrace_syscall_64: PTRACE_SETREGS: Input/output error
# [RUN]	Check int80 return regs
# [OK]	getpid() preserves regs
# [OK]	kill(getpid(), SIGUSR1) preserves regs
# [RUN]	ptrace-induced syscall restart
# [RUN]	SYSEMU
# [OK]	Initial nr and args are correct
# [RUN]	Restart the syscall (ip = 0x7f424c815989)
not ok 42 selftests: x86: ptrace_syscall_64 # exit=1



To reproduce:

        git clone https://github.com/intel/lkp-tests.git
        cd lkp-tests
        sudo bin/lkp install job.yaml           # job file is attached in this email
        bin/lkp split-job --compatible job.yaml # generate the yaml file for lkp run
        sudo bin/lkp run generated-yaml-file

        # if come across any failure that blocks the test,
        # please remove ~/.lkp and /lkp dir to run from a clean state.
Alexander Potapenko June 2, 2022, 11:20 a.m. UTC | #7
On Wed, Apr 27, 2022 at 9:15 AM Arnd Bergmann <arnd@arndb.de> wrote:
>
> On Tue, Apr 26, 2022 at 6:42 PM Alexander Potapenko <glider@google.com> wrote:
> > @@ -99,11 +100,13 @@ extern int __get_user_bad(void);
> >         int __ret_gu;                                                   \
> >         register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX);            \
> >         __chk_user_ptr(ptr);                                            \
> > +       instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
> >         asm volatile("call __" #fn "_%P4"                               \
> >                      : "=a" (__ret_gu), "=r" (__val_gu),                \
> >                         ASM_CALL_CONSTRAINT                             \
> >                      : "0" (ptr), "i" (sizeof(*(ptr))));                \
> >         (x) = (__force __typeof__(*(ptr))) __val_gu;                    \
> > +       instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
>
> Isn't "ptr" the original pointer here? I think what happened with the
> reported warning is that you get one output line for every instance this
> is used in. There should probably be a
>
>       __auto_type __ptr = (ptr);
>
> at the beginning of the macro to ensure that 'ptr' is only evaluated once.
>
> >>> arch/x86/kernel/signal.c:360:9: sparse: sparse: incorrect type in argument 1 (different address spaces) @@     expected void [noderef] __user *to @@     got unsigned long long [usertype] * @@
>
> It would also make sense to add the missing __user annotation in this line, but
> I suspect there are others like it in drivers.
>
>       Arnd

I ran sparse locally, and it is actually the missing __user
annotations in signal.c that cause these reports.

The following patch:

diff --git a/arch/x86/kernel/signal.c b/arch/x86/kernel/signal.c
index e439eb14325fa..68537dbffa545 100644
--- a/arch/x86/kernel/signal.c
+++ b/arch/x86/kernel/signal.c
@@ -355,7 +355,7 @@ __setup_frame(int sig, struct ksignal *ksig, sigset_t *set,
         * reasons and because gdb uses it as a signature to notice
         * signal handler stack frames.
         */
-       unsafe_put_user(*((u64 *)&retcode), (u64 *)frame->retcode, Efault);
+       unsafe_put_user(*((u64 *)&retcode), (__user u64
*)frame->retcode, Efault);
        user_access_end();

        /* Set up registers for signal handler */
@@ -415,7 +415,7 @@ static int __setup_rt_frame(int sig, struct ksignal *ksig,
         * reasons and because gdb uses it as a signature to notice
         * signal handler stack frames.
         */
-       unsafe_put_user(*((u64 *)&rt_retcode), (u64 *)frame->retcode, Efault);
+       unsafe_put_user(*((u64 *)&rt_retcode), (__user u64
*)frame->retcode, Efault);
        unsafe_put_sigcontext(&frame->uc.uc_mcontext, fp, regs, set, Efault);
        unsafe_put_sigmask(set, frame, Efault);
        user_access_end();

appears to fix sparse warnings.
diff mbox series

Patch

diff --git a/arch/x86/include/asm/uaccess.h b/arch/x86/include/asm/uaccess.h
index f78e2b3501a19..0373d52a0543e 100644
--- a/arch/x86/include/asm/uaccess.h
+++ b/arch/x86/include/asm/uaccess.h
@@ -5,6 +5,7 @@ 
  * User space memory access functions
  */
 #include <linux/compiler.h>
+#include <linux/instrumented.h>
 #include <linux/kasan-checks.h>
 #include <linux/string.h>
 #include <asm/asm.h>
@@ -99,11 +100,13 @@  extern int __get_user_bad(void);
 	int __ret_gu;							\
 	register __inttype(*(ptr)) __val_gu asm("%"_ASM_DX);		\
 	__chk_user_ptr(ptr);						\
+	instrument_copy_from_user_before((void *)&(x), ptr, sizeof(*(ptr))); \
 	asm volatile("call __" #fn "_%P4"				\
 		     : "=a" (__ret_gu), "=r" (__val_gu),		\
 			ASM_CALL_CONSTRAINT				\
 		     : "0" (ptr), "i" (sizeof(*(ptr))));		\
 	(x) = (__force __typeof__(*(ptr))) __val_gu;			\
+	instrument_copy_from_user_after((void *)&(x), ptr, sizeof(*(ptr)), 0); \
 	__builtin_expect(__ret_gu, 0);					\
 })
 
@@ -248,7 +251,9 @@  extern void __put_user_nocheck_8(void);
 
 #define __put_user_size(x, ptr, size, label)				\
 do {									\
+	__typeof__(*(ptr)) __pus_val = x;				\
 	__chk_user_ptr(ptr);						\
+	instrument_copy_to_user(ptr, &(__pus_val), size);		\
 	switch (size) {							\
 	case 1:								\
 		__put_user_goto(x, ptr, "b", "iq", label);		\
@@ -286,6 +291,7 @@  do {									\
 #define __get_user_size(x, ptr, size, label)				\
 do {									\
 	__chk_user_ptr(ptr);						\
+	instrument_copy_from_user_before((void *)&(x), ptr, size);	\
 	switch (size) {							\
 	case 1:	{							\
 		unsigned char x_u8__;					\
@@ -305,6 +311,7 @@  do {									\
 	default:							\
 		(x) = __get_user_bad();					\
 	}								\
+	instrument_copy_from_user_after((void *)&(x), ptr, size, 0);	\
 } while (0)
 
 #define __get_user_asm(x, addr, itype, ltype, label)			\