]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
[S390] sparse: fix sparse warnings with __user pointers
authorMartin Schwidefsky <schwidefsky@de.ibm.com>
Sun, 30 Oct 2011 14:17:15 +0000 (15:17 +0100)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Sun, 30 Oct 2011 14:16:46 +0000 (15:16 +0100)
Use __force to quiet sparse warnings about user address space.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/compat_signal.c
arch/s390/kernel/traps.c
arch/s390/lib/uaccess_pt.c

index c68ea9c180462b2a896e948c46464b1aa7e3cd43..4f68c81d3ffaafb7ee1db39e7c63375e0d08422b 100644 (file)
@@ -141,7 +141,8 @@ int copy_siginfo_from_user32(siginfo_t *to, compat_siginfo_t __user *from)
                        break;
                case __SI_FAULT >> 16:
                        err |= __get_user(tmp, &from->si_addr);
-                       to->si_addr = (void __user *)(u64) (tmp & PSW32_ADDR_INSN);
+                       to->si_addr = (void __force __user *)
+                               (u64) (tmp & PSW32_ADDR_INSN);
                        break;
                case __SI_POLL >> 16:
                        err |= __get_user(to->si_band, &from->si_band);
@@ -482,7 +483,7 @@ static int setup_frame32(int sig, struct k_sigaction *ka,
        } else {
                regs->gprs[14] = (__u64) frame->retcode | PSW32_ADDR_AMODE;
                if (__put_user(S390_SYSCALL_OPCODE | __NR_sigreturn,
-                              (u16 __user *)(frame->retcode)))
+                              (u16 __force __user *)(frame->retcode)))
                        goto give_sigsegv;
         }
 
@@ -491,12 +492,12 @@ static int setup_frame32(int sig, struct k_sigaction *ka,
                goto give_sigsegv;
 
        /* Set up registers for signal handler */
-       regs->gprs[15] = (__u64) frame;
+       regs->gprs[15] = (__force __u64) frame;
        regs->psw.mask |= PSW_MASK_BA;          /* force amode 31 */
-       regs->psw.addr = (__u64) ka->sa.sa_handler;
+       regs->psw.addr = (__force __u64) ka->sa.sa_handler;
 
        regs->gprs[2] = map_signal(sig);
-       regs->gprs[3] = (__u64) &frame->sc;
+       regs->gprs[3] = (__force __u64) &frame->sc;
 
        /* We forgot to include these in the sigcontext.
           To avoid breaking binary compatibility, they are passed as args. */
@@ -504,7 +505,7 @@ static int setup_frame32(int sig, struct k_sigaction *ka,
        regs->gprs[5] = current->thread.prot_addr;
 
        /* Place signal number on stack to allow backtrace from handler.  */
-       if (__put_user(regs->gprs[2], (int __user *) &frame->signo))
+       if (__put_user(regs->gprs[2], (int __force __user *) &frame->signo))
                goto give_sigsegv;
        return 0;
 
@@ -547,21 +548,21 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
        } else {
                regs->gprs[14] = (__u64) frame->retcode;
                err |= __put_user(S390_SYSCALL_OPCODE | __NR_rt_sigreturn,
-                                 (u16 __user *)(frame->retcode));
+                                 (u16 __force __user *)(frame->retcode));
        }
 
        /* Set up backchain. */
-       if (__put_user(regs->gprs[15], (unsigned int __user *) frame))
+       if (__put_user(regs->gprs[15], (unsigned int __force __user *) frame))
                goto give_sigsegv;
 
        /* Set up registers for signal handler */
-       regs->gprs[15] = (__u64) frame;
+       regs->gprs[15] = (__force __u64) frame;
        regs->psw.mask |= PSW_MASK_BA;          /* force amode 31 */
        regs->psw.addr = (__u64) ka->sa.sa_handler;
 
        regs->gprs[2] = map_signal(sig);
-       regs->gprs[3] = (__u64) &frame->info;
-       regs->gprs[4] = (__u64) &frame->uc;
+       regs->gprs[3] = (__force __u64) &frame->info;
+       regs->gprs[4] = (__force __u64) &frame->uc;
        return 0;
 
 give_sigsegv:
index 79eee3f27afb4a7475b2a4f0d1c639f4e0fce016..a9807dd862765a92ae8c2f4a2addc46b67186336 100644 (file)
@@ -334,7 +334,8 @@ void __kprobes do_per_trap(struct pt_regs *regs)
        info.si_signo = SIGTRAP;
        info.si_errno = 0;
        info.si_code = TRAP_HWBKPT;
-       info.si_addr = (void *) current->thread.per_event.address;
+       info.si_addr =
+               (void __force __user *) current->thread.per_event.address;
        force_sig_info(SIGTRAP, &info, current);
 }
 
index 74833831417fcb3585831e52a000b5fded8d8217..342ae35a5ba90ddbcf89ef2a6dc5b8676de2faff 100644 (file)
@@ -342,7 +342,8 @@ int futex_atomic_op_pt(int op, u32 __user *uaddr, int oparg, int *old)
        if (segment_eq(get_fs(), KERNEL_DS))
                return __futex_atomic_op_pt(op, uaddr, oparg, old);
        spin_lock(&current->mm->page_table_lock);
-       uaddr = (int __user *) __dat_user_addr((unsigned long) uaddr);
+       uaddr = (u32 __force __user *)
+               __dat_user_addr((__force unsigned long) uaddr);
        if (!uaddr) {
                spin_unlock(&current->mm->page_table_lock);
                return -EFAULT;
@@ -378,7 +379,8 @@ int futex_atomic_cmpxchg_pt(u32 *uval, u32 __user *uaddr,
        if (segment_eq(get_fs(), KERNEL_DS))
                return __futex_atomic_cmpxchg_pt(uval, uaddr, oldval, newval);
        spin_lock(&current->mm->page_table_lock);
-       uaddr = (int __user *) __dat_user_addr((unsigned long) uaddr);
+       uaddr = (u32 __force __user *)
+               __dat_user_addr((__force unsigned long) uaddr);
        if (!uaddr) {
                spin_unlock(&current->mm->page_table_lock);
                return -EFAULT;