diff options
author | Jason Wessel <jason.wessel@windriver.com> | 2008-02-20 14:33:38 -0500 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-04-17 14:05:39 -0400 |
commit | b4b8ac524d9b6ed7229017145afa1d7afbea4a48 (patch) | |
tree | c1b8ef7b22ebc956c0effd0ad6b5a37290f86bda /mm/maccess.c | |
parent | 64e9ee3095b61d0300ea548216a57d2536611309 (diff) |
kgdb: fix optional arch functions and probe_kernel_*
Fix two regressions dealing with the kgdb core.
1) kgdb_skipexception and kgdb_post_primary_code are optional
functions that are only required on archs that need special exception
fixups.
2) The kernel address space scope must be set on any probe_kernel_*
function or archs such as ARCH=arm will not allow access to the kernel
memory space. As an example, it is required to allow the full kernel
address space is when you the kernel debugger to inspect a system
call.
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'mm/maccess.c')
-rw-r--r-- | mm/maccess.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/maccess.c b/mm/maccess.c index 24f81b971403..ac40796cfb15 100644 --- a/mm/maccess.c +++ b/mm/maccess.c | |||
@@ -17,11 +17,14 @@ | |||
17 | long probe_kernel_read(void *dst, void *src, size_t size) | 17 | long probe_kernel_read(void *dst, void *src, size_t size) |
18 | { | 18 | { |
19 | long ret; | 19 | long ret; |
20 | mm_segment_t old_fs = get_fs(); | ||
20 | 21 | ||
22 | set_fs(KERNEL_DS); | ||
21 | pagefault_disable(); | 23 | pagefault_disable(); |
22 | ret = __copy_from_user_inatomic(dst, | 24 | ret = __copy_from_user_inatomic(dst, |
23 | (__force const void __user *)src, size); | 25 | (__force const void __user *)src, size); |
24 | pagefault_enable(); | 26 | pagefault_enable(); |
27 | set_fs(old_fs); | ||
25 | 28 | ||
26 | return ret ? -EFAULT : 0; | 29 | return ret ? -EFAULT : 0; |
27 | } | 30 | } |
@@ -39,10 +42,13 @@ EXPORT_SYMBOL_GPL(probe_kernel_read); | |||
39 | long probe_kernel_write(void *dst, void *src, size_t size) | 42 | long probe_kernel_write(void *dst, void *src, size_t size) |
40 | { | 43 | { |
41 | long ret; | 44 | long ret; |
45 | mm_segment_t old_fs = get_fs(); | ||
42 | 46 | ||
47 | set_fs(KERNEL_DS); | ||
43 | pagefault_disable(); | 48 | pagefault_disable(); |
44 | ret = __copy_to_user_inatomic((__force void __user *)dst, src, size); | 49 | ret = __copy_to_user_inatomic((__force void __user *)dst, src, size); |
45 | pagefault_enable(); | 50 | pagefault_enable(); |
51 | set_fs(old_fs); | ||
46 | 52 | ||
47 | return ret ? -EFAULT : 0; | 53 | return ret ? -EFAULT : 0; |
48 | } | 54 | } |