diff options
author | Jonas Bonn <jonas@southpole.se> | 2012-05-27 04:25:47 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-05-28 00:00:32 -0400 |
commit | b48b2c3e50433ff6f7e46186daa7f986bd960215 (patch) | |
tree | 9a10b2130582f99df5ae7eae0b959425e791118c /arch/openrisc/include | |
parent | 1629372caaaf7ef744d3b983be56b99468a68ff8 (diff) |
openrisc: use generic strnlen_user() function
The generic version is both easier to support and more correct.
Signed-off-by: Jonas Bonn <jonas@southpole.se>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/openrisc/include')
-rw-r--r-- | arch/openrisc/include/asm/uaccess.h | 30 |
1 files changed, 2 insertions, 28 deletions
diff --git a/arch/openrisc/include/asm/uaccess.h b/arch/openrisc/include/asm/uaccess.h index 04b93de92636..ab2e7a198a4c 100644 --- a/arch/openrisc/include/asm/uaccess.h +++ b/arch/openrisc/include/asm/uaccess.h | |||
@@ -318,33 +318,7 @@ clear_user(void *addr, unsigned long size) | |||
318 | 318 | ||
319 | extern long strncpy_from_user(char *dest, const char __user *src, long count); | 319 | extern long strncpy_from_user(char *dest, const char __user *src, long count); |
320 | 320 | ||
321 | /* | 321 | extern __must_check long strlen_user(const char __user *str); |
322 | * Return the size of a string (including the ending 0) | 322 | extern __must_check long strnlen_user(const char __user *str, long n); |
323 | * | ||
324 | * Return 0 for error | ||
325 | */ | ||
326 | |||
327 | extern int __strnlen_user(const char *str, long len, unsigned long top); | ||
328 | |||
329 | /* | ||
330 | * Returns the length of the string at str (including the null byte), | ||
331 | * or 0 if we hit a page we can't access, | ||
332 | * or something > len if we didn't find a null byte. | ||
333 | * | ||
334 | * The `top' parameter to __strnlen_user is to make sure that | ||
335 | * we can never overflow from the user area into kernel space. | ||
336 | */ | ||
337 | static inline long strnlen_user(const char __user *str, long len) | ||
338 | { | ||
339 | unsigned long top = (unsigned long)get_fs(); | ||
340 | unsigned long res = 0; | ||
341 | |||
342 | if (__addr_ok(str)) | ||
343 | res = __strnlen_user(str, len, top); | ||
344 | |||
345 | return res; | ||
346 | } | ||
347 | |||
348 | #define strlen_user(str) strnlen_user(str, TASK_SIZE-1) | ||
349 | 323 | ||
350 | #endif /* __ASM_OPENRISC_UACCESS_H */ | 324 | #endif /* __ASM_OPENRISC_UACCESS_H */ |