Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[S390] sparse: fix sparse warnings with __user pointers

Use __force to quiet sparse warnings about user address space.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>

+18 -14
+12 -11
arch/s390/kernel/compat_signal.c
··· 141 141 break; 142 142 case __SI_FAULT >> 16: 143 143 err |= __get_user(tmp, &from->si_addr); 144 - to->si_addr = (void __user *)(u64) (tmp & PSW32_ADDR_INSN); 144 + to->si_addr = (void __force __user *) 145 + (u64) (tmp & PSW32_ADDR_INSN); 145 146 break; 146 147 case __SI_POLL >> 16: 147 148 err |= __get_user(to->si_band, &from->si_band); ··· 483 482 } else { 484 483 regs->gprs[14] = (__u64) frame->retcode | PSW32_ADDR_AMODE; 485 484 if (__put_user(S390_SYSCALL_OPCODE | __NR_sigreturn, 486 - (u16 __user *)(frame->retcode))) 485 + (u16 __force __user *)(frame->retcode))) 487 486 goto give_sigsegv; 488 487 } 489 488 ··· 492 491 goto give_sigsegv; 493 492 494 493 /* Set up registers for signal handler */ 495 - regs->gprs[15] = (__u64) frame; 494 + regs->gprs[15] = (__force __u64) frame; 496 495 regs->psw.mask |= PSW_MASK_BA; /* force amode 31 */ 497 - regs->psw.addr = (__u64) ka->sa.sa_handler; 496 + regs->psw.addr = (__force __u64) ka->sa.sa_handler; 498 497 499 498 regs->gprs[2] = map_signal(sig); 500 - regs->gprs[3] = (__u64) &frame->sc; 499 + regs->gprs[3] = (__force __u64) &frame->sc; 501 500 502 501 /* We forgot to include these in the sigcontext. 503 502 To avoid breaking binary compatibility, they are passed as args. */ ··· 505 504 regs->gprs[5] = current->thread.prot_addr; 506 505 507 506 /* Place signal number on stack to allow backtrace from handler. */ 508 - if (__put_user(regs->gprs[2], (int __user *) &frame->signo)) 507 + if (__put_user(regs->gprs[2], (int __force __user *) &frame->signo)) 509 508 goto give_sigsegv; 510 509 return 0; 511 510 ··· 548 547 } else { 549 548 regs->gprs[14] = (__u64) frame->retcode; 550 549 err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn, 551 - (u16 __user *)(frame->retcode)); 550 + (u16 __force __user *)(frame->retcode)); 552 551 } 553 552 554 553 /* Set up backchain. */ 555 - if (__put_user(regs->gprs[15], (unsigned int __user *) frame)) 554 + if (__put_user(regs->gprs[15], (unsigned int __force __user *) frame)) 556 555 goto give_sigsegv; 557 556 558 557 /* Set up registers for signal handler */ 559 - regs->gprs[15] = (__u64) frame; 558 + regs->gprs[15] = (__force __u64) frame; 560 559 regs->psw.mask |= PSW_MASK_BA; /* force amode 31 */ 561 560 regs->psw.addr = (__u64) ka->sa.sa_handler; 562 561 563 562 regs->gprs[2] = map_signal(sig); 564 - regs->gprs[3] = (__u64) &frame->info; 565 - regs->gprs[4] = (__u64) &frame->uc; 563 + regs->gprs[3] = (__force __u64) &frame->info; 564 + regs->gprs[4] = (__force __u64) &frame->uc; 566 565 return 0; 567 566 568 567 give_sigsegv:
+2 -1
arch/s390/kernel/traps.c
··· 334 334 info.si_signo = SIGTRAP; 335 335 info.si_errno = 0; 336 336 info.si_code = TRAP_HWBKPT; 337 - info.si_addr = (void *) current->thread.per_event.address; 337 + info.si_addr = 338 + (void __force __user *) current->thread.per_event.address; 338 339 force_sig_info(SIGTRAP, &info, current); 339 340 } 340 341
+4 -2
arch/s390/lib/uaccess_pt.c
··· 342 342 if (segment_eq(get_fs(), KERNEL_DS)) 343 343 return __futex_atomic_op_pt(op, uaddr, oparg, old); 344 344 spin_lock(&current->mm->page_table_lock); 345 - uaddr = (int __user *) __dat_user_addr((unsigned long) uaddr); 345 + uaddr = (u32 __force __user *) 346 + __dat_user_addr((__force unsigned long) uaddr); 346 347 if (!uaddr) { 347 348 spin_unlock(&current->mm->page_table_lock); 348 349 return -EFAULT; ··· 379 378 if (segment_eq(get_fs(), KERNEL_DS)) 380 379 return __futex_atomic_cmpxchg_pt(uval, uaddr, oldval, newval); 381 380 spin_lock(&current->mm->page_table_lock); 382 - uaddr = (int __user *) __dat_user_addr((unsigned long) uaddr); 381 + uaddr = (u32 __force __user *) 382 + __dat_user_addr((__force unsigned long) uaddr); 383 383 if (!uaddr) { 384 384 spin_unlock(&current->mm->page_table_lock); 385 385 return -EFAULT;