|
@@ -45,7 +45,7 @@ static inline long do_strnlen_user(const char __user *src, unsigned long count,
|
|
|
src -= align;
|
|
|
max += align;
|
|
|
|
|
|
- if (unlikely(__get_user(c,(unsigned long __user *)src)))
|
|
|
+ if (unlikely(unsafe_get_user(c,(unsigned long __user *)src)))
|
|
|
return 0;
|
|
|
c |= aligned_byte_mask(align);
|
|
|
|
|
@@ -61,7 +61,7 @@ static inline long do_strnlen_user(const char __user *src, unsigned long count,
|
|
|
if (unlikely(max <= sizeof(unsigned long)))
|
|
|
break;
|
|
|
max -= sizeof(unsigned long);
|
|
|
- if (unlikely(__get_user(c,(unsigned long __user *)(src+res))))
|
|
|
+ if (unlikely(unsafe_get_user(c,(unsigned long __user *)(src+res))))
|
|
|
return 0;
|
|
|
}
|
|
|
res -= align;
|
|
@@ -112,7 +112,12 @@ long strnlen_user(const char __user *str, long count)
|
|
|
src_addr = (unsigned long)str;
|
|
|
if (likely(src_addr < max_addr)) {
|
|
|
unsigned long max = max_addr - src_addr;
|
|
|
- return do_strnlen_user(str, count, max);
|
|
|
+ long retval;
|
|
|
+
|
|
|
+ user_access_begin();
|
|
|
+ retval = do_strnlen_user(str, count, max);
|
|
|
+ user_access_end();
|
|
|
+ return retval;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|
|
@@ -141,7 +146,12 @@ long strlen_user(const char __user *str)
|
|
|
src_addr = (unsigned long)str;
|
|
|
if (likely(src_addr < max_addr)) {
|
|
|
unsigned long max = max_addr - src_addr;
|
|
|
- return do_strnlen_user(str, ~0ul, max);
|
|
|
+ long retval;
|
|
|
+
|
|
|
+ user_access_begin();
|
|
|
+ retval = do_strnlen_user(str, ~0ul, max);
|
|
|
+ user_access_end();
|
|
|
+ return retval;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|