diff options
| author | Richard Weinberger <richard@nod.at> | 2013-08-17 12:46:00 -0400 |
|---|---|---|
| committer | Richard Weinberger <richard@nod.at> | 2013-09-07 04:38:34 -0400 |
| commit | f75b1b1bedfb498cc43a992ce4d7ed8df3b1e770 (patch) | |
| tree | e7afc9647b9cc80fb95ee9dae7d9532b67efdc01 /arch/um/include/shared | |
| parent | 65984ff9d2179a97e5a11aaef1e86fdb276cfad5 (diff) | |
um: Implement probe_kernel_read()
UML needs it's own probe_kernel_read() to handle kernel
mode faults correctly.
The implementation uses mincore() on the host side to detect
whether a page is owned by the UML kernel process.
This fixes also a possible crash when sysrq-t is used.
Starting with 3.10 sysrq-t calls probe_kernel_read() to
read details from the kernel workers. As kernel worker are
completely async pointers may turn NULL while reading them.
Cc: <stian@nixia.no>
Cc: <tj@kernel.org>
Cc: <stable@vger.kernel.org> # 3.10.x
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um/include/shared')
| -rw-r--r-- | arch/um/include/shared/os.h | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/arch/um/include/shared/os.h b/arch/um/include/shared/os.h index 95feaa47a2fb..c70a234a3f8c 100644 --- a/arch/um/include/shared/os.h +++ b/arch/um/include/shared/os.h | |||
| @@ -200,6 +200,7 @@ extern int os_unmap_memory(void *addr, int len); | |||
| 200 | extern int os_drop_memory(void *addr, int length); | 200 | extern int os_drop_memory(void *addr, int length); |
| 201 | extern int can_drop_memory(void); | 201 | extern int can_drop_memory(void); |
| 202 | extern void os_flush_stdout(void); | 202 | extern void os_flush_stdout(void); |
| 203 | extern int os_mincore(void *addr, unsigned long len); | ||
| 203 | 204 | ||
| 204 | /* execvp.c */ | 205 | /* execvp.c */ |
| 205 | extern int execvp_noalloc(char *buf, const char *file, char *const argv[]); | 206 | extern int execvp_noalloc(char *buf, const char *file, char *const argv[]); |
