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

x86/signals: ia32_signal.c: add __user casts to fix sparse warnings

Fix the following sparse warnings by adding appropriate __user
casts and annotations:

ia32_signal.c:165:38: warning: incorrect type in argument 1 (different address spaces)
ia32_signal.c:165:38: expected struct sigaltstack const [noderef] [usertype] <asn:1>*<noident>
ia32_signal.c:165:38: got struct sigaltstack *
[...]

Signed-off-by: Mathias Krause <minipli@googlemail.com>
Cc: Oleg Nesterov <oleg@redhat.com>
Link: http://lkml.kernel.org/r/1346621506-30857-4-git-send-email-minipli@googlemail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>

authored by

Mathias Krause and committed by
Ingo Molnar
0ff8fef4 3d133406

+6 -5
+6 -5
arch/x86/ia32/ia32_signal.c
··· 162 162 } 163 163 seg = get_fs(); 164 164 set_fs(KERNEL_DS); 165 - ret = do_sigaltstack(uss_ptr ? &uss : NULL, &uoss, regs->sp); 165 + ret = do_sigaltstack((stack_t __force __user *) (uss_ptr ? &uss : NULL), 166 + (stack_t __force __user *) &uoss, regs->sp); 166 167 set_fs(seg); 167 168 if (ret >= 0 && uoss_ptr) { 168 169 if (!access_ok(VERIFY_WRITE, uoss_ptr, sizeof(stack_ia32_t))) ··· 362 361 */ 363 362 static void __user *get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, 364 363 size_t frame_size, 365 - void **fpstate) 364 + void __user **fpstate) 366 365 { 367 366 unsigned long sp; 368 367 ··· 383 382 384 383 if (used_math()) { 385 384 sp = sp - sig_xstate_ia32_size; 386 - *fpstate = (struct _fpstate_ia32 *) sp; 385 + *fpstate = (struct _fpstate_ia32 __user *) sp; 387 386 if (save_i387_xstate_ia32(*fpstate) < 0) 388 387 return (void __user *) -1L; 389 388 } ··· 449 448 * These are actually not used anymore, but left because some 450 449 * gdb versions depend on them as a marker. 451 450 */ 452 - put_user_ex(*((u64 *)&code), (u64 *)frame->retcode); 451 + put_user_ex(*((u64 *)&code), (u64 __user *)frame->retcode); 453 452 } put_user_catch(err); 454 453 455 454 if (err) ··· 530 529 * Not actually used anymore, but left because some gdb 531 530 * versions need it. 532 531 */ 533 - put_user_ex(*((u64 *)&code), (u64 *)frame->retcode); 532 + put_user_ex(*((u64 *)&code), (u64 __user *)frame->retcode); 534 533 } put_user_catch(err); 535 534 536 535 if (err)