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
80be2217
Commit
80be2217
authored
May 19, 2002
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge
http://kernel-acme.bkbits.net:8080/char-copy_tofrom_user-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
parents
20131c10
2d7d1c4e
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
71 additions
and
75 deletions
+71
-75
drivers/char/epca.c
drivers/char/epca.c
+18
-31
drivers/char/istallion.c
drivers/char/istallion.c
+12
-3
drivers/char/machzwd.c
drivers/char/machzwd.c
+3
-8
drivers/char/mxser.c
drivers/char/mxser.c
+3
-3
drivers/char/n_r3964.c
drivers/char/n_r3964.c
+1
-1
drivers/char/nwflash.c
drivers/char/nwflash.c
+2
-1
drivers/char/raw.c
drivers/char/raw.c
+5
-2
drivers/char/stallion.c
drivers/char/stallion.c
+20
-16
drivers/char/sx.c
drivers/char/sx.c
+5
-2
drivers/char/tpqic02.c
drivers/char/tpqic02.c
+2
-8
No files found.
drivers/char/epca.c
View file @
80be2217
...
...
@@ -907,7 +907,9 @@ static int pc_write(struct tty_struct * tty, int from_user,
----------------------------------------------------------------- */
copy_from_user
(
ch
->
tmp_buf
,
buf
,
bytesAvailable
);
if
(
copy_from_user
(
ch
->
tmp_buf
,
buf
,
bytesAvailable
))
return
-
EFAULT
;
}
/* End if area verified */
...
...
@@ -2999,7 +3001,8 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
di
.
port
=
boards
[
brd
].
port
;
di
.
membase
=
boards
[
brd
].
membase
;
copy_to_user
((
char
*
)
arg
,
&
di
,
sizeof
(
di
));
if
(
copy_to_user
((
char
*
)
arg
,
&
di
,
sizeof
(
di
)))
return
-
EFAULT
;
break
;
}
/* End case DIGI_GETINFO */
...
...
@@ -3068,14 +3071,9 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
{
/* Begin switch cmd */
case
TCGETS
:
retval
=
verify_area
(
VERIFY_WRITE
,
(
void
*
)
arg
,
sizeof
(
struct
termios
));
if
(
retval
)
return
(
retval
);
copy_to_user
((
struct
termios
*
)
arg
,
tty
->
termios
,
sizeof
(
struct
termios
));
if
(
copy_to_user
((
struct
termios
*
)
arg
,
tty
->
termios
,
sizeof
(
struct
termios
)))
return
-
EFAULT
;
return
(
0
);
case
TCGETA
:
...
...
@@ -3235,14 +3233,9 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
break
;
case
DIGI_GETA
:
if
((
error
=
verify_area
(
VERIFY_WRITE
,
(
char
*
)
arg
,
sizeof
(
digi_t
))))
{
printk
(
KERN_ERR
"<Error> - Digi GETA failed
\n
"
);
return
(
error
);
}
copy_to_user
((
char
*
)
arg
,
&
ch
->
digiext
,
sizeof
(
digi_t
));
if
(
copy_to_user
((
char
*
)
arg
,
&
ch
->
digiext
,
sizeof
(
digi_t
)))
return
-
EFAULT
;
break
;
case
DIGI_SETAW
:
...
...
@@ -3263,11 +3256,9 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
/* Fall Thru */
case
DIGI_SETA
:
if
((
error
=
verify_area
(
VERIFY_READ
,
(
char
*
)
arg
,
sizeof
(
digi_t
))))
return
(
error
);
copy_from_user
(
&
ch
->
digiext
,
(
char
*
)
arg
,
sizeof
(
digi_t
));
if
(
copy_from_user
(
&
ch
->
digiext
,
(
char
*
)
arg
,
sizeof
(
digi_t
)))
return
-
EFAULT
;
if
(
ch
->
digiext
.
digi_flags
&
DIGI_ALTPIN
)
{
...
...
@@ -3310,10 +3301,8 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
memoff
(
ch
);
restore_flags
(
flags
);
if
((
error
=
verify_area
(
VERIFY_WRITE
,
(
char
*
)
arg
,
sizeof
(
dflow
))))
return
(
error
);
copy_to_user
((
char
*
)
arg
,
&
dflow
,
sizeof
(
dflow
));
if
(
copy_to_user
((
char
*
)
arg
,
&
dflow
,
sizeof
(
dflow
)))
return
-
EFAULT
;
break
;
case
DIGI_SETAFLOW
:
...
...
@@ -3329,10 +3318,8 @@ static int pc_ioctl(struct tty_struct *tty, struct file * file,
stopc
=
ch
->
stopca
;
}
if
((
error
=
verify_area
(
VERIFY_READ
,
(
char
*
)
arg
,
sizeof
(
dflow
))))
return
(
error
);
copy_from_user
(
&
dflow
,
(
char
*
)
arg
,
sizeof
(
dflow
));
if
(
copy_from_user
(
&
dflow
,
(
char
*
)
arg
,
sizeof
(
dflow
)))
return
-
EFAULT
;
if
(
dflow
.
startc
!=
startc
||
dflow
.
stopc
!=
stopc
)
{
/* Begin if setflow toggled */
...
...
drivers/char/istallion.c
View file @
80be2217
...
...
@@ -2022,7 +2022,8 @@ static int stli_setserial(stliport_t *portp, struct serial_struct *sp)
printk
(
"stli_setserial(portp=%x,sp=%x)
\n
"
,
(
int
)
portp
,
(
int
)
sp
);
#endif
copy_from_user
(
&
sio
,
sp
,
sizeof
(
struct
serial_struct
));
if
(
copy_from_user
(
&
sio
,
sp
,
sizeof
(
struct
serial_struct
)))
return
-
EFAULT
;
if
(
!
capable
(
CAP_SYS_ADMIN
))
{
if
((
sio
.
baud_base
!=
portp
->
baud_base
)
||
(
sio
.
close_delay
!=
portp
->
close_delay
)
||
...
...
@@ -4878,11 +4879,15 @@ static ssize_t stli_memread(struct file *fp, char *buf, size_t count, loff_t *of
while
(
size
>
0
)
{
memptr
=
(
void
*
)
EBRDGETMEMPTR
(
brdp
,
fp
->
f_pos
);
n
=
MIN
(
size
,
(
brdp
->
pagesize
-
(((
unsigned
long
)
fp
->
f_pos
)
%
brdp
->
pagesize
)));
copy_to_user
(
buf
,
memptr
,
n
);
if
(
copy_to_user
(
buf
,
memptr
,
n
))
{
count
=
-
EFAULT
;
goto
out
;
}
fp
->
f_pos
+=
n
;
buf
+=
n
;
size
-=
n
;
}
out:
EBRDDISABLE
(
brdp
);
restore_flags
(
flags
);
...
...
@@ -4930,11 +4935,15 @@ static ssize_t stli_memwrite(struct file *fp, const char *buf, size_t count, lof
while
(
size
>
0
)
{
memptr
=
(
void
*
)
EBRDGETMEMPTR
(
brdp
,
fp
->
f_pos
);
n
=
MIN
(
size
,
(
brdp
->
pagesize
-
(((
unsigned
long
)
fp
->
f_pos
)
%
brdp
->
pagesize
)));
copy_from_user
(
memptr
,
chbuf
,
n
);
if
(
copy_from_user
(
memptr
,
chbuf
,
n
))
{
count
=
-
EFAULT
;
goto
out
;
}
fp
->
f_pos
+=
n
;
chbuf
+=
n
;
size
-=
n
;
}
out:
EBRDDISABLE
(
brdp
);
restore_flags
(
flags
);
...
...
drivers/char/machzwd.c
View file @
80be2217
...
...
@@ -359,20 +359,15 @@ static ssize_t zf_read(struct file *file, char *buf, size_t count,
static
int
zf_ioctl
(
struct
inode
*
inode
,
struct
file
*
file
,
unsigned
int
cmd
,
unsigned
long
arg
)
{
int
ret
;
switch
(
cmd
){
case
WDIOC_GETSUPPORT
:
ret
=
copy_to_user
((
struct
watchdog_info
*
)
arg
,
&
zf_info
,
sizeof
(
zf_info
));
if
(
ret
)
if
(
copy_to_user
((
struct
watchdog_info
*
)
arg
,
&
zf_info
,
sizeof
(
zf_info
)))
return
-
EFAULT
;
break
;
case
WDIOC_GETSTATUS
:
ret
=
copy_to_user
((
int
*
)
arg
,
&
zf_is_open
,
sizeof
(
int
));
if
(
ret
)
if
(
copy_to_user
((
int
*
)
arg
,
&
zf_is_open
,
sizeof
(
int
)))
return
-
EFAULT
;
break
;
...
...
drivers/char/mxser.c
View file @
80be2217
...
...
@@ -2175,8 +2175,7 @@ static int mxser_get_serial_info(struct mxser_struct *info,
tmp
.
closing_wait
=
info
->
closing_wait
;
tmp
.
custom_divisor
=
info
->
custom_divisor
;
tmp
.
hub6
=
0
;
copy_to_user
(
retinfo
,
&
tmp
,
sizeof
(
*
retinfo
));
return
(
0
);
return
copy_to_user
(
retinfo
,
&
tmp
,
sizeof
(
*
retinfo
))
?
-
EFAULT
:
0
;
}
static
int
mxser_set_serial_info
(
struct
mxser_struct
*
info
,
...
...
@@ -2188,7 +2187,8 @@ static int mxser_set_serial_info(struct mxser_struct *info,
if
(
!
new_info
||
!
info
->
base
)
return
(
-
EFAULT
);
copy_from_user
(
&
new_serial
,
new_info
,
sizeof
(
new_serial
));
if
(
copy_from_user
(
&
new_serial
,
new_info
,
sizeof
(
new_serial
)))
return
-
EFAULT
;
if
((
new_serial
.
irq
!=
info
->
irq
)
||
(
new_serial
.
port
!=
info
->
base
)
||
...
...
drivers/char/n_r3964.c
View file @
80be2217
...
...
@@ -1364,7 +1364,7 @@ static ssize_t r3964_write(struct tty_struct * tty, struct file * file,
pHeader
->
owner
=
pClient
;
}
copy_from_user
(
pHeader
->
data
,
data
,
count
);
/* We already verified this */
__copy_from_user
(
pHeader
->
data
,
data
,
count
);
/* We already verified this */
if
(
pInfo
->
flags
&
R3964_DEBUG
)
{
...
...
drivers/char/nwflash.c
View file @
80be2217
...
...
@@ -159,7 +159,8 @@ static ssize_t flash_read(struct file *file, char *buf, size_t size, loff_t * pp
if
(
ret
==
0
)
{
ret
=
count
;
*
ppos
+=
count
;
}
}
else
ret
=
-
EFAULT
;
up
(
&
nwflash_sem
);
}
return
ret
;
...
...
drivers/char/raw.c
View file @
80be2217
...
...
@@ -163,9 +163,10 @@ int raw_ctl_ioctl(struct inode *inode,
/* First, find out which raw minor we want */
err
=
copy_from_user
(
&
rq
,
(
void
*
)
arg
,
sizeof
(
rq
));
if
(
err
)
if
(
copy_from_user
(
&
rq
,
(
void
*
)
arg
,
sizeof
(
rq
)))
{
err
=
-
EFAULT
;
break
;
}
minor
=
rq
.
raw_minor
;
if
(
minor
<=
0
||
minor
>
MINORMASK
)
{
...
...
@@ -222,6 +223,8 @@ int raw_ctl_ioctl(struct inode *inode,
rq
.
block_major
=
rq
.
block_minor
=
0
;
}
err
=
copy_to_user
((
void
*
)
arg
,
&
rq
,
sizeof
(
rq
));
if
(
err
)
err
=
-
EFAULT
;
}
break
;
...
...
drivers/char/stallion.c
View file @
80be2217
...
...
@@ -1553,7 +1553,8 @@ static int stl_setserial(stlport_t *portp, struct serial_struct *sp)
printk
(
"stl_setserial(portp=%x,sp=%x)
\n
"
,
(
int
)
portp
,
(
int
)
sp
);
#endif
copy_from_user
(
&
sio
,
sp
,
sizeof
(
struct
serial_struct
));
if
(
copy_from_user
(
&
sio
,
sp
,
sizeof
(
struct
serial_struct
)))
return
-
EFAULT
;
if
(
!
capable
(
CAP_SYS_ADMIN
))
{
if
((
sio
.
baud_base
!=
portp
->
baud_base
)
||
(
sio
.
close_delay
!=
portp
->
close_delay
)
||
...
...
@@ -2949,7 +2950,8 @@ static int stl_getbrdstats(combrd_t *bp)
stlpanel_t
*
panelp
;
int
i
;
copy_from_user
(
&
stl_brdstats
,
bp
,
sizeof
(
combrd_t
));
if
(
copy_from_user
(
&
stl_brdstats
,
bp
,
sizeof
(
combrd_t
)))
return
-
EFAULT
;
if
(
stl_brdstats
.
brd
>=
STL_MAXBRDS
)
return
(
-
ENODEV
);
brdp
=
stl_brds
[
stl_brdstats
.
brd
];
...
...
@@ -2973,8 +2975,7 @@ static int stl_getbrdstats(combrd_t *bp)
stl_brdstats
.
panels
[
i
].
nrports
=
panelp
->
nrports
;
}
copy_to_user
(
bp
,
&
stl_brdstats
,
sizeof
(
combrd_t
));
return
(
0
);
return
copy_to_user
(
bp
,
&
stl_brdstats
,
sizeof
(
combrd_t
))
?
-
EFAULT
:
0
;
}
/*****************************************************************************/
...
...
@@ -3017,7 +3018,8 @@ static int stl_getportstats(stlport_t *portp, comstats_t *cp)
unsigned
long
flags
;
if
(
portp
==
(
stlport_t
*
)
NULL
)
{
copy_from_user
(
&
stl_comstats
,
cp
,
sizeof
(
comstats_t
));
if
(
copy_from_user
(
&
stl_comstats
,
cp
,
sizeof
(
comstats_t
)))
return
-
EFAULT
;
portp
=
stl_getport
(
stl_comstats
.
brd
,
stl_comstats
.
panel
,
stl_comstats
.
port
);
if
(
portp
==
(
stlport_t
*
)
NULL
)
...
...
@@ -3058,8 +3060,8 @@ static int stl_getportstats(stlport_t *portp, comstats_t *cp)
portp
->
stats
.
signals
=
(
unsigned
long
)
stl_getsignals
(
portp
);
copy_to_user
(
cp
,
&
portp
->
stats
,
sizeof
(
comstats_t
));
return
(
0
)
;
return
copy_to_user
(
cp
,
&
portp
->
stats
,
sizeof
(
comstats_t
))
?
-
EFAULT
:
0
;
}
/*****************************************************************************/
...
...
@@ -3071,7 +3073,8 @@ static int stl_getportstats(stlport_t *portp, comstats_t *cp)
static
int
stl_clrportstats
(
stlport_t
*
portp
,
comstats_t
*
cp
)
{
if
(
portp
==
(
stlport_t
*
)
NULL
)
{
copy_from_user
(
&
stl_comstats
,
cp
,
sizeof
(
comstats_t
));
if
(
copy_from_user
(
&
stl_comstats
,
cp
,
sizeof
(
comstats_t
)))
return
-
EFAULT
;
portp
=
stl_getport
(
stl_comstats
.
brd
,
stl_comstats
.
panel
,
stl_comstats
.
port
);
if
(
portp
==
(
stlport_t
*
)
NULL
)
...
...
@@ -3082,8 +3085,8 @@ static int stl_clrportstats(stlport_t *portp, comstats_t *cp)
portp
->
stats
.
brd
=
portp
->
brdnr
;
portp
->
stats
.
panel
=
portp
->
panelnr
;
portp
->
stats
.
port
=
portp
->
portnr
;
copy_to_user
(
cp
,
&
portp
->
stats
,
sizeof
(
comstats_t
));
return
(
0
)
;
return
copy_to_user
(
cp
,
&
portp
->
stats
,
sizeof
(
comstats_t
))
?
-
EFAULT
:
0
;
}
/*****************************************************************************/
...
...
@@ -3096,13 +3099,14 @@ static int stl_getportstruct(unsigned long arg)
{
stlport_t
*
portp
;
copy_from_user
(
&
stl_dummyport
,
(
void
*
)
arg
,
sizeof
(
stlport_t
));
if
(
copy_from_user
(
&
stl_dummyport
,
(
void
*
)
arg
,
sizeof
(
stlport_t
)))
return
-
EFAULT
;
portp
=
stl_getport
(
stl_dummyport
.
brdnr
,
stl_dummyport
.
panelnr
,
stl_dummyport
.
portnr
);
if
(
portp
==
(
stlport_t
*
)
NULL
)
return
(
-
ENODEV
);
copy_to_user
((
void
*
)
arg
,
portp
,
sizeof
(
stlport_t
));
return
(
0
)
;
return
copy_to_user
((
void
*
)
arg
,
portp
,
sizeof
(
stlport_t
))
?
-
EFAULT
:
0
;
}
/*****************************************************************************/
...
...
@@ -3115,14 +3119,14 @@ static int stl_getbrdstruct(unsigned long arg)
{
stlbrd_t
*
brdp
;
copy_from_user
(
&
stl_dummybrd
,
(
void
*
)
arg
,
sizeof
(
stlbrd_t
));
if
(
copy_from_user
(
&
stl_dummybrd
,
(
void
*
)
arg
,
sizeof
(
stlbrd_t
)))
return
-
EFAULT
;
if
((
stl_dummybrd
.
brdnr
<
0
)
||
(
stl_dummybrd
.
brdnr
>=
STL_MAXBRDS
))
return
(
-
ENODEV
);
brdp
=
stl_brds
[
stl_dummybrd
.
brdnr
];
if
(
brdp
==
(
stlbrd_t
*
)
NULL
)
return
(
-
ENODEV
);
copy_to_user
((
void
*
)
arg
,
brdp
,
sizeof
(
stlbrd_t
));
return
(
0
);
return
copy_to_user
((
void
*
)
arg
,
brdp
,
sizeof
(
stlbrd_t
))
?
-
EFAULT
:
0
;
}
/*****************************************************************************/
...
...
drivers/char/sx.c
View file @
80be2217
...
...
@@ -1720,8 +1720,11 @@ static int sx_fw_ioctl (struct inode *inode, struct file *filp,
Get_user
(
data
,
descr
++
);
while
(
nbytes
&&
data
)
{
for
(
i
=
0
;
i
<
nbytes
;
i
+=
SX_CHUNK_SIZE
)
{
copy_from_user
(
tmp
,
(
char
*
)
data
+
i
,
(
i
+
SX_CHUNK_SIZE
>
nbytes
)
?
nbytes
-
i
:
SX_CHUNK_SIZE
);
if
(
copy_from_user
(
tmp
,
(
char
*
)
data
+
i
,
(
i
+
SX_CHUNK_SIZE
>
nbytes
)
?
nbytes
-
i
:
SX_CHUNK_SIZE
))
return
-
EFAULT
;
memcpy_toio
((
char
*
)
(
board
->
base2
+
offset
+
i
),
tmp
,
(
i
+
SX_CHUNK_SIZE
>
nbytes
)
?
nbytes
-
i
:
SX_CHUNK_SIZE
);
}
...
...
drivers/char/tpqic02.c
View file @
80be2217
...
...
@@ -1944,12 +1944,8 @@ static ssize_t qic02_tape_read(struct file *filp, char *buf, size_t count,
}
/* copy buffer to user-space in one go */
if
(
bytes_done
>
0
)
{
err
=
copy_to_user
(
buf
,
buffaddr
,
bytes_done
);
if
(
err
)
{
if
(
copy_to_user
(
buf
,
buffaddr
,
bytes_done
))
return
-
EFAULT
;
}
}
#if 1
/* Checks Ton's patch below */
...
...
@@ -2085,10 +2081,8 @@ static ssize_t qic02_tape_write(struct file *filp, const char *buf,
/* copy from user to DMA buffer and initiate transfer. */
if
(
bytes_todo
>
0
)
{
err
=
copy_from_user
(
buffaddr
,
buf
,
bytes_todo
);
if
(
err
)
{
if
(
copy_from_user
(
buffaddr
,
buf
,
bytes_todo
))
return
-
EFAULT
;
}
/****************** similar problem with read() at FM could happen here at EOT.
******************/
...
...
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