Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
fcd93c96
Commit
fcd93c96
authored
Apr 16, 2004
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
bk://bk.arm.linux.org.uk/linux-2.6-rmk
into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents
71aa96e9
6819f2cb
Changes
9
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
108 additions
and
71 deletions
+108
-71
arch/arm/Makefile
arch/arm/Makefile
+1
-1
arch/arm/boot/compressed/Makefile
arch/arm/boot/compressed/Makefile
+1
-1
arch/arm/kernel/armksyms.c
arch/arm/kernel/armksyms.c
+0
-3
arch/arm/kernel/ptrace.c
arch/arm/kernel/ptrace.c
+10
-10
arch/arm/kernel/signal.c
arch/arm/kernel/signal.c
+16
-16
arch/arm/kernel/sys_arm.c
arch/arm/kernel/sys_arm.c
+22
-20
arch/arm/mm/alignment.c
arch/arm/mm/alignment.c
+2
-2
arch/arm/tools/mach-types
arch/arm/tools/mach-types
+41
-3
include/asm-arm/uaccess.h
include/asm-arm/uaccess.h
+15
-15
No files found.
arch/arm/Makefile
View file @
fcd93c96
...
...
@@ -7,7 +7,7 @@
#
# Copyright (C) 1995-2001 by Russell King
LDFLAGS_vmlinux
:=
-p
-X
LDFLAGS_vmlinux
:=
-p
-
-no-undefined
-
X
LDFLAGS_BLOB
:=
--format
binary
AFLAGS_vmlinux.lds.o
=
-DTEXTADDR
=
$(TEXTADDR)
-DDATAADDR
=
$(DATAADDR)
OBJCOPYFLAGS
:=
-O
binary
-R
.note
-R
.comment
-S
...
...
arch/arm/boot/compressed/Makefile
View file @
fcd93c96
...
...
@@ -66,7 +66,7 @@ targets := vmlinux vmlinux.lds piggy piggy.gz piggy.o \
EXTRA_CFLAGS
:=
-fpic
EXTRA_AFLAGS
:=
LDFLAGS_vmlinux
:=
-p
-X
\
LDFLAGS_vmlinux
:=
-p
-
-no-undefined
-
X
\
$(
shell
$(CC)
$(CFLAGS)
--print-libgcc-file-name
)
-T
$(obj)/vmlinux
:
$(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o
\
...
...
arch/arm/kernel/armksyms.c
View file @
fcd93c96
...
...
@@ -73,8 +73,6 @@ extern void fp_init(union fp_state *);
* This has a special calling convention; it doesn't
* modify any of the usual registers, except for LR.
*/
extern
void
__do_softirq
(
void
);
#define EXPORT_SYMBOL_ALIAS(sym,orig) \
const struct kernel_symbol __ksymtab_##sym \
__attribute__((section("__ksymtab"))) = \
...
...
@@ -88,7 +86,6 @@ EXPORT_SYMBOL_ALIAS(kern_fp_enter,fp_enter);
EXPORT_SYMBOL_ALIAS
(
fp_printk
,
printk
);
EXPORT_SYMBOL_ALIAS
(
fp_send_sig
,
send_sig
);
EXPORT_SYMBOL_NOVERS
(
__do_softirq
);
EXPORT_SYMBOL_NOVERS
(
__backtrace
);
/* platform dependent support */
...
...
arch/arm/kernel/ptrace.c
View file @
fcd93c96
...
...
@@ -526,7 +526,7 @@ core_initcall(ptrace_break_init);
* actually access the pt_regs stored on the kernel stack.
*/
static
int
ptrace_read_user
(
struct
task_struct
*
tsk
,
unsigned
long
off
,
unsigned
long
*
ret
)
unsigned
long
__user
*
ret
)
{
unsigned
long
tmp
;
...
...
@@ -559,7 +559,7 @@ static int ptrace_write_user(struct task_struct *tsk, unsigned long off,
/*
* Get all user integer registers.
*/
static
int
ptrace_getregs
(
struct
task_struct
*
tsk
,
void
*
uregs
)
static
int
ptrace_getregs
(
struct
task_struct
*
tsk
,
void
__user
*
uregs
)
{
struct
pt_regs
*
regs
=
get_user_regs
(
tsk
);
...
...
@@ -569,7 +569,7 @@ static int ptrace_getregs(struct task_struct *tsk, void *uregs)
/*
* Set all user integer registers.
*/
static
int
ptrace_setregs
(
struct
task_struct
*
tsk
,
void
*
uregs
)
static
int
ptrace_setregs
(
struct
task_struct
*
tsk
,
void
__user
*
uregs
)
{
struct
pt_regs
newregs
;
int
ret
;
...
...
@@ -591,7 +591,7 @@ static int ptrace_setregs(struct task_struct *tsk, void *uregs)
/*
* Get the child FPU state.
*/
static
int
ptrace_getfpregs
(
struct
task_struct
*
tsk
,
void
*
ufp
)
static
int
ptrace_getfpregs
(
struct
task_struct
*
tsk
,
void
__user
*
ufp
)
{
return
copy_to_user
(
ufp
,
&
tsk
->
thread_info
->
fpstate
,
sizeof
(
struct
user_fp
))
?
-
EFAULT
:
0
;
...
...
@@ -600,7 +600,7 @@ static int ptrace_getfpregs(struct task_struct *tsk, void *ufp)
/*
* Set the child FPU state.
*/
static
int
ptrace_setfpregs
(
struct
task_struct
*
tsk
,
void
*
ufp
)
static
int
ptrace_setfpregs
(
struct
task_struct
*
tsk
,
void
__user
*
ufp
)
{
struct
thread_info
*
thread
=
tsk
->
thread_info
;
thread
->
used_cp
[
1
]
=
thread
->
used_cp
[
2
]
=
1
;
...
...
@@ -628,7 +628,7 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
break
;
case
PTRACE_PEEKUSR
:
ret
=
ptrace_read_user
(
child
,
addr
,
(
unsigned
long
*
)
data
);
ret
=
ptrace_read_user
(
child
,
addr
,
(
unsigned
long
__user
*
)
data
);
break
;
/*
...
...
@@ -704,19 +704,19 @@ static int do_ptrace(int request, struct task_struct *child, long addr, long dat
break
;
case
PTRACE_GETREGS
:
ret
=
ptrace_getregs
(
child
,
(
void
*
)
data
);
ret
=
ptrace_getregs
(
child
,
(
void
__user
*
)
data
);
break
;
case
PTRACE_SETREGS
:
ret
=
ptrace_setregs
(
child
,
(
void
*
)
data
);
ret
=
ptrace_setregs
(
child
,
(
void
__user
*
)
data
);
break
;
case
PTRACE_GETFPREGS
:
ret
=
ptrace_getfpregs
(
child
,
(
void
*
)
data
);
ret
=
ptrace_getfpregs
(
child
,
(
void
__user
*
)
data
);
break
;
case
PTRACE_SETFPREGS
:
ret
=
ptrace_setfpregs
(
child
,
(
void
*
)
data
);
ret
=
ptrace_setfpregs
(
child
,
(
void
__user
*
)
data
);
break
;
default:
...
...
arch/arm/kernel/signal.c
View file @
fcd93c96
...
...
@@ -76,7 +76,7 @@ asmlinkage int sys_sigsuspend(int restart, unsigned long oldmask, old_sigset_t m
}
asmlinkage
int
sys_rt_sigsuspend
(
sigset_t
*
unewset
,
size_t
sigsetsize
,
struct
pt_regs
*
regs
)
sys_rt_sigsuspend
(
sigset_t
__user
*
unewset
,
size_t
sigsetsize
,
struct
pt_regs
*
regs
)
{
sigset_t
saveset
,
newset
;
...
...
@@ -104,8 +104,8 @@ sys_rt_sigsuspend(sigset_t *unewset, size_t sigsetsize, struct pt_regs *regs)
}
asmlinkage
int
sys_sigaction
(
int
sig
,
const
struct
old_sigaction
*
act
,
struct
old_sigaction
*
oact
)
sys_sigaction
(
int
sig
,
const
struct
old_sigaction
__user
*
act
,
struct
old_sigaction
__user
*
oact
)
{
struct
k_sigaction
new_ka
,
old_ka
;
int
ret
;
...
...
@@ -147,15 +147,15 @@ struct sigframe
struct
rt_sigframe
{
struct
siginfo
*
pinfo
;
void
*
puc
;
struct
siginfo
__user
*
pinfo
;
void
__user
*
puc
;
struct
siginfo
info
;
struct
ucontext
uc
;
unsigned
long
retcode
;
};
static
int
restore_sigcontext
(
struct
pt_regs
*
regs
,
struct
sigcontext
*
sc
)
restore_sigcontext
(
struct
pt_regs
*
regs
,
struct
sigcontext
__user
*
sc
)
{
int
err
=
0
;
...
...
@@ -184,7 +184,7 @@ restore_sigcontext(struct pt_regs *regs, struct sigcontext *sc)
asmlinkage
int
sys_sigreturn
(
struct
pt_regs
*
regs
)
{
struct
sigframe
*
frame
;
struct
sigframe
__user
*
frame
;
sigset_t
set
;
/* Always make any pending restarted system calls return -EINTR */
...
...
@@ -198,7 +198,7 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
if
(
regs
->
ARM_sp
&
7
)
goto
badframe
;
frame
=
(
struct
sigframe
*
)
regs
->
ARM_sp
;
frame
=
(
struct
sigframe
__user
*
)
regs
->
ARM_sp
;
if
(
verify_area
(
VERIFY_READ
,
frame
,
sizeof
(
*
frame
)))
goto
badframe
;
...
...
@@ -232,7 +232,7 @@ asmlinkage int sys_sigreturn(struct pt_regs *regs)
asmlinkage
int
sys_rt_sigreturn
(
struct
pt_regs
*
regs
)
{
struct
rt_sigframe
*
frame
;
struct
rt_sigframe
__user
*
frame
;
sigset_t
set
;
/* Always make any pending restarted system calls return -EINTR */
...
...
@@ -246,7 +246,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
if
(
regs
->
ARM_sp
&
7
)
goto
badframe
;
frame
=
(
struct
rt_sigframe
*
)
regs
->
ARM_sp
;
frame
=
(
struct
rt_sigframe
__user
*
)
regs
->
ARM_sp
;
if
(
verify_area
(
VERIFY_READ
,
frame
,
sizeof
(
*
frame
)))
goto
badframe
;
...
...
@@ -276,7 +276,7 @@ asmlinkage int sys_rt_sigreturn(struct pt_regs *regs)
}
static
int
setup_sigcontext
(
struct
sigcontext
*
sc
,
/*struct _fpstate *fpstate,*/
setup_sigcontext
(
struct
sigcontext
__user
*
sc
,
/*struct _fpstate *fpstate,*/
struct
pt_regs
*
regs
,
unsigned
long
mask
)
{
int
err
=
0
;
...
...
@@ -307,7 +307,7 @@ setup_sigcontext(struct sigcontext *sc, /*struct _fpstate *fpstate,*/
return
err
;
}
static
inline
void
*
static
inline
void
__user
*
get_sigframe
(
struct
k_sigaction
*
ka
,
struct
pt_regs
*
regs
,
int
framesize
)
{
unsigned
long
sp
=
regs
->
ARM_sp
;
...
...
@@ -321,12 +321,12 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, int framesize)
/*
* ATPCS B01 mandates 8-byte alignment
*/
return
(
void
*
)((
sp
-
framesize
)
&
~
7
);
return
(
void
__user
*
)((
sp
-
framesize
)
&
~
7
);
}
static
int
setup_return
(
struct
pt_regs
*
regs
,
struct
k_sigaction
*
ka
,
unsigned
long
*
rc
,
void
*
frame
,
int
usig
)
unsigned
long
__user
*
rc
,
void
__user
*
frame
,
int
usig
)
{
unsigned
long
handler
=
(
unsigned
long
)
ka
->
sa
.
sa_handler
;
unsigned
long
retcode
;
...
...
@@ -387,7 +387,7 @@ setup_return(struct pt_regs *regs, struct k_sigaction *ka,
static
int
setup_frame
(
int
usig
,
struct
k_sigaction
*
ka
,
sigset_t
*
set
,
struct
pt_regs
*
regs
)
{
struct
sigframe
*
frame
=
get_sigframe
(
ka
,
regs
,
sizeof
(
*
frame
));
struct
sigframe
__user
*
frame
=
get_sigframe
(
ka
,
regs
,
sizeof
(
*
frame
));
int
err
=
0
;
if
(
!
access_ok
(
VERIFY_WRITE
,
frame
,
sizeof
(
*
frame
)))
...
...
@@ -410,7 +410,7 @@ static int
setup_rt_frame
(
int
usig
,
struct
k_sigaction
*
ka
,
siginfo_t
*
info
,
sigset_t
*
set
,
struct
pt_regs
*
regs
)
{
struct
rt_sigframe
*
frame
=
get_sigframe
(
ka
,
regs
,
sizeof
(
*
frame
));
struct
rt_sigframe
__user
*
frame
=
get_sigframe
(
ka
,
regs
,
sizeof
(
*
frame
));
int
err
=
0
;
if
(
!
access_ok
(
VERIFY_WRITE
,
frame
,
sizeof
(
*
frame
)))
...
...
arch/arm/kernel/sys_arm.c
View file @
fcd93c96
...
...
@@ -37,7 +37,7 @@ extern unsigned long do_mremap(unsigned long addr, unsigned long old_len,
* sys_pipe() is the normal C calling standard for creating
* a pipe. It's not the way unix traditionally does this, though.
*/
asmlinkage
int
sys_pipe
(
unsigned
long
*
fildes
)
asmlinkage
int
sys_pipe
(
unsigned
long
__user
*
fildes
)
{
int
fd
[
2
];
int
error
;
...
...
@@ -94,7 +94,7 @@ struct mmap_arg_struct {
unsigned
long
offset
;
};
asmlinkage
int
old_mmap
(
struct
mmap_arg_struct
*
arg
)
asmlinkage
int
old_mmap
(
struct
mmap_arg_struct
__user
*
arg
)
{
int
error
=
-
EFAULT
;
struct
mmap_arg_struct
a
;
...
...
@@ -141,11 +141,11 @@ sys_arm_mremap(unsigned long addr, unsigned long old_len,
struct
sel_arg_struct
{
unsigned
long
n
;
fd_set
*
inp
,
*
outp
,
*
exp
;
struct
timeval
*
tvp
;
fd_set
__user
*
inp
,
*
outp
,
*
exp
;
struct
timeval
__user
*
tvp
;
};
asmlinkage
int
old_select
(
struct
sel_arg_struct
*
arg
)
asmlinkage
int
old_select
(
struct
sel_arg_struct
__user
*
arg
)
{
struct
sel_arg_struct
a
;
...
...
@@ -160,7 +160,8 @@ asmlinkage int old_select(struct sel_arg_struct *arg)
*
* This is really horribly ugly.
*/
asmlinkage
int
sys_ipc
(
uint
call
,
int
first
,
int
second
,
int
third
,
void
*
ptr
,
long
fifth
)
asmlinkage
int
sys_ipc
(
uint
call
,
int
first
,
int
second
,
int
third
,
void
__user
*
ptr
,
long
fifth
)
{
int
version
,
ret
;
...
...
@@ -169,28 +170,28 @@ asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr,
switch
(
call
)
{
case
SEMOP
:
return
sys_semop
(
first
,
(
struct
sembuf
*
)
ptr
,
second
);
return
sys_semop
(
first
,
(
struct
sembuf
__user
*
)
ptr
,
second
);
case
SEMGET
:
return
sys_semget
(
first
,
second
,
third
);
case
SEMCTL
:
{
union
semun
fourth
;
if
(
!
ptr
)
return
-
EINVAL
;
if
(
get_user
(
fourth
.
__pad
,
(
void
**
)
ptr
))
if
(
get_user
(
fourth
.
__pad
,
(
void
__user
**
)
ptr
))
return
-
EFAULT
;
return
sys_semctl
(
first
,
second
,
third
,
fourth
);
}
case
MSGSND
:
return
sys_msgsnd
(
first
,
(
struct
msgbuf
*
)
ptr
,
second
,
third
);
return
sys_msgsnd
(
first
,
(
struct
msgbuf
__user
*
)
ptr
,
second
,
third
);
case
MSGRCV
:
switch
(
version
)
{
case
0
:
{
struct
ipc_kludge
tmp
;
if
(
!
ptr
)
return
-
EINVAL
;
if
(
copy_from_user
(
&
tmp
,(
struct
ipc_kludge
*
)
ptr
,
if
(
copy_from_user
(
&
tmp
,(
struct
ipc_kludge
__user
*
)
ptr
,
sizeof
(
tmp
)))
return
-
EFAULT
;
return
sys_msgrcv
(
first
,
tmp
.
msgp
,
second
,
...
...
@@ -198,36 +199,36 @@ asmlinkage int sys_ipc (uint call, int first, int second, int third, void *ptr,
}
default:
return
sys_msgrcv
(
first
,
(
struct
msgbuf
*
)
ptr
,
(
struct
msgbuf
__user
*
)
ptr
,
second
,
fifth
,
third
);
}
case
MSGGET
:
return
sys_msgget
((
key_t
)
first
,
second
);
case
MSGCTL
:
return
sys_msgctl
(
first
,
second
,
(
struct
msqid_ds
*
)
ptr
);
return
sys_msgctl
(
first
,
second
,
(
struct
msqid_ds
__user
*
)
ptr
);
case
SHMAT
:
switch
(
version
)
{
default:
{
ulong
raddr
;
ret
=
do_shmat
(
first
,
(
char
*
)
ptr
,
second
,
&
raddr
);
ret
=
do_shmat
(
first
,
(
char
__user
*
)
ptr
,
second
,
&
raddr
);
if
(
ret
)
return
ret
;
return
put_user
(
raddr
,
(
ulong
*
)
third
);
return
put_user
(
raddr
,
(
ulong
__user
*
)
third
);
}
case
1
:
/* iBCS2 emulator entry point */
if
(
!
segment_eq
(
get_fs
(),
get_ds
()))
return
-
EINVAL
;
return
do_shmat
(
first
,
(
cha
r
*
)
ptr
,
second
,
(
ulong
*
)
third
);
return
do_shmat
(
first
,
(
char
__use
r
*
)
ptr
,
second
,
(
ulong
__user
*
)
third
);
}
case
SHMDT
:
return
sys_shmdt
((
char
*
)
ptr
);
return
sys_shmdt
((
char
__user
*
)
ptr
);
case
SHMGET
:
return
sys_shmget
(
first
,
second
,
third
);
case
SHMCTL
:
return
sys_shmctl
(
first
,
second
,
(
struct
shmid_ds
*
)
ptr
);
(
struct
shmid_ds
__user
*
)
ptr
);
default:
return
-
ENOSYS
;
}
...
...
@@ -266,7 +267,8 @@ asmlinkage int sys_vfork(struct pt_regs *regs)
/* sys_execve() executes a new program.
* This is called indirectly via a small wrapper
*/
asmlinkage
int
sys_execve
(
char
*
filenamei
,
char
**
argv
,
char
**
envp
,
struct
pt_regs
*
regs
)
asmlinkage
int
sys_execve
(
char
__user
*
filenamei
,
char
__user
*
__user
*
argv
,
char
__user
*
__user
*
envp
,
struct
pt_regs
*
regs
)
{
int
error
;
char
*
filename
;
...
...
arch/arm/mm/alignment.c
View file @
fcd93c96
...
...
@@ -112,10 +112,10 @@ proc_alignment_read(char *page, char **start, off_t off, int count, int *eof,
return
len
;
}
static
int
proc_alignment_write
(
struct
file
*
file
,
const
char
*
buffer
,
static
int
proc_alignment_write
(
struct
file
*
file
,
const
char
__user
*
buffer
,
unsigned
long
count
,
void
*
data
)
{
int
mode
;
char
mode
;
if
(
count
>
0
)
{
if
(
get_user
(
mode
,
buffer
))
...
...
arch/arm/tools/mach-types
View file @
fcd93c96
...
...
@@ -6,7 +6,7 @@
# To add an entry into this database, please see Documentation/arm/README,
# or contact rmk@arm.linux.org.uk
#
# Last update:
Sat Mar 13 14:36:30
2004
# Last update:
Thu Apr 15 10:14:37
2004
#
# machine_is_xxx CONFIG_xxxx MACH_TYPE_xxx number
#
...
...
@@ -390,9 +390,9 @@ espd_4510b ARCH_ESPD_4510B ESPD_4510B 378
mp1x ARCH_MP1X MP1X 379
at91rm9200tb ARCH_AT91RM9200TB AT91RM9200TB 380
adsvgx ARCH_ADSVGX ADSVGX 381
omap
1610 ARCH_OMAP1610 OMAP1610
382
omap
_h2 ARCH_OMAP_H2 OMAP_H2
382
pelee ARCH_PELEE PELEE 383
e7
xx ARCH_E7XX E7XX
384
e7
40 MACH_E740 E740
384
iq80331 ARCH_IQ80331 IQ80331 385
versatile_pb ARCH_VERSATILE_PB VERSATILE_PB 387
kev7a400 MACH_KEV7A400 KEV7A400 388
...
...
@@ -485,3 +485,41 @@ phoenix MACH_PHOENIX PHOENIX 474
vr1000 MACH_VR1000 VR1000 475
deisterpxa MACH_DEISTERPXA DEISTERPXA 476
bcm1160 MACH_BCM1160 BCM1160 477
pcm022 MACH_PCM022 PCM022 478
adsgcx MACH_ADSGCX ADSGCX 479
dreadnaught MACH_DREADNAUGHT DREADNAUGHT 480
dm320 MACH_DM320 DM320 481
markov MACH_MARKOV MARKOV 482
cos7a400 MACH_COS7A400 COS7A400 483
milano MACH_MILANO MILANO 484
ue9328 MACH_UE9328 UE9328 485
uex255 MACH_UEX255 UEX255 486
ue2410 MACH_UE2410 UE2410 487
a620 MACH_A620 A620 488
ocelot MACH_OCELOT OCELOT 489
cheetah MACH_CHEETAH CHEETAH 490
omap_perseus2 MACH_OMAP_PERSEUS2 OMAP_PERSEUS2 491
zvue MACH_ZVUE ZVUE 492
roverp1 MACH_ROVERP1 ROVERP1 493
asidial2 MACH_ASIDIAL2 ASIDIAL2 494
s3c24a0 MACH_S3C24A0 S3C24A0 495
e800 MACH_E800 E800 496
e750 MACH_E750 E750 497
s3c5500 MACH_S3C5500 S3C5500 498
smdk5500 MACH_SMDK5500 SMDK5500 499
signalsync MACH_SIGNALSYNC SIGNALSYNC 500
nbc MACH_NBC NBC 501
er4525 MACH_ER4525 ER4525 502
netbookpro MACH_NETBOOKPRO NETBOOKPRO 503
hw90200 MACH_HW90200 HW90200 504
condor MACH_CONDOR CONDOR 505
cup MACH_CUP CUP 506
kite MACH_KITE KITE 507
scb9328 MACH_SCB9328 SCB9328 508
omap_h3 MACH_OMAP_H3 OMAP_H3 509
omap_h4 MACH_OMAP_H4 OMAP_H4 510
n10 MACH_N10 N10 511
montajade MACH_MONTAJADE MONTAJADE 512
sg560 MACH_SG560 SG560 513
dp1000 MACH_DP1000 DP1000 514
omap_osk MACH_OMAP_OSK OMAP_OSK 515
include/asm-arm/uaccess.h
View file @
fcd93c96
...
...
@@ -75,7 +75,7 @@ static inline void set_fs (mm_segment_t fs)
#define access_ok(type,addr,size) (__range_ok(addr,size) == 0)
static
inline
int
verify_area
(
int
type
,
const
void
*
addr
,
unsigned
long
size
)
static
inline
int
verify_area
(
int
type
,
const
void
__user
*
addr
,
unsigned
long
size
)
{
return
access_ok
(
type
,
addr
,
size
)
?
0
:
-
EFAULT
;
}
...
...
@@ -354,13 +354,13 @@ do { \
: "r" (x), "i" (-EFAULT) \
: "cc")
extern
unsigned
long
__arch_copy_from_user
(
void
*
to
,
const
void
*
from
,
unsigned
long
n
);
extern
unsigned
long
__arch_copy_to_user
(
void
*
to
,
const
void
*
from
,
unsigned
long
n
);
extern
unsigned
long
__arch_clear_user
(
void
*
addr
,
unsigned
long
n
);
extern
unsigned
long
__arch_strncpy_from_user
(
char
*
to
,
const
char
*
from
,
unsigned
long
count
);
extern
unsigned
long
__arch_strnlen_user
(
const
char
*
s
,
long
n
);
extern
unsigned
long
__arch_copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
unsigned
long
n
);
extern
unsigned
long
__arch_copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
unsigned
long
n
);
extern
unsigned
long
__arch_clear_user
(
void
__user
*
addr
,
unsigned
long
n
);
extern
unsigned
long
__arch_strncpy_from_user
(
char
*
to
,
const
char
__user
*
from
,
unsigned
long
count
);
extern
unsigned
long
__arch_strnlen_user
(
const
char
__user
*
s
,
long
n
);
static
__inline__
unsigned
long
copy_from_user
(
void
*
to
,
const
void
*
from
,
unsigned
long
n
)
static
inline
unsigned
long
copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
unsigned
long
n
)
{
if
(
access_ok
(
VERIFY_READ
,
from
,
n
))
n
=
__arch_copy_from_user
(
to
,
from
,
n
);
...
...
@@ -369,36 +369,36 @@ static __inline__ unsigned long copy_from_user(void *to, const void *from, unsig
return
n
;
}
static
__inline__
unsigned
long
__copy_from_user
(
void
*
to
,
const
void
*
from
,
unsigned
long
n
)
static
inline
unsigned
long
__copy_from_user
(
void
*
to
,
const
void
__user
*
from
,
unsigned
long
n
)
{
return
__arch_copy_from_user
(
to
,
from
,
n
);
}
static
__inline__
unsigned
long
copy_to_user
(
void
*
to
,
const
void
*
from
,
unsigned
long
n
)
static
inline
unsigned
long
copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
unsigned
long
n
)
{
if
(
access_ok
(
VERIFY_WRITE
,
to
,
n
))
n
=
__arch_copy_to_user
(
to
,
from
,
n
);
return
n
;
}
static
__inline__
unsigned
long
__copy_to_user
(
void
*
to
,
const
void
*
from
,
unsigned
long
n
)
static
inline
unsigned
long
__copy_to_user
(
void
__user
*
to
,
const
void
*
from
,
unsigned
long
n
)
{
return
__arch_copy_to_user
(
to
,
from
,
n
);
}
static
__inline__
unsigned
long
clear_user
(
void
*
to
,
unsigned
long
n
)
static
inline
unsigned
long
clear_user
(
void
__user
*
to
,
unsigned
long
n
)
{
if
(
access_ok
(
VERIFY_WRITE
,
to
,
n
))
n
=
__arch_clear_user
(
to
,
n
);
return
n
;
}
static
__inline__
unsigned
long
__clear_user
(
void
*
to
,
unsigned
long
n
)
static
inline
unsigned
long
__clear_user
(
void
__user
*
to
,
unsigned
long
n
)
{
return
__arch_clear_user
(
to
,
n
);
}
static
__inline__
long
strncpy_from_user
(
char
*
dst
,
const
cha
r
*
src
,
long
count
)
static
inline
long
strncpy_from_user
(
char
*
dst
,
const
char
__use
r
*
src
,
long
count
)
{
long
res
=
-
EFAULT
;
if
(
access_ok
(
VERIFY_READ
,
src
,
1
))
...
...
@@ -406,14 +406,14 @@ static __inline__ long strncpy_from_user (char *dst, const char *src, long count
return
res
;
}
static
__inline__
long
__strncpy_from_user
(
char
*
dst
,
const
cha
r
*
src
,
long
count
)
static
inline
long
__strncpy_from_user
(
char
*
dst
,
const
char
__use
r
*
src
,
long
count
)
{
return
__arch_strncpy_from_user
(
dst
,
src
,
count
);
}
#define strlen_user(s) strnlen_user(s, ~0UL >> 1)
static
inline
long
strnlen_user
(
const
char
*
s
,
long
n
)
static
inline
long
strnlen_user
(
const
char
__user
*
s
,
long
n
)
{
unsigned
long
res
=
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment