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
nexedi
linux
Commits
79f21235
Commit
79f21235
authored
May 28, 2004
by
Alexander Viro
Committed by
Linus Torvalds
May 28, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] sparse: ipc __user annotation
parent
ebf392cd
Changes
8
Hide whitespace changes
Inline
Side-by-side
Showing
8 changed files
with
32 additions
and
30 deletions
+32
-30
include/linux/sem.h
include/linux/sem.h
+4
-4
ipc/compat.c
ipc/compat.c
+12
-11
ipc/compat_mq.c
ipc/compat_mq.c
+3
-2
ipc/mqueue.c
ipc/mqueue.c
+1
-1
ipc/msg.c
ipc/msg.c
+5
-5
ipc/msgutil.c
ipc/msgutil.c
+5
-5
ipc/sem.c
ipc/sem.c
+1
-1
ipc/util.h
ipc/util.h
+1
-1
No files found.
include/linux/sem.h
View file @
79f21235
...
@@ -45,10 +45,10 @@ struct sembuf {
...
@@ -45,10 +45,10 @@ struct sembuf {
/* arg for semctl system calls. */
/* arg for semctl system calls. */
union
semun
{
union
semun
{
int
val
;
/* value for SETVAL */
int
val
;
/* value for SETVAL */
struct
semid_ds
*
buf
;
/* buffer for IPC_STAT & IPC_SET */
struct
semid_ds
__user
*
buf
;
/* buffer for IPC_STAT & IPC_SET */
unsigned
short
*
array
;
/* array for GETALL & SETALL */
unsigned
short
__user
*
array
;
/* array for GETALL & SETALL */
struct
seminfo
*
__buf
;
/* buffer for IPC_INFO */
struct
seminfo
__user
*
__buf
;
/* buffer for IPC_INFO */
void
*
__pad
;
void
__user
*
__pad
;
};
};
struct
seminfo
{
struct
seminfo
{
...
...
ipc/compat.c
View file @
79f21235
...
@@ -134,7 +134,7 @@ static inline int compat_ipc_parse_version(int *cmd)
...
@@ -134,7 +134,7 @@ static inline int compat_ipc_parse_version(int *cmd)
}
}
static
inline
int
__get_compat_ipc64_perm
(
struct
ipc64_perm
*
p64
,
static
inline
int
__get_compat_ipc64_perm
(
struct
ipc64_perm
*
p64
,
struct
compat_ipc64_perm
*
up64
)
struct
compat_ipc64_perm
__user
*
up64
)
{
{
int
err
;
int
err
;
...
@@ -145,7 +145,7 @@ static inline int __get_compat_ipc64_perm(struct ipc64_perm *p64,
...
@@ -145,7 +145,7 @@ static inline int __get_compat_ipc64_perm(struct ipc64_perm *p64,
}
}
static
inline
int
__get_compat_ipc_perm
(
struct
ipc64_perm
*
p
,
static
inline
int
__get_compat_ipc_perm
(
struct
ipc64_perm
*
p
,
struct
compat_ipc_perm
*
up
)
struct
compat_ipc_perm
__user
*
up
)
{
{
int
err
;
int
err
;
...
@@ -156,7 +156,7 @@ static inline int __get_compat_ipc_perm(struct ipc64_perm *p,
...
@@ -156,7 +156,7 @@ static inline int __get_compat_ipc_perm(struct ipc64_perm *p,
}
}
static
inline
int
__put_compat_ipc64_perm
(
struct
ipc64_perm
*
p64
,
static
inline
int
__put_compat_ipc64_perm
(
struct
ipc64_perm
*
p64
,
struct
compat_ipc64_perm
*
up64
)
struct
compat_ipc64_perm
__user
*
up64
)
{
{
int
err
;
int
err
;
...
@@ -171,7 +171,7 @@ static inline int __put_compat_ipc64_perm(struct ipc64_perm *p64,
...
@@ -171,7 +171,7 @@ static inline int __put_compat_ipc64_perm(struct ipc64_perm *p64,
}
}
static
inline
int
__put_compat_ipc_perm
(
struct
ipc64_perm
*
p
,
static
inline
int
__put_compat_ipc_perm
(
struct
ipc64_perm
*
p
,
struct
compat_ipc_perm
*
up
)
struct
compat_ipc_perm
__user
*
up
)
{
{
int
err
;
int
err
;
compat_uid_t
u
;
compat_uid_t
u
;
...
@@ -192,7 +192,7 @@ static inline int __put_compat_ipc_perm(struct ipc64_perm *p,
...
@@ -192,7 +192,7 @@ static inline int __put_compat_ipc_perm(struct ipc64_perm *p,
}
}
static
inline
int
get_compat_semid64_ds
(
struct
semid64_ds
*
s64
,
static
inline
int
get_compat_semid64_ds
(
struct
semid64_ds
*
s64
,
struct
compat_semid64_ds
*
up64
)
struct
compat_semid64_ds
__user
*
up64
)
{
{
if
(
!
access_ok
(
VERIFY_READ
,
up64
,
sizeof
(
*
up64
)))
if
(
!
access_ok
(
VERIFY_READ
,
up64
,
sizeof
(
*
up64
)))
return
-
EFAULT
;
return
-
EFAULT
;
...
@@ -200,7 +200,7 @@ static inline int get_compat_semid64_ds(struct semid64_ds *s64,
...
@@ -200,7 +200,7 @@ static inline int get_compat_semid64_ds(struct semid64_ds *s64,
}
}
static
inline
int
get_compat_semid_ds
(
struct
semid64_ds
*
s
,
static
inline
int
get_compat_semid_ds
(
struct
semid64_ds
*
s
,
struct
compat_semid_ds
*
up
)
struct
compat_semid_ds
__user
*
up
)
{
{
if
(
!
access_ok
(
VERIFY_READ
,
up
,
sizeof
(
*
up
)))
if
(
!
access_ok
(
VERIFY_READ
,
up
,
sizeof
(
*
up
)))
return
-
EFAULT
;
return
-
EFAULT
;
...
@@ -208,7 +208,7 @@ static inline int get_compat_semid_ds(struct semid64_ds *s,
...
@@ -208,7 +208,7 @@ static inline int get_compat_semid_ds(struct semid64_ds *s,
}
}
static
inline
int
put_compat_semid64_ds
(
struct
semid64_ds
*
s64
,
static
inline
int
put_compat_semid64_ds
(
struct
semid64_ds
*
s64
,
struct
compat_semid64_ds
*
up64
)
struct
compat_semid64_ds
__user
*
up64
)
{
{
int
err
;
int
err
;
...
@@ -222,7 +222,7 @@ static inline int put_compat_semid64_ds(struct semid64_ds *s64,
...
@@ -222,7 +222,7 @@ static inline int put_compat_semid64_ds(struct semid64_ds *s64,
}
}
static
inline
int
put_compat_semid_ds
(
struct
semid64_ds
*
s
,
static
inline
int
put_compat_semid_ds
(
struct
semid64_ds
*
s
,
struct
compat_semid_ds
*
up
)
struct
compat_semid_ds
__user
*
up
)
{
{
int
err
;
int
err
;
...
@@ -413,7 +413,7 @@ static inline int get_compat_msqid(struct msqid64_ds *m,
...
@@ -413,7 +413,7 @@ static inline int get_compat_msqid(struct msqid64_ds *m,
}
}
static
inline
int
put_compat_msqid64_ds
(
struct
msqid64_ds
*
m64
,
static
inline
int
put_compat_msqid64_ds
(
struct
msqid64_ds
*
m64
,
struct
compat_msqid64_ds
__user
__user
*
up64
)
struct
compat_msqid64_ds
__user
*
up64
)
{
{
int
err
;
int
err
;
...
@@ -450,7 +450,7 @@ static inline int put_compat_msqid_ds(struct msqid64_ds *m,
...
@@ -450,7 +450,7 @@ static inline int put_compat_msqid_ds(struct msqid64_ds *m,
return
err
;
return
err
;
}
}
static
inline
int
do_msgctl
(
int
first
,
int
second
,
void
__user
*
buf
)
static
inline
int
do_msgctl
(
int
first
,
int
second
,
void
*
buf
)
{
{
mm_segment_t
old_fs
;
mm_segment_t
old_fs
;
int
err
;
int
err
;
...
@@ -712,7 +712,8 @@ long compat_sys_shmctl(int first, int second, void __user *uptr)
...
@@ -712,7 +712,8 @@ long compat_sys_shmctl(int first, int second, void __user *uptr)
long
compat_sys_semtimedop
(
int
semid
,
struct
sembuf
__user
*
tsems
,
long
compat_sys_semtimedop
(
int
semid
,
struct
sembuf
__user
*
tsems
,
unsigned
nsops
,
const
struct
compat_timespec
__user
*
timeout
)
unsigned
nsops
,
const
struct
compat_timespec
__user
*
timeout
)
{
{
struct
timespec
ts
,
__user
*
ts64
;
struct
timespec
ts
;
struct
timespec
__user
*
ts64
;
/* parameter checking precedence should mirror sys_semtimedop() */
/* parameter checking precedence should mirror sys_semtimedop() */
if
(
nsops
<
1
||
semid
<
0
)
if
(
nsops
<
1
||
semid
<
0
)
...
...
ipc/compat_mq.c
View file @
79f21235
...
@@ -77,7 +77,8 @@ asmlinkage long compat_sys_mq_open(const char __user *u_name,
...
@@ -77,7 +77,8 @@ asmlinkage long compat_sys_mq_open(const char __user *u_name,
static
struct
timespec
__user
*
compat_prepare_timeout
(
static
struct
timespec
__user
*
compat_prepare_timeout
(
const
struct
compat_timespec
__user
*
u_abs_timeout
)
const
struct
compat_timespec
__user
*
u_abs_timeout
)
{
{
struct
timespec
ts
,
__user
*
u_ts
;
struct
timespec
ts
;
struct
timespec
__user
*
u_ts
;
if
(
!
u_abs_timeout
)
if
(
!
u_abs_timeout
)
return
0
;
return
0
;
...
@@ -110,7 +111,7 @@ asmlinkage ssize_t compat_sys_mq_timedreceive(mqd_t mqdes,
...
@@ -110,7 +111,7 @@ asmlinkage ssize_t compat_sys_mq_timedreceive(mqd_t mqdes,
size_t
msg_len
,
unsigned
int
__user
*
u_msg_prio
,
size_t
msg_len
,
unsigned
int
__user
*
u_msg_prio
,
const
struct
compat_timespec
__user
*
u_abs_timeout
)
const
struct
compat_timespec
__user
*
u_abs_timeout
)
{
{
struct
timespec
*
u_ts
;
struct
timespec
__user
*
u_ts
;
u_ts
=
compat_prepare_timeout
(
u_abs_timeout
);
u_ts
=
compat_prepare_timeout
(
u_abs_timeout
);
if
(
IS_ERR
(
u_ts
))
if
(
IS_ERR
(
u_ts
))
...
...
ipc/mqueue.c
View file @
79f21235
...
@@ -780,7 +780,7 @@ asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
...
@@ -780,7 +780,7 @@ asmlinkage long sys_mq_timedsend(mqd_t mqdes, const char __user *u_msg_ptr,
/* First try to allocate memory, before doing anything with
/* First try to allocate memory, before doing anything with
* existing queues. */
* existing queues. */
msg_ptr
=
load_msg
(
(
void
*
)
u_msg_ptr
,
msg_len
);
msg_ptr
=
load_msg
(
u_msg_ptr
,
msg_len
);
if
(
unlikely
(
IS_ERR
(
msg_ptr
)))
{
if
(
unlikely
(
IS_ERR
(
msg_ptr
)))
{
ret
=
PTR_ERR
(
msg_ptr
);
ret
=
PTR_ERR
(
msg_ptr
);
goto
out_fput
;
goto
out_fput
;
...
...
ipc/msg.c
View file @
79f21235
...
@@ -229,7 +229,7 @@ asmlinkage long sys_msgget (key_t key, int msgflg)
...
@@ -229,7 +229,7 @@ asmlinkage long sys_msgget (key_t key, int msgflg)
return
ret
;
return
ret
;
}
}
static
inline
unsigned
long
copy_msqid_to_user
(
void
*
buf
,
struct
msqid64_ds
*
in
,
int
version
)
static
inline
unsigned
long
copy_msqid_to_user
(
void
__user
*
buf
,
struct
msqid64_ds
*
in
,
int
version
)
{
{
switch
(
version
)
{
switch
(
version
)
{
case
IPC_64
:
case
IPC_64
:
...
@@ -280,7 +280,7 @@ struct msq_setbuf {
...
@@ -280,7 +280,7 @@ struct msq_setbuf {
mode_t
mode
;
mode_t
mode
;
};
};
static
inline
unsigned
long
copy_msqid_from_user
(
struct
msq_setbuf
*
out
,
void
*
buf
,
int
version
)
static
inline
unsigned
long
copy_msqid_from_user
(
struct
msq_setbuf
*
out
,
void
__user
*
buf
,
int
version
)
{
{
switch
(
version
)
{
switch
(
version
)
{
case
IPC_64
:
case
IPC_64
:
...
@@ -320,7 +320,7 @@ static inline unsigned long copy_msqid_from_user(struct msq_setbuf *out, void *b
...
@@ -320,7 +320,7 @@ static inline unsigned long copy_msqid_from_user(struct msq_setbuf *out, void *b
}
}
}
}
asmlinkage
long
sys_msgctl
(
int
msqid
,
int
cmd
,
struct
msqid_ds
*
buf
)
asmlinkage
long
sys_msgctl
(
int
msqid
,
int
cmd
,
struct
msqid_ds
__user
*
buf
)
{
{
int
err
,
version
;
int
err
,
version
;
struct
msg_queue
*
msq
;
struct
msg_queue
*
msq
;
...
@@ -539,7 +539,7 @@ static inline int pipelined_send(struct msg_queue* msq, struct msg_msg* msg)
...
@@ -539,7 +539,7 @@ static inline int pipelined_send(struct msg_queue* msq, struct msg_msg* msg)
return
0
;
return
0
;
}
}
asmlinkage
long
sys_msgsnd
(
int
msqid
,
struct
msgbuf
*
msgp
,
size_t
msgsz
,
int
msgflg
)
asmlinkage
long
sys_msgsnd
(
int
msqid
,
struct
msgbuf
__user
*
msgp
,
size_t
msgsz
,
int
msgflg
)
{
{
struct
msg_queue
*
msq
;
struct
msg_queue
*
msq
;
struct
msg_msg
*
msg
;
struct
msg_msg
*
msg
;
...
@@ -645,7 +645,7 @@ static inline int convert_mode(long* msgtyp, int msgflg)
...
@@ -645,7 +645,7 @@ static inline int convert_mode(long* msgtyp, int msgflg)
return
SEARCH_EQUAL
;
return
SEARCH_EQUAL
;
}
}
asmlinkage
long
sys_msgrcv
(
int
msqid
,
struct
msgbuf
*
msgp
,
size_t
msgsz
,
asmlinkage
long
sys_msgrcv
(
int
msqid
,
struct
msgbuf
__user
*
msgp
,
size_t
msgsz
,
long
msgtyp
,
int
msgflg
)
long
msgtyp
,
int
msgflg
)
{
{
struct
msg_queue
*
msq
;
struct
msg_queue
*
msq
;
...
...
ipc/msgutil.c
View file @
79f21235
...
@@ -25,7 +25,7 @@ struct msg_msgseg {
...
@@ -25,7 +25,7 @@ struct msg_msgseg {
#define DATALEN_MSG (PAGE_SIZE-sizeof(struct msg_msg))
#define DATALEN_MSG (PAGE_SIZE-sizeof(struct msg_msg))
#define DATALEN_SEG (PAGE_SIZE-sizeof(struct msg_msgseg))
#define DATALEN_SEG (PAGE_SIZE-sizeof(struct msg_msgseg))
struct
msg_msg
*
load_msg
(
void
__user
*
src
,
int
len
)
struct
msg_msg
*
load_msg
(
const
void
__user
*
src
,
int
len
)
{
{
struct
msg_msg
*
msg
;
struct
msg_msg
*
msg
;
struct
msg_msgseg
**
pseg
;
struct
msg_msgseg
**
pseg
;
...
@@ -49,7 +49,7 @@ struct msg_msg *load_msg(void __user *src, int len)
...
@@ -49,7 +49,7 @@ struct msg_msg *load_msg(void __user *src, int len)
}
}
len
-=
alen
;
len
-=
alen
;
src
=
((
char
*
)
src
)
+
alen
;
src
=
((
char
__user
*
)
src
)
+
alen
;
pseg
=
&
msg
->
next
;
pseg
=
&
msg
->
next
;
while
(
len
>
0
)
{
while
(
len
>
0
)
{
struct
msg_msgseg
*
seg
;
struct
msg_msgseg
*
seg
;
...
@@ -70,7 +70,7 @@ struct msg_msg *load_msg(void __user *src, int len)
...
@@ -70,7 +70,7 @@ struct msg_msg *load_msg(void __user *src, int len)
}
}
pseg
=
&
seg
->
next
;
pseg
=
&
seg
->
next
;
len
-=
alen
;
len
-=
alen
;
src
=
((
char
*
)
src
)
+
alen
;
src
=
((
char
__user
*
)
src
)
+
alen
;
}
}
err
=
security_msg_msg_alloc
(
msg
);
err
=
security_msg_msg_alloc
(
msg
);
...
@@ -96,7 +96,7 @@ int store_msg(void __user *dest, struct msg_msg *msg, int len)
...
@@ -96,7 +96,7 @@ int store_msg(void __user *dest, struct msg_msg *msg, int len)
return
-
1
;
return
-
1
;
len
-=
alen
;
len
-=
alen
;
dest
=
((
char
*
)
dest
)
+
alen
;
dest
=
((
char
__user
*
)
dest
)
+
alen
;
seg
=
msg
->
next
;
seg
=
msg
->
next
;
while
(
len
>
0
)
{
while
(
len
>
0
)
{
alen
=
len
;
alen
=
len
;
...
@@ -105,7 +105,7 @@ int store_msg(void __user *dest, struct msg_msg *msg, int len)
...
@@ -105,7 +105,7 @@ int store_msg(void __user *dest, struct msg_msg *msg, int len)
if
(
copy_to_user
(
dest
,
seg
+
1
,
alen
))
if
(
copy_to_user
(
dest
,
seg
+
1
,
alen
))
return
-
1
;
return
-
1
;
len
-=
alen
;
len
-=
alen
;
dest
=
((
char
*
)
dest
)
+
alen
;
dest
=
((
char
__user
*
)
dest
)
+
alen
;
seg
=
seg
->
next
;
seg
=
seg
->
next
;
}
}
return
0
;
return
0
;
...
...
ipc/sem.c
View file @
79f21235
...
@@ -610,7 +610,7 @@ static int semctl_main(int semid, int semnum, int cmd, int version, union semun
...
@@ -610,7 +610,7 @@ static int semctl_main(int semid, int semnum, int cmd, int version, union semun
switch
(
cmd
)
{
switch
(
cmd
)
{
case
GETALL
:
case
GETALL
:
{
{
ushort
*
array
=
arg
.
array
;
ushort
__user
*
array
=
arg
.
array
;
int
i
;
int
i
;
if
(
nsems
>
SEMMSL_FAST
)
{
if
(
nsems
>
SEMMSL_FAST
)
{
...
...
ipc/util.h
View file @
79f21235
...
@@ -68,7 +68,7 @@ int ipc_parse_version (int *cmd);
...
@@ -68,7 +68,7 @@ int ipc_parse_version (int *cmd);
#endif
#endif
extern
void
free_msg
(
struct
msg_msg
*
msg
);
extern
void
free_msg
(
struct
msg_msg
*
msg
);
extern
struct
msg_msg
*
load_msg
(
void
__user
*
src
,
int
len
);
extern
struct
msg_msg
*
load_msg
(
const
void
__user
*
src
,
int
len
);
extern
int
store_msg
(
void
__user
*
dest
,
struct
msg_msg
*
msg
,
int
len
);
extern
int
store_msg
(
void
__user
*
dest
,
struct
msg_msg
*
msg
,
int
len
);
#endif
#endif
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