Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
9b1404c2
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
158
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
9b1404c2
编写于
7月 09, 2017
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
msgrcv(2), msgsnd(2): move compat to native
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
20bc2a3a
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
43 addition
and
47 deletion
+43
-47
include/linux/msg.h
include/linux/msg.h
+0
-8
ipc/compat.c
ipc/compat.c
+0
-37
ipc/msg.c
ipc/msg.c
+43
-2
未找到文件。
include/linux/msg.h
浏览文件 @
9b1404c2
...
...
@@ -31,12 +31,4 @@ struct msg_queue {
struct
list_head
q_senders
;
};
/* Helper routines for sys_msgsnd and sys_msgrcv */
extern
long
do_msgsnd
(
int
msqid
,
long
mtype
,
void
__user
*
mtext
,
size_t
msgsz
,
int
msgflg
);
extern
long
do_msgrcv
(
int
msqid
,
void
__user
*
buf
,
size_t
bufsz
,
long
msgtyp
,
int
msgflg
,
long
(
*
msg_fill
)(
void
__user
*
,
struct
msg_msg
*
,
size_t
));
#endif
/* _LINUX_MSG_H */
ipc/compat.c
浏览文件 @
9b1404c2
...
...
@@ -34,11 +34,6 @@
#include "util.h"
struct
compat_msgbuf
{
compat_long_t
mtype
;
char
mtext
[
1
];
};
int
get_compat_ipc64_perm
(
struct
ipc64_perm
*
to
,
struct
compat_ipc64_perm
__user
*
from
)
{
...
...
@@ -85,38 +80,6 @@ void to_compat_ipc_perm(struct compat_ipc_perm *to, struct ipc64_perm *from)
to
->
seq
=
from
->
seq
;
}
static
long
compat_do_msg_fill
(
void
__user
*
dest
,
struct
msg_msg
*
msg
,
size_t
bufsz
)
{
struct
compat_msgbuf
__user
*
msgp
=
dest
;
size_t
msgsz
;
if
(
put_user
(
msg
->
m_type
,
&
msgp
->
mtype
))
return
-
EFAULT
;
msgsz
=
(
bufsz
>
msg
->
m_ts
)
?
msg
->
m_ts
:
bufsz
;
if
(
store_msg
(
msgp
->
mtext
,
msg
,
msgsz
))
return
-
EFAULT
;
return
msgsz
;
}
COMPAT_SYSCALL_DEFINE4
(
msgsnd
,
int
,
msqid
,
compat_uptr_t
,
msgp
,
compat_ssize_t
,
msgsz
,
int
,
msgflg
)
{
struct
compat_msgbuf
__user
*
up
=
compat_ptr
(
msgp
);
compat_long_t
mtype
;
if
(
get_user
(
mtype
,
&
up
->
mtype
))
return
-
EFAULT
;
return
do_msgsnd
(
msqid
,
mtype
,
up
->
mtext
,
(
ssize_t
)
msgsz
,
msgflg
);
}
COMPAT_SYSCALL_DEFINE5
(
msgrcv
,
int
,
msqid
,
compat_uptr_t
,
msgp
,
compat_ssize_t
,
msgsz
,
compat_long_t
,
msgtyp
,
int
,
msgflg
)
{
return
do_msgrcv
(
msqid
,
compat_ptr
(
msgp
),
(
ssize_t
)
msgsz
,
(
long
)
msgtyp
,
msgflg
,
compat_do_msg_fill
);
}
#ifndef COMPAT_SHMLBA
#define COMPAT_SHMLBA SHMLBA
#endif
...
...
ipc/msg.c
浏览文件 @
9b1404c2
...
...
@@ -730,7 +730,7 @@ static inline int pipelined_send(struct msg_queue *msq, struct msg_msg *msg,
return
0
;
}
long
do_msgsnd
(
int
msqid
,
long
mtype
,
void
__user
*
mtext
,
static
long
do_msgsnd
(
int
msqid
,
long
mtype
,
void
__user
*
mtext
,
size_t
msgsz
,
int
msgflg
)
{
struct
msg_queue
*
msq
;
...
...
@@ -853,6 +853,25 @@ SYSCALL_DEFINE4(msgsnd, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
return
do_msgsnd
(
msqid
,
mtype
,
msgp
->
mtext
,
msgsz
,
msgflg
);
}
#ifdef CONFIG_COMPAT
struct
compat_msgbuf
{
compat_long_t
mtype
;
char
mtext
[
1
];
};
COMPAT_SYSCALL_DEFINE4
(
msgsnd
,
int
,
msqid
,
compat_uptr_t
,
msgp
,
compat_ssize_t
,
msgsz
,
int
,
msgflg
)
{
struct
compat_msgbuf
__user
*
up
=
compat_ptr
(
msgp
);
compat_long_t
mtype
;
if
(
get_user
(
mtype
,
&
up
->
mtype
))
return
-
EFAULT
;
return
do_msgsnd
(
msqid
,
mtype
,
up
->
mtext
,
(
ssize_t
)
msgsz
,
msgflg
);
}
#endif
static
inline
int
convert_mode
(
long
*
msgtyp
,
int
msgflg
)
{
if
(
msgflg
&
MSG_COPY
)
...
...
@@ -949,7 +968,7 @@ static struct msg_msg *find_msg(struct msg_queue *msq, long *msgtyp, int mode)
return
found
?:
ERR_PTR
(
-
EAGAIN
);
}
long
do_msgrcv
(
int
msqid
,
void
__user
*
buf
,
size_t
bufsz
,
long
msgtyp
,
int
msgflg
,
static
long
do_msgrcv
(
int
msqid
,
void
__user
*
buf
,
size_t
bufsz
,
long
msgtyp
,
int
msgflg
,
long
(
*
msg_handler
)(
void
__user
*
,
struct
msg_msg
*
,
size_t
))
{
int
mode
;
...
...
@@ -1113,6 +1132,28 @@ SYSCALL_DEFINE5(msgrcv, int, msqid, struct msgbuf __user *, msgp, size_t, msgsz,
return
do_msgrcv
(
msqid
,
msgp
,
msgsz
,
msgtyp
,
msgflg
,
do_msg_fill
);
}
#ifdef CONFIG_COMPAT
static
long
compat_do_msg_fill
(
void
__user
*
dest
,
struct
msg_msg
*
msg
,
size_t
bufsz
)
{
struct
compat_msgbuf
__user
*
msgp
=
dest
;
size_t
msgsz
;
if
(
put_user
(
msg
->
m_type
,
&
msgp
->
mtype
))
return
-
EFAULT
;
msgsz
=
(
bufsz
>
msg
->
m_ts
)
?
msg
->
m_ts
:
bufsz
;
if
(
store_msg
(
msgp
->
mtext
,
msg
,
msgsz
))
return
-
EFAULT
;
return
msgsz
;
}
COMPAT_SYSCALL_DEFINE5
(
msgrcv
,
int
,
msqid
,
compat_uptr_t
,
msgp
,
compat_ssize_t
,
msgsz
,
compat_long_t
,
msgtyp
,
int
,
msgflg
)
{
return
do_msgrcv
(
msqid
,
compat_ptr
(
msgp
),
(
ssize_t
)
msgsz
,
(
long
)
msgtyp
,
msgflg
,
compat_do_msg_fill
);
}
#endif
void
msg_init_ns
(
struct
ipc_namespace
*
ns
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录