]> git.baikalelectronics.ru Git - kernel.git/commit
x86-64: Set siginfo and context on vsyscall emulation faults
authorAndy Lutomirski <luto@amacapital.net>
Tue, 8 Nov 2011 00:33:40 +0000 (16:33 -0800)
committerIngo Molnar <mingo@elte.hu>
Mon, 5 Dec 2011 11:17:27 +0000 (12:17 +0100)
commitefa9ee96cc38a9b3e8b2b11de1011a266c9d77ee
tree71941c92c7352b1b78c169020946fecf1eae8f4a
parent32a902b0c5cefb4bc76649758252aa3ed998c7bd
x86-64: Set siginfo and context on vsyscall emulation faults

To make this work, we teach the page fault handler how to send
signals on failed uaccess.  This only works for user addresses
(kernel addresses will never hit the page fault handler in the
first place), so we need to generate signals for those
separately.

This gets the tricky case right: if the user buffer spans
multiple pages and only the second page is invalid, we set
cr2 and si_addr correctly.  UML relies on this behavior to
"fault in" pages as needed.

We steal a bit from thread_info.uaccess_err to enable this.
Before this change, uaccess_err was a 32-bit boolean value.

This fixes issues with UML when vsyscall=emulate.

Reported-by: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Andy Lutomirski <luto@amacapital.net>
Cc: richard -rw- weinberger <richard.weinberger@gmail.com>
Cc: H. Peter Anvin <hpa@linux.intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: http://lkml.kernel.org/r/4c8f91de7ec5cd2ef0f59521a04e1015f11e42b4.1320712291.git.luto@amacapital.net
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/thread_info.h
arch/x86/include/asm/uaccess.h
arch/x86/kernel/vsyscall_64.c
arch/x86/mm/extable.c
arch/x86/mm/fault.c