diff options
Diffstat (limited to 'kernel/trace/trace_kprobe.c')
-rw-r--r-- | kernel/trace/trace_kprobe.c | 10 |
1 files changed, 1 insertions, 9 deletions
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index d5fb09ebba8b..9eaf07f99212 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c | |||
@@ -861,22 +861,14 @@ static const struct file_operations kprobe_profile_ops = { | |||
861 | static nokprobe_inline int | 861 | static nokprobe_inline int |
862 | fetch_store_strlen(unsigned long addr) | 862 | fetch_store_strlen(unsigned long addr) |
863 | { | 863 | { |
864 | mm_segment_t old_fs; | ||
865 | int ret, len = 0; | 864 | int ret, len = 0; |
866 | u8 c; | 865 | u8 c; |
867 | 866 | ||
868 | old_fs = get_fs(); | ||
869 | set_fs(KERNEL_DS); | ||
870 | pagefault_disable(); | ||
871 | |||
872 | do { | 867 | do { |
873 | ret = __copy_from_user_inatomic(&c, (u8 *)addr + len, 1); | 868 | ret = probe_mem_read(&c, (u8 *)addr + len, 1); |
874 | len++; | 869 | len++; |
875 | } while (c && ret == 0 && len < MAX_STRING_SIZE); | 870 | } while (c && ret == 0 && len < MAX_STRING_SIZE); |
876 | 871 | ||
877 | pagefault_enable(); | ||
878 | set_fs(old_fs); | ||
879 | |||
880 | return (ret < 0) ? ret : len; | 872 | return (ret < 0) ? ret : len; |
881 | } | 873 | } |
882 | 874 | ||