Merge branches 'uaccess.alpha', 'uaccess.arc', 'uaccess.arm', 'uaccess.arm64', 'uaccess.avr32', 'uaccess.bfin', 'uaccess.c6x', 'uaccess.cris', 'uaccess.frv', 'uaccess.h8300', 'uaccess.hexagon', 'uaccess.ia64', 'uaccess.m32r', 'uaccess.m68k', 'uaccess.metag', 'uaccess.microblaze', 'uaccess.mips', 'uaccess.mn10300', 'uaccess.nios2', 'uaccess.openrisc', 'uaccess.parisc', 'uaccess.powerpc', 'uaccess.s390', 'uaccess.score', 'uaccess.sh', 'uaccess.sparc', 'uaccess.tile', 'uaccess.um', 'uaccess.unicore32', 'uaccess.x86' and 'uaccess.xtensa' into work.uaccess
This commit is contained in:

orang tua
bf7af0cea8
ec022681a4
e13909a4ac
4de5b63e76
92430dab36
e5c1540030
50e9ab915a
86944ee158
0c7e9a870e
48f666c986
33ab2da801
ac4691fac8
b3622d3217
9a677341cd
29be02eb6f
840db3f938
d491afb865
2260ea86c0
19dbf70c5a
de51d6cc2c
ab89866be3
f64fd180ec
3448890c32
37096003c8
dc14253523
f98f48ee7c
31af2f36d5
23504bae7f
a668ce3a00
2ef59f2856
beba3a20bf
7d4914db8f
melakukan
eea86b637a
@@ -13,6 +13,7 @@ config UML
|
||||
select GENERIC_CLOCKEVENTS
|
||||
select HAVE_GCC_PLUGINS
|
||||
select TTY # Needed for line.c
|
||||
select ARCH_HAS_RAW_COPY_USER
|
||||
|
||||
config MMU
|
||||
bool
|
||||
|
@@ -6,6 +6,7 @@ generic-y += delay.h
|
||||
generic-y += device.h
|
||||
generic-y += emergency-restart.h
|
||||
generic-y += exec.h
|
||||
generic-y += extable.h
|
||||
generic-y += ftrace.h
|
||||
generic-y += futex.h
|
||||
generic-y += hardirq.h
|
||||
|
@@ -8,6 +8,7 @@
|
||||
#ifndef __UM_PGTABLE_2LEVEL_H
|
||||
#define __UM_PGTABLE_2LEVEL_H
|
||||
|
||||
#define __ARCH_USE_5LEVEL_HACK
|
||||
#include <asm-generic/pgtable-nopmd.h>
|
||||
|
||||
/* PGDIR_SHIFT determines what a third-level page table entry can map */
|
||||
|
@@ -7,6 +7,7 @@
|
||||
#ifndef __UM_PGTABLE_3LEVEL_H
|
||||
#define __UM_PGTABLE_3LEVEL_H
|
||||
|
||||
#define __ARCH_USE_5LEVEL_HACK
|
||||
#include <asm-generic/pgtable-nopud.h>
|
||||
|
||||
/* PGDIR_SHIFT determines what a third-level page table entry can map */
|
||||
|
@@ -7,7 +7,6 @@
|
||||
#ifndef __UM_UACCESS_H
|
||||
#define __UM_UACCESS_H
|
||||
|
||||
#include <asm/thread_info.h>
|
||||
#include <asm/elf.h>
|
||||
|
||||
#define __under_task_size(addr, size) \
|
||||
@@ -22,8 +21,8 @@
|
||||
#define __addr_range_nowrap(addr, size) \
|
||||
((unsigned long) (addr) <= ((unsigned long) (addr) + (size)))
|
||||
|
||||
extern long __copy_from_user(void *to, const void __user *from, unsigned long n);
|
||||
extern long __copy_to_user(void __user *to, const void *from, unsigned long n);
|
||||
extern unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n);
|
||||
extern unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n);
|
||||
extern long __strncpy_from_user(char *dst, const char __user *src, long count);
|
||||
extern long __strnlen_user(const void __user *str, long len);
|
||||
extern unsigned long __clear_user(void __user *mem, unsigned long len);
|
||||
@@ -32,12 +31,10 @@ static inline int __access_ok(unsigned long addr, unsigned long size);
|
||||
/* Teach asm-generic/uaccess.h that we have C functions for these. */
|
||||
#define __access_ok __access_ok
|
||||
#define __clear_user __clear_user
|
||||
#define __copy_to_user __copy_to_user
|
||||
#define __copy_from_user __copy_from_user
|
||||
#define __strnlen_user __strnlen_user
|
||||
#define __strncpy_from_user __strncpy_from_user
|
||||
#define __copy_to_user_inatomic __copy_to_user
|
||||
#define __copy_from_user_inatomic __copy_from_user
|
||||
#define INLINE_COPY_FROM_USER
|
||||
#define INLINE_COPY_TO_USER
|
||||
|
||||
#include <asm-generic/uaccess.h>
|
||||
|
||||
@@ -46,7 +43,7 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
|
||||
return __addr_range_nowrap(addr, size) &&
|
||||
(__under_task_size(addr, size) ||
|
||||
__access_ok_vsyscall(addr, size) ||
|
||||
segment_eq(get_fs(), KERNEL_DS));
|
||||
uaccess_kernel());
|
||||
}
|
||||
|
||||
#endif
|
||||
|
@@ -139,16 +139,16 @@ static int copy_chunk_from_user(unsigned long from, int len, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
long __copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n)
|
||||
{
|
||||
if (segment_eq(get_fs(), KERNEL_DS)) {
|
||||
if (uaccess_kernel()) {
|
||||
memcpy(to, (__force void*)from, n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return buffer_op((unsigned long) from, n, 0, copy_chunk_from_user, &to);
|
||||
}
|
||||
EXPORT_SYMBOL(__copy_from_user);
|
||||
EXPORT_SYMBOL(raw_copy_from_user);
|
||||
|
||||
static int copy_chunk_to_user(unsigned long to, int len, void *arg)
|
||||
{
|
||||
@@ -159,16 +159,16 @@ static int copy_chunk_to_user(unsigned long to, int len, void *arg)
|
||||
return 0;
|
||||
}
|
||||
|
||||
long __copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n)
|
||||
{
|
||||
if (segment_eq(get_fs(), KERNEL_DS)) {
|
||||
if (uaccess_kernel()) {
|
||||
memcpy((__force void *) to, from, n);
|
||||
return 0;
|
||||
}
|
||||
|
||||
return buffer_op((unsigned long) to, n, 1, copy_chunk_to_user, &from);
|
||||
}
|
||||
EXPORT_SYMBOL(__copy_to_user);
|
||||
EXPORT_SYMBOL(raw_copy_to_user);
|
||||
|
||||
static int strncpy_chunk_from_user(unsigned long from, int len, void *arg)
|
||||
{
|
||||
@@ -189,7 +189,7 @@ long __strncpy_from_user(char *dst, const char __user *src, long count)
|
||||
long n;
|
||||
char *ptr = dst;
|
||||
|
||||
if (segment_eq(get_fs(), KERNEL_DS)) {
|
||||
if (uaccess_kernel()) {
|
||||
strncpy(dst, (__force void *) src, count);
|
||||
return strnlen(dst, count);
|
||||
}
|
||||
@@ -210,7 +210,7 @@ static int clear_chunk(unsigned long addr, int len, void *unused)
|
||||
|
||||
unsigned long __clear_user(void __user *mem, unsigned long len)
|
||||
{
|
||||
if (segment_eq(get_fs(), KERNEL_DS)) {
|
||||
if (uaccess_kernel()) {
|
||||
memset((__force void*)mem, 0, len);
|
||||
return 0;
|
||||
}
|
||||
@@ -235,7 +235,7 @@ long __strnlen_user(const void __user *str, long len)
|
||||
{
|
||||
int count = 0, n;
|
||||
|
||||
if (segment_eq(get_fs(), KERNEL_DS))
|
||||
if (uaccess_kernel())
|
||||
return strnlen((__force char*)str, len) + 1;
|
||||
|
||||
n = buffer_op((unsigned long) str, len, 0, strnlen_chunk, &count);
|
||||
|
Reference in New Issue
Block a user