sparse: user annotations for s390 architecture
Subsystems (3)
PATCH 1/1 sparse: user annotations for s390 architecture
Lots of trivial changes to make sparse happy on s390 arch code, mostly __user annotations.
arch/s390/kernel/compat_signal.c | 54 ++++++++++++++++++++------------------- arch/s390/kernel/debug.c | 24 ++++++++--------- arch/s390/kernel/process.c | 13 +++++---- arch/s390/kernel/profile.c | 3 +- arch/s390/kernel/ptrace.c | 18 +++++++------ arch/s390/kernel/signal.c | 48 +++++++++++++++++++--------------- arch/s390/kernel/sys_s390.c | 46 ++++++++++++++++----------------- arch/s390/kernel/traps.c | 4 +- arch/s390/mm/ioremap.c | 2 - include/asm-s390/checksum.h | 4 +- include/asm-s390/compat.h | 8 ++--- include/asm-s390/debug.h | 23 +--------------- include/asm-s390/idals.h | 8 ++--- include/asm-s390/ipc.h | 2 - include/asm-s390/spinlock.h | 8 ++--- include/asm-s390/uaccess.h | 46 ++++++++++++++++++++++++--------- 16 files changed, 164 insertions(+), 147 deletions(-)
===== arch/s390/kernel/compat_signal.c 1.9 vs edited =====
arch/s390/kernel/compat_signal.c +29 -25
@@ -53,7 +53,7 @@ asmlinkage int FASTCALL(do_signal(struct pt_regs *regs, sigset_t *oldset)); -int copy_siginfo_to_user32 (siginfo_t32 *to,siginfo_t *from) +int copy_siginfo_to_user32 (siginfo_t32 __user *to,siginfo_t *from) {int err;
@@ -130,7 +130,8 @@ } asmlinkage int -sys32_rt_sigsuspend (struct pt_regs * regs,compat_sigset_t *unewset,size_t sigsetsize) +sys32_rt_sigsuspend (struct pt_regs * regs,compat_sigset_t __user *unewset, +size_t sigsetsize) {sigset_t saveset, newset;compat_sigset_t set32;
@@ -162,11 +163,11 @@if (do_signal (regs, &saveset))return -EINTR ; } -} +}asmlinkage long -sys32_sigaction (int sig,const struct old_sigaction32 *act, -struct old_sigaction32 *oact) +sys32_sigaction (int sig,const struct old_sigaction32 __user *act, +struct old_sigaction32 __user *oact) {struct k_sigaction new_ka, old_ka;int ret;
@@ -199,9 +200,9 @@int do_sigaction (int sig,const struct k_sigaction *act,struct k_sigaction *oact); -asmlinkage long -sys32_rt_sigaction (int sig,const struct sigaction32 *act, -struct sigaction32 *oact,size_t sigsetsize) +asmlinkage long +sys32_rt_sigaction (int sig,const struct sigaction32 __user *act, +struct sigaction32 __user *oact,size_t sigsetsize) {struct k_sigaction new_ka, old_ka;int ret;
@@ -258,7 +259,8 @@ }asmlinkage long -sys32_sigaltstack (const stack_t32 *uss,stack_t32 *uoss,struct pt_regs *regs) +sys32_sigaltstack (const stack_t32 __user *uss,stack_t32 __user *uoss, +struct pt_regs *regs) {stack_t kss, koss;int ret, err =0 ;
@@ -275,7 +277,9 @@ }set_fs (KERNEL_DS ); - ret =do_sigaltstack (uss ? &kss :NULL , uoss ? &koss :NULL , regs->gprs[15 ]); + ret =do_sigaltstack ((stack_t __user *) (uss ? &kss :NULL ), + (stack_t __user *) (uoss ? &koss :NULL ), + regs->gprs[15 ]);set_fs (old_fs);if (!ret && uoss) {
@@ -290,7 +294,7 @@return ret; } -static int save_sigregs32 (struct pt_regs *regs,_sigregs32 *sregs) +static int save_sigregs32 (struct pt_regs *regs,_sigregs32 __user *sregs) {_s390_regs_common32 regs32;int err, i;
@@ -311,7 +315,7 @@ sizeof(_s390_fp_regs32)); } -static int restore_sigregs32 (struct pt_regs *regs,_sigregs32 *sregs) +static int restore_sigregs32 (struct pt_regs *regs,_sigregs32 __user *sregs) {_s390_regs_common32 regs32;int err, i;
@@ -343,7 +347,7 @@asmlinkage long sys32_sigreturn (struct pt_regs *regs) { -sigframe32 *frame = (sigframe32 *)regs->gprs[15 ]; +sigframe32 __user *frame = (sigframe32 __user *)regs->gprs[15 ];sigset_t set;if (verify_area (VERIFY_READ , frame,sizeof (*frame)))
@@ -365,11 +369,11 @@ badframe:force_sig (SIGSEGV , current);return 0 ; -} +}asmlinkage long sys32_rt_sigreturn (struct pt_regs *regs) { -rt_sigframe32 *frame = (rt_sigframe32 *)regs->gprs[15 ]; +rt_sigframe32 __user *frame = (rt_sigframe32 __user *)regs->gprs[15 ];sigset_t set;stack_t st;__u32 ss_sp;
@@ -399,8 +403,8 @@/* It is more difficult to avoid calling this function than to call it and ignore errors. */ -set_fs (KERNEL_DS ); -do_sigaltstack (&st,NULL , regs->gprs[15 ]); +set_fs (KERNEL_DS ); +do_sigaltstack ((stack_t __user *)&st,NULL , regs->gprs[15 ]);set_fs (old_fs);return regs->gprs[2 ];
@@ -418,7 +422,7 @@/* * Determine which stack to use.. */ -static inline void * +static inline void __user *get_sigframe (struct k_sigaction *ka,struct pt_regs * regs,size_t frame_size) {unsigned long sp;
@@ -439,7 +443,7 @@ sp = (unsigned long ) ka->sa.sa_restorer; } -return (void *)((sp - frame_size) &-8ul ); +return (void __user *)((sp - frame_size) &-8ul ); }static inline int map_signal (int sig)
@@ -455,7 +459,7 @@static void setup_frame32 (int sig,struct k_sigaction *ka,sigset_t *set,struct pt_regs * regs) { -sigframe32 *frame =get_sigframe (ka, regs,sizeof (sigframe32)); +sigframe32 __user *frame =get_sigframe (ka, regs,sizeof (sigframe32));if (!access_ok (VERIFY_WRITE , frame,sizeof (sigframe32))) goto give_sigsegv;
@@ -474,12 +478,12 @@ }else { regs->gprs[14 ] = (__u64 ) frame->retcode;if (__put_user (S390_SYSCALL_OPCODE | __NR_sigreturn, - (u16 *)(frame->retcode))) + (u16 __user *)(frame->retcode))) goto give_sigsegv; }/* Set up backchain. */ -if (__put_user (regs->gprs[15 ], (unsigned int *) frame)) +if (__put_user (regs->gprs[15 ], (unsigned int __user *) frame)) goto give_sigsegv;/* Set up registers for signal handler */
@@ -505,7 +509,7 @@ sigset_t *set, struct pt_regs * regs) { int err = 0; -rt_sigframe32 *frame =get_sigframe (ka, regs,sizeof (rt_sigframe32)); +rt_sigframe32 __user *frame =get_sigframe (ka, regs,sizeof (rt_sigframe32));if (!access_ok (VERIFY_WRITE , frame,sizeof (rt_sigframe32))) goto give_sigsegv;
@@ -531,11 +535,11 @@ }else { regs->gprs[14 ] = (__u64 ) frame->retcode; err |=__put_user (S390_SYSCALL_OPCODE | __NR_rt_sigreturn, - (u16 *)(frame->retcode)); + (u16 __user *)(frame->retcode)); }/* Set up backchain. */ -if (__put_user (regs->gprs[15 ], (unsigned int *) frame)) +if (__put_user (regs->gprs[15 ], (unsigned int __user *) frame)) goto give_sigsegv;/* Set up registers for signal handler */
===== arch/s390/kernel/debug.c 1.15 vs edited =====
arch/s390/kernel/debug.c +12 -12
@@ -62,9 +62,9 @@/* internal function prototyes */ static int debug_init (void ); -static ssize_t debug_output (struct file *file,char *user_buf, +static ssize_t debug_output (struct file *file,char __user *user_buf,size_t user_len,loff_t * offset); -static ssize_t debug_input (struct file *file,const char *user_buf, +static ssize_t debug_input (struct file *file,const char __user *user_buf,size_t user_len,loff_t * offset);static int debug_open (struct inode *inode,struct file *file);static int debug_close (struct inode *inode,struct file *file);
@@ -74,10 +74,10 @@static int debug_prolog_level_fn (debug_info_t * id,struct debug_view *view,char *out_buf);static int debug_input_level_fn (debug_info_t * id,struct debug_view *view, -struct file *file,const char *user_buf, +struct file *file,const char __user *user_buf,size_t user_buf_size,loff_t * offset);static int debug_input_flush_fn (debug_info_t * id,struct debug_view *view, -struct file *file,const char *user_buf, +struct file *file,const char __user *user_buf,size_t user_buf_size,loff_t * offset);static int debug_hex_ascii_format_fn (debug_info_t * id,struct debug_view *view,char *out_buf,const char *in_buf);
@@ -416,10 +416,10 @@* - copies formated debug entries to the user buffer */ -static ssize_t debug_output (struct file *file,/* file descriptor */ -char *user_buf,/* user buffer */ -size_t len,/* length of buffer */ -loff_t *offset/* offset in the file */ ) +static ssize_t debug_output (struct file *file,/* file descriptor */ +char __user *user_buf,/* user buffer */ +size_t len,/* length of buffer */ +loff_t *offset)/* offset in the file */ {size_t count =0 ;size_t entry_offset, size =0 ;
@@ -462,7 +462,7 @@*/ static ssize_t debug_input (struct file *file, -const char *user_buf,size_t length, +const char __user *user_buf,size_t length,loff_t *offset) {int rc =0 ;
@@ -942,7 +942,7 @@*/ static int debug_input_level_fn (debug_info_t * id,struct debug_view *view, -struct file *file,const char *user_buf, +struct file *file,const char __user *user_buf,size_t in_buf_size,loff_t * offset) {char input_buf[1 ];
@@ -1004,9 +1004,9 @@/* * view function: flushes debug areas */ - +static int debug_input_flush_fn (debug_info_t * id,struct debug_view *view, -struct file *file,const char *user_buf, +struct file *file,const char __user *user_buf,size_t in_buf_size,loff_t * offset) {char input_buf[1 ];
===== arch/s390/kernel/process.c 1.25 vs edited =====
arch/s390/kernel/process.c +7 -6
@@ -16,6 +16,7 @@*/ #include <linux/config.h> +#include <linux/compiler.h> #include <linux/errno.h> #include <linux/sched.h> #include <linux/kernel.h>
@@ -292,12 +293,12 @@ {unsigned long clone_flags;unsigned long newsp; -int *parent_tidptr, *child_tidptr; +int __user *parent_tidptr, *child_tidptr; clone_flags = regs.gprs[3 ]; newsp = regs.orig_gpr2; - parent_tidptr = (int *) regs.gprs[4 ]; - child_tidptr = (int *) regs.gprs[5 ]; + parent_tidptr = (int __user *) regs.gprs[4 ]; + child_tidptr = (int __user *) regs.gprs[5 ];if (!newsp) newsp = regs.gprs[15 ]; return do_fork(clone_flags & ~CLONE_IDLETASK, newsp, ®s, 0,
@@ -328,12 +329,12 @@int error;char * filename; - filename =getname ((char *) regs.orig_gpr2); + filename =getname ((char __user *) regs.orig_gpr2); error =PTR_ERR (filename);if (IS_ERR (filename)) goto out; - error =do_execve (filename, (char **) regs.gprs[3 ], - (char **) regs.gprs[4 ], ®s); + error =do_execve (filename, (char __user *__user *) regs.gprs[3 ], + (char __user *__user *) regs.gprs[4 ], ®s);if (error ==0 ) { current->ptrace &= ~PT_DTRACE ; current->thread.fp_regs.fpc =0 ;
===== arch/s390/kernel/profile.c 1.1 vs edited =====
arch/s390/kernel/profile.c +2 -1
@@ -19,7 +19,8 @@return len; } -static int prof_cpu_mask_write_proc (struct file *file,const char *buffer, +static int prof_cpu_mask_write_proc (struct file *file, +const char __user *buffer,unsigned long count,void *data) {cpumask_t *mask = (cpumask_t *)data;
===== arch/s390/kernel/ptrace.c 1.22 vs edited =====
arch/s390/kernel/ptrace.c +10 -8
@@ -176,7 +176,7 @@ }else tmp =0 ; -return put_user (tmp, (addr_t *) data); +return put_user (tmp, (addr_t __user *) data); }/*
@@ -269,7 +269,7 @@ copied =access_process_vm (child, addr, &tmp,sizeof (tmp),0 );if (copied !=sizeof (tmp))return -EIO ; -return put_user (tmp, (unsigned long *) data); +return put_user (tmp, (unsigned long __user *) data);case PTRACE_PEEKUSR :/* read the word at location addr in the USER area. */
@@ -291,7 +291,8 @@case PTRACE_PEEKUSR_AREA :case PTRACE_POKEUSR_AREA : -if (copy_from_user (&parea, (void *) addr,sizeof (parea))) +if (copy_from_user (&parea, (void __user *) addr, +sizeof (parea)))return -EFAULT ; addr = parea.kernel_addr; data = parea.process_addr;
@@ -301,7 +302,7 @@ ret =peek_user (child, addr, data); else {addr_t tmp; -if (get_user (tmp, (addr_t *) data)) +if (get_user (tmp, (addr_t __user *) data))return -EFAULT ; ret =poke_user (child, addr, tmp); }
@@ -402,7 +403,7 @@ }else tmp =0 ; -return put_user (tmp, (__u32 *) data); +return put_user (tmp, (__u32 __user *) data); }/*
@@ -509,7 +510,7 @@ copied =access_process_vm (child, addr, &tmp,sizeof (tmp),0 );if (copied !=sizeof (tmp))return -EIO ; -return put_user (tmp, (unsigned int *) data); +return put_user (tmp, (unsigned int __user *) data);case PTRACE_PEEKUSR :/* read the word at location addr in the USER area. */
@@ -530,7 +531,8 @@case PTRACE_PEEKUSR_AREA :case PTRACE_POKEUSR_AREA : -if (copy_from_user (&parea, (void *) addr,sizeof (parea))) +if (copy_from_user (&parea, (void __user *) addr, +sizeof (parea)))return -EFAULT ; addr = parea.kernel_addr; data = parea.process_addr;
@@ -540,7 +542,7 @@ ret =peek_user_emu31 (child, addr, data); else {__u32 tmp; -if (get_user (tmp, (__u32 *) data)) +if (get_user (tmp, (__u32 __user *) data))return -EFAULT ; ret =poke_user_emu31 (child, addr, tmp); }
===== arch/s390/kernel/signal.c 1.25 vs edited =====
arch/s390/kernel/signal.c +27 -21
133 lines not on this page · raw message
===== arch/s390/kernel/sys_s390.c 1.14 vs edited =====
arch/s390/kernel/sys_s390.c +23 -23
128 lines not on this page · raw message
===== arch/s390/kernel/traps.c 1.29 vs edited =====
arch/s390/kernel/traps.c +2 -2
@@ -188,7 +188,7 @@printk ("%s Code: " , mode);for (i =0 ; i <20 ; i++) {unsigned char c; -if (__get_user (c, (char *)(regs->psw.addr + i))) { +if (__get_user (c, (char __user *)(regs->psw.addr + i))) {printk (" Bad PSW." );break ; }
@@ -391,7 +391,7 @@local_irq_enable ();if (regs->psw.mask &PSW_MASK_PSTATE ) -get_user (*((__u16 *) opcode), location); +get_user (*((__u16 *) opcode), (__u16 __user *)location);else *((__u16 *)opcode)=*((__u16 *)location);if (*((__u16 *)opcode)==S390_BREAKPOINT_U16 )
===== arch/s390/mm/ioremap.c 1.8 vs edited =====
arch/s390/mm/ioremap.c +1 -1
@@ -134,5 +134,5 @@void iounmap (void *addr) {if (addr > high_memory) -return vfree (addr); +vfree (addr); }
===== include/asm-s390/checksum.h 1.11 vs edited =====
include/asm-s390/checksum.h +2 -2
@@ -93,8 +93,8 @@* Copy from userspace and compute checksum. If we catch an exception * then zero the rest of the buffer. */ -static inline unsigned int -csum_partial_copy_from_user (const char *src,char *dst, +static inline unsigned int +csum_partial_copy_from_user (const char __user *src,char *dst,int len,unsigned int sum,int *err_ptr) {
===== include/asm-s390/compat.h 1.6 vs edited =====
include/asm-s390/compat.h +4 -4
@@ -123,19 +123,19 @@*/ typedef u32 compat_uptr_t ; -static inline void *compat_ptr (compat_uptr_t uptr) +static inline void __user *compat_ptr (compat_uptr_t uptr) { -return (void *)(unsigned long )(uptr &0x7fffffffUL ); +return (void __user *)(unsigned long )(uptr &0x7fffffffUL ); } -static inline void *compat_alloc_user_space (long len) +static inline void __user *compat_alloc_user_space (long len) {unsigned long stack; stack =KSTK_ESP (current);if (test_thread_flag (TIF_31BIT )) stack &=0x7fffffffUL ; -return (void *) (stack - len); +return (void __user *) (stack - len); }struct compat_ipc64_perm {
===== include/asm-s390/debug.h 1.9 vs edited =====
include/asm-s390/debug.h +2 -21
@@ -91,7 +91,8 @@ char* out_buf);typedef int (debug_input_proc_t ) (debug_info_t * id,struct debug_view * view, -struct file * file,const char * user_buf, +struct file * file, +const char __user *user_buf,size_t in_buf_size,loff_t * offset); int debug_dflt_header_fn(debug_info_t* id, struct debug_view* view,
@@ -232,26 +233,6 @@ #define PRINT_WARN(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) #define PRINT_ERR(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) #define PRINT_FATAL(x...) printk ( KERN_DEBUG PRINTK_HEADER x ) -#endif /* DASD_DEBUG */ - -#if DASD_DEBUG >4 -#define INTERNAL_ERROR(x...) PRINT_FATAL ( INTERNAL_ERRMSG ( x ) ) -#elif DASD_DEBUG >2 -#define INTERNAL_ERROR(x...) PRINT_ERR ( INTERNAL_ERRMSG ( x ) ) -#elif DASD_DEBUG >0 -#define INTERNAL_ERROR(x...) PRINT_WARN ( INTERNAL_ERRMSG ( x ) ) -#else -#define INTERNAL_ERROR(x...) -#endif /* DASD_DEBUG */ - -#if DASD_DEBUG >5 -#define INTERNAL_CHECK(x...) PRINT_FATAL ( INTERNAL_CHKMSG ( x ) ) -#elif DASD_DEBUG >3 -#define INTERNAL_CHECK(x...) PRINT_ERR ( INTERNAL_CHKMSG ( x ) ) -#elif DASD_DEBUG >1 -#define INTERNAL_CHECK(x...) PRINT_WARN ( INTERNAL_CHKMSG ( x ) ) -#else -#define INTERNAL_CHECK(x...)#endif /* DASD_DEBUG */ #undef DEBUG_MALLOC
===== include/asm-s390/idals.h 1.9 vs edited =====
include/asm-s390/idals.h +4 -4
@@ -218,7 +218,7 @@* Copy count bytes from an idal buffer to user memory */ static inline size_t -idal_buffer_to_user (struct idal_buffer *ib,void *to,size_t count) +idal_buffer_to_user (struct idal_buffer *ib,void __user *to,size_t count) {size_t left;int i;
@@ -228,7 +228,7 @@ left =copy_to_user (to, ib->data[i],IDA_BLOCK_SIZE );if (left)return left + count -IDA_BLOCK_SIZE ; - to = (void *) to +IDA_BLOCK_SIZE ; + to = (void __user *) to +IDA_BLOCK_SIZE ; count -=IDA_BLOCK_SIZE ; }return copy_to_user (to, ib->data[i], count);
@@ -238,7 +238,7 @@* Copy count bytes from user memory to an idal buffer */ static inline size_t -idal_buffer_from_user (struct idal_buffer *ib,const void *from,size_t count) +idal_buffer_from_user (struct idal_buffer *ib,const void __user *from,size_t count) {size_t left;int i;
@@ -248,7 +248,7 @@ left =copy_from_user (ib->data[i], from,IDA_BLOCK_SIZE );if (left)return left + count -IDA_BLOCK_SIZE ; - from = (void *) from +IDA_BLOCK_SIZE ; + from = (void __user *) from +IDA_BLOCK_SIZE ; count -=IDA_BLOCK_SIZE ; }return copy_from_user (ib->data[i], from, count);
===== include/asm-s390/ipc.h 1.2 vs edited =====
include/asm-s390/ipc.h +1 -1
@@ -15,7 +15,7 @@* See arch/s390/kernel/sys_s390.c for ugly details.. */ struct ipc_kludge { -struct msgbuf *msgp; +struct msgbuf __user *msgp;long msgtyp; };
===== include/asm-s390/spinlock.h 1.15 vs edited =====
include/asm-s390/spinlock.h +4 -4
@@ -48,7 +48,7 @@ {#ifndef __s390x__unsigned int reg1, reg2; - __asm__ __volatile(" bras %0,1f\n" + __asm__ __volatile__(" bras %0,1f\n" "0: diag 0,0,68\n" "1: slr %1,%1\n" " cs %1,%0,0(%3)\n"
@@ -58,7 +58,7 @@ : "cc", "memory" );#else /* __s390x__ */ unsigned long reg1, reg2; - __asm__ __volatile(" bras %1,1f\n" + __asm__ __volatile__(" bras %1,1f\n" "0: " __DIAG44_INSN" 0,%4\n" "1: slr %0,%0\n" " cs %0,%1,0(%3)\n"
@@ -74,7 +74,7 @@unsigned long reg;unsigned int result; - __asm__ __volatile(" basr %1,0\n" + __asm__ __volatile__(" basr %1,0\n" "0: cs %0,%1,0(%3)" :"=d" (result),"=&d" (reg),"=m" (lp->lock) : "a" (&lp->lock), "m" (lp->lock), "0" (0)
@@ -86,7 +86,7 @@ {unsigned int old; - __asm__ __volatile("cs %0,%3,0(%4)" + __asm__ __volatile__("cs %0,%3,0(%4)" :"=d" (old),"=m" (lp->lock) :"0" (lp->lock),"d" (0 ),"a" (lp) :"cc" ,"memory" );
===== include/asm-s390/uaccess.h 1.17 vs edited =====
include/asm-s390/uaccess.h +34 -12
124 lines not on this page · raw message