xen: Prevent buffer overflow in privcmd ioctl

The "call" variable comes from the user in privcmd_ioctl_hypercall().
It's an offset into the hypercall_page[] which has (PAGE_SIZE / 32)
elements. We need to put an upper bound on it to prevent an out of
bounds access.

Cc: stable@vger.kernel.org
Fixes: 1246ae0bb992 ("xen: add variable hypercall caller")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Juergen Gross <jgross@suse.com>

authored by Dan Carpenter and committed by Juergen Gross 42d8644b ad94dc3a

Changed files
+3
arch
x86
include
asm
+3
arch/x86/include/asm/xen/hypercall.h
··· 206 __HYPERCALL_DECLS; 207 __HYPERCALL_5ARG(a1, a2, a3, a4, a5); 208 209 asm volatile(CALL_NOSPEC 210 : __HYPERCALL_5PARAM 211 : [thunk_target] "a" (&hypercall_page[call])
··· 206 __HYPERCALL_DECLS; 207 __HYPERCALL_5ARG(a1, a2, a3, a4, a5); 208 209 + if (call >= PAGE_SIZE / sizeof(hypercall_page[0])) 210 + return -EINVAL; 211 + 212 asm volatile(CALL_NOSPEC 213 : __HYPERCALL_5PARAM 214 : [thunk_target] "a" (&hypercall_page[call])