Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

asm-generic headers: add arch-specific __strnlen_user calling in uaccess.h

This patch changes the implementation of strnlen_user in include/asm-generic/uaccess.h.
Originally, it calls strlen() function directly, which may not correctly handle the access of
user space in most mmu-enabled architectures.
New __strnlen_user is added for using as an architecture specific function.

Signed-off-by: Guan Xuetao <gxt@mprc.pku.edu.cn>
Reviewed-by: Arnd Bergmann <arnd@arndb.de>

+5 -3
+5 -3
include/asm-generic/uaccess.h
··· 288 288 * 289 289 * Return 0 on exception, a value greater than N if too long 290 290 */ 291 - #ifndef strnlen_user 291 + #ifndef __strnlen_user 292 + #define __strnlen_user strnlen 293 + #endif 294 + 292 295 static inline long strnlen_user(const char __user *src, long n) 293 296 { 294 297 if (!access_ok(VERIFY_READ, src, 1)) 295 298 return 0; 296 - return strlen((void * __force)src) + 1; 299 + return __strnlen_user(src, n); 297 300 } 298 - #endif 299 301 300 302 static inline long strlen_user(const char __user *src) 301 303 {