diff options
author | Alex Shi <alex.shi@linaro.org> | 2016-08-27 11:27:14 +0800 |
---|---|---|
committer | Alex Shi <alex.shi@linaro.org> | 2016-08-27 11:27:14 +0800 |
commit | 59e65b4bbfe7d0139ab1ab59cd27a5db95f5bb7b (patch) | |
tree | f33d57c418124a184053ef6bd759ca8a155d6ac6 /lib/strncpy_from_user.c | |
parent | e779279da78339ec75fa72571ef901a447762cc6 (diff) | |
parent | 3ad78bad4fd43467f1fc6dff63076789b30c116b (diff) |
Merge remote-tracking branch 'v4.4/topic/mm-kaslr-pax_usercopy' into linux-linaro-lsk-v4.4
Diffstat (limited to 'lib/strncpy_from_user.c')
-rw-r--r-- | lib/strncpy_from_user.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/strncpy_from_user.c b/lib/strncpy_from_user.c index e0af6ff73d14..33840324138c 100644 --- a/lib/strncpy_from_user.c +++ b/lib/strncpy_from_user.c @@ -39,7 +39,7 @@ static inline long do_strncpy_from_user(char *dst, const char __user *src, long unsigned long c, data; /* Fall back to byte-at-a-time if we get a page fault */ - if (unlikely(__get_user(c,(unsigned long __user *)(src+res)))) + if (unlikely(unsafe_get_user(c,(unsigned long __user *)(src+res)))) break; *(unsigned long *)(dst+res) = c; if (has_zero(c, &data, &constants)) { @@ -55,7 +55,7 @@ byte_at_a_time: while (max) { char c; - if (unlikely(__get_user(c,src+res))) + if (unlikely(unsafe_get_user(c,src+res))) return -EFAULT; dst[res] = c; if (!c) @@ -107,7 +107,12 @@ long strncpy_from_user(char *dst, const char __user *src, long count) src_addr = (unsigned long)src; if (likely(src_addr < max_addr)) { unsigned long max = max_addr - src_addr; - return do_strncpy_from_user(dst, src, count, max); + long retval; + + user_access_begin(); + retval = do_strncpy_from_user(dst, src, count, max); + user_access_end(); + return retval; } return -EFAULT; } |