Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc
Pull sparc changes from David S. Miller: "This has the generic strncpy_from_user() implementation architectures can now use, which we've been developing on linux-arch over the past few days. For good measure I ran both a 32-bit and a 64-bit glibc testsuite run, and the latter of which pointed out an adjustment I needed to make to sparc's user_addr_max() definition. Linus, you were right, STACK_TOP was not the right thing to use, even on sparc itself :-) From Sam Ravnborg, we have a conversion of sparc32 over to the common alloc_thread_info_node(), since the aspect which originally blocked our doing so (sun4c) has been removed." Fix up trivial arch/sparc/Kconfig and lib/Makefile conflicts. * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc: sparc: Fix user_addr_max() definition. lib: Sparc's strncpy_from_user is generic enough, move under lib/ kernel: Move REPEAT_BYTE definition into linux/kernel.h sparc: Increase portability of strncpy_from_user() implementation. sparc: Optimize strncpy_from_user() zero byte search. sparc: Add full proper error handling to strncpy_from_user(). sparc32: use the common implementation of alloc_thread_info_node()
This commit is contained in:
@@ -42,7 +42,9 @@
|
||||
#define TASK_SIZE_OF(tsk) \
|
||||
(test_tsk_thread_flag(tsk,TIF_32BIT) ? \
|
||||
(1UL << 32UL) : ((unsigned long)-VPTE_SIZE))
|
||||
#define TASK_SIZE TASK_SIZE_OF(current)
|
||||
#define TASK_SIZE \
|
||||
(test_thread_flag(TIF_32BIT) ? \
|
||||
(1UL << 32UL) : ((unsigned long)-VPTE_SIZE))
|
||||
#ifdef __KERNEL__
|
||||
|
||||
#define STACK_TOP32 ((1UL << 32UL) - PAGE_SIZE)
|
||||
|
@@ -77,18 +77,11 @@ register struct thread_info *current_thread_info_reg asm("g6");
|
||||
/*
|
||||
* thread information allocation
|
||||
*/
|
||||
#define THREAD_INFO_ORDER 1
|
||||
|
||||
struct thread_info * alloc_thread_info_node(struct task_struct *tsk, int node);
|
||||
void free_thread_info(struct thread_info *);
|
||||
#define THREAD_SIZE_ORDER 1
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
/*
|
||||
* Size of kernel stack for each process.
|
||||
* Observe the order of get_free_pages() in alloc_thread_info_node().
|
||||
* The sun4 has 8K stack too, because it's short on memory, and 16K is a waste.
|
||||
*/
|
||||
/* Size of kernel stack for each process */
|
||||
#define THREAD_SIZE (2 * PAGE_SIZE)
|
||||
|
||||
/*
|
||||
|
@@ -5,4 +5,10 @@
|
||||
#else
|
||||
#include <asm/uaccess_32.h>
|
||||
#endif
|
||||
|
||||
#define user_addr_max() \
|
||||
(segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL)
|
||||
|
||||
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);
|
||||
|
||||
|
Reference in New Issue
Block a user