aboutsummaryrefslogtreecommitdiffstats
path: root/mm/maccess.c
diff options
context:
space:
mode:
Diffstat (limited to 'mm/maccess.c')
-rw-r--r--mm/maccess.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/maccess.c b/mm/maccess.c
index ec00be51a24f..f3416632e5a4 100644
--- a/mm/maccess.c
+++ b/mm/maccess.c
@@ -30,8 +30,10 @@ long __probe_kernel_read(void *dst, const void *src, size_t size)
30 30
31 set_fs(KERNEL_DS); 31 set_fs(KERNEL_DS);
32 pagefault_disable(); 32 pagefault_disable();
33 current->kernel_uaccess_faults_ok++;
33 ret = __copy_from_user_inatomic(dst, 34 ret = __copy_from_user_inatomic(dst,
34 (__force const void __user *)src, size); 35 (__force const void __user *)src, size);
36 current->kernel_uaccess_faults_ok--;
35 pagefault_enable(); 37 pagefault_enable();
36 set_fs(old_fs); 38 set_fs(old_fs);
37 39
@@ -58,7 +60,9 @@ long __probe_kernel_write(void *dst, const void *src, size_t size)
58 60
59 set_fs(KERNEL_DS); 61 set_fs(KERNEL_DS);
60 pagefault_disable(); 62 pagefault_disable();
63 current->kernel_uaccess_faults_ok++;
61 ret = __copy_to_user_inatomic((__force void __user *)dst, src, size); 64 ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
65 current->kernel_uaccess_faults_ok--;
62 pagefault_enable(); 66 pagefault_enable();
63 set_fs(old_fs); 67 set_fs(old_fs);
64 68
@@ -94,11 +98,13 @@ long strncpy_from_unsafe(char *dst, const void *unsafe_addr, long count)
94 98
95 set_fs(KERNEL_DS); 99 set_fs(KERNEL_DS);
96 pagefault_disable(); 100 pagefault_disable();
101 current->kernel_uaccess_faults_ok++;
97 102
98 do { 103 do {
99 ret = __get_user(*dst++, (const char __user __force *)src++); 104 ret = __get_user(*dst++, (const char __user __force *)src++);
100 } while (dst[-1] && ret == 0 && src - unsafe_addr < count); 105 } while (dst[-1] && ret == 0 && src - unsafe_addr < count);
101 106
107 current->kernel_uaccess_faults_ok--;
102 dst[-1] = '\0'; 108 dst[-1] = '\0';
103 pagefault_enable(); 109 pagefault_enable();
104 set_fs(old_fs); 110 set_fs(old_fs);