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

ARM: 5638/1: arch/arm/kernel/signal.c: use correct address space for CRUNCH

preserve_crunch_context() calls __copy_to_user() which expects the
destination address to be in __user space. setup_sigframe() properly
passes the destination address.

restore_crunch_context() calls __copy_from_user() which expects the
source address to be in __user space. restore_sigframe() properly
passes the source address.

This fixes {preserve/restore}_crunch_context() to accept the
address as __user space and resolves the following sparse warnings:

arch/arm/kernel/signal.c:146:31:
warning: incorrect type in argument 1 (different address spaces)
expected void [noderef] <asn:1>*to
got struct crunch_sigframe *frame

arch/arm/kernel/signal.c:156:38:
warning: incorrect type in argument 2 (different address spaces)
expected void const [noderef] <asn:1>*from
got struct crunch_sigframe *frame

arch/arm/kernel/signal.c:250:48:
warning: incorrect type in argument 1 (different address spaces)
expected struct crunch_sigframe *frame
got struct crunch_sigframe [noderef] <asn:1>*<noident>

arch/arm/kernel/signal.c:365:49:
warning: incorrect type in argument 1 (different address spaces)
expected struct crunch_sigframe *frame
got struct crunch_sigframe [noderef] <asn:1>*<noident>

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>

authored by

Hartley Sweeten and committed by
Russell King
65a5053b 0a51810a

+2 -2
+2 -2
arch/arm/kernel/signal.c
··· 133 133 } 134 134 135 135 #ifdef CONFIG_CRUNCH 136 - static int preserve_crunch_context(struct crunch_sigframe *frame) 136 + static int preserve_crunch_context(struct crunch_sigframe __user *frame) 137 137 { 138 138 char kbuf[sizeof(*frame) + 8]; 139 139 struct crunch_sigframe *kframe; ··· 146 146 return __copy_to_user(frame, kframe, sizeof(*frame)); 147 147 } 148 148 149 - static int restore_crunch_context(struct crunch_sigframe *frame) 149 + static int restore_crunch_context(struct crunch_sigframe __user *frame) 150 150 { 151 151 char kbuf[sizeof(*frame) + 8]; 152 152 struct crunch_sigframe *kframe;