Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
ffb07550
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ffb07550
编写于
6月 27, 2017
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
copy_msghdr_from_user(): get rid of field-by-field copyin
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
0d060606
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
14 addition
and
17 deletion
+14
-17
net/socket.c
net/socket.c
+14
-17
未找到文件。
net/socket.c
浏览文件 @
ffb07550
...
...
@@ -1870,22 +1870,18 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
struct
sockaddr
__user
**
save_addr
,
struct
iovec
**
iov
)
{
struct
sockaddr
__user
*
uaddr
;
struct
iovec
__user
*
uiov
;
size_t
nr_segs
;
struct
user_msghdr
msg
;
ssize_t
err
;
if
(
!
access_ok
(
VERIFY_READ
,
umsg
,
sizeof
(
*
umsg
))
||
__get_user
(
uaddr
,
&
umsg
->
msg_name
)
||
__get_user
(
kmsg
->
msg_namelen
,
&
umsg
->
msg_namelen
)
||
__get_user
(
uiov
,
&
umsg
->
msg_iov
)
||
__get_user
(
nr_segs
,
&
umsg
->
msg_iovlen
)
||
__get_user
(
kmsg
->
msg_control
,
&
umsg
->
msg_control
)
||
__get_user
(
kmsg
->
msg_controllen
,
&
umsg
->
msg_controllen
)
||
__get_user
(
kmsg
->
msg_flags
,
&
umsg
->
msg_flags
))
if
(
copy_from_user
(
&
msg
,
umsg
,
sizeof
(
*
umsg
)))
return
-
EFAULT
;
if
(
!
uaddr
)
kmsg
->
msg_control
=
msg
.
msg_control
;
kmsg
->
msg_controllen
=
msg
.
msg_controllen
;
kmsg
->
msg_flags
=
msg
.
msg_flags
;
kmsg
->
msg_namelen
=
msg
.
msg_namelen
;
if
(
!
msg
.
msg_name
)
kmsg
->
msg_namelen
=
0
;
if
(
kmsg
->
msg_namelen
<
0
)
...
...
@@ -1895,11 +1891,11 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
kmsg
->
msg_namelen
=
sizeof
(
struct
sockaddr_storage
);
if
(
save_addr
)
*
save_addr
=
uaddr
;
*
save_addr
=
msg
.
msg_name
;
if
(
uaddr
&&
kmsg
->
msg_namelen
)
{
if
(
msg
.
msg_name
&&
kmsg
->
msg_namelen
)
{
if
(
!
save_addr
)
{
err
=
move_addr_to_kernel
(
uaddr
,
kmsg
->
msg_namelen
,
err
=
move_addr_to_kernel
(
msg
.
msg_name
,
kmsg
->
msg_namelen
,
kmsg
->
msg_name
);
if
(
err
<
0
)
return
err
;
...
...
@@ -1909,12 +1905,13 @@ static int copy_msghdr_from_user(struct msghdr *kmsg,
kmsg
->
msg_namelen
=
0
;
}
if
(
nr_segs
>
UIO_MAXIOV
)
if
(
msg
.
msg_iovlen
>
UIO_MAXIOV
)
return
-
EMSGSIZE
;
kmsg
->
msg_iocb
=
NULL
;
return
import_iovec
(
save_addr
?
READ
:
WRITE
,
uiov
,
nr_segs
,
return
import_iovec
(
save_addr
?
READ
:
WRITE
,
msg
.
msg_iov
,
msg
.
msg_iovlen
,
UIO_FASTIOV
,
iov
,
&
kmsg
->
msg_iter
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录