mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-06 06:21:31 +00:00
sparc: Add full proper error handling to strncpy_from_user().
Linus removed the end-of-address-space hackery from fs/namei.c:do_getname() so we really have to validate these edge conditions and cannot cheat any more (as x86 used to as well). Move to a common C implementation like x86 did. And if both src and dst are sufficiently aligned we'll do word at a time copies and checks as well. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
29af0ebaa2
commit
ff06dffbc8
8 changed files with 136 additions and 198 deletions
|
@ -5,4 +5,7 @@
|
|||
#else
|
||||
#include <asm/uaccess_32.h>
|
||||
#endif
|
||||
|
||||
extern long strncpy_from_user(char *dest, const char __user *src, long count);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -304,16 +304,6 @@ static inline unsigned long clear_user(void __user *addr, unsigned long n)
|
|||
return n;
|
||||
}
|
||||
|
||||
extern long __strncpy_from_user(char *dest, const char __user *src, long count);
|
||||
|
||||
static inline long strncpy_from_user(char *dest, const char __user *src, long count)
|
||||
{
|
||||
if (__access_ok((unsigned long) src, count))
|
||||
return __strncpy_from_user(dest, src, count);
|
||||
else
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
extern long __strlen_user(const char __user *);
|
||||
extern long __strnlen_user(const char __user *, long len);
|
||||
|
||||
|
|
|
@ -257,10 +257,6 @@ extern unsigned long __must_check __clear_user(void __user *, unsigned long);
|
|||
|
||||
#define clear_user __clear_user
|
||||
|
||||
extern long __must_check __strncpy_from_user(char *dest, const char __user *src, long count);
|
||||
|
||||
#define strncpy_from_user __strncpy_from_user
|
||||
|
||||
extern long __strlen_user(const char __user *);
|
||||
extern long __strnlen_user(const char __user *, long len);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue