Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
bbced07d
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看板
提交
bbced07d
编写于
4月 27, 2020
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
get rid of compat_mc_setsockopt()
not used anymore Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
b212c322
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
0 addition
and
94 deletion
+0
-94
include/net/compat.h
include/net/compat.h
+0
-4
net/compat.c
net/compat.c
+0
-90
未找到文件。
include/net/compat.h
浏览文件 @
bbced07d
...
...
@@ -67,10 +67,6 @@ int put_cmsg_compat(struct msghdr*, int, int, int, void *);
int
cmsghdr_from_user_compat_to_kern
(
struct
msghdr
*
,
struct
sock
*
,
unsigned
char
*
,
int
);
int
compat_mc_setsockopt
(
struct
sock
*
,
int
,
int
,
char
__user
*
,
unsigned
int
,
int
(
*
)(
struct
sock
*
,
int
,
int
,
char
__user
*
,
unsigned
int
));
struct
compat_group_req
{
__u32
gr_interface
;
struct
__kernel_sockaddr_storage
gr_group
...
...
net/compat.c
浏览文件 @
bbced07d
...
...
@@ -448,96 +448,6 @@ COMPAT_SYSCALL_DEFINE5(getsockopt, int, fd, int, level, int, optname,
return
__compat_sys_getsockopt
(
fd
,
level
,
optname
,
optval
,
optlen
);
}
#define __COMPAT_GF0_SIZE (sizeof(struct compat_group_filter) - \
sizeof(struct __kernel_sockaddr_storage))
int
compat_mc_setsockopt
(
struct
sock
*
sock
,
int
level
,
int
optname
,
char
__user
*
optval
,
unsigned
int
optlen
,
int
(
*
setsockopt
)(
struct
sock
*
,
int
,
int
,
char
__user
*
,
unsigned
int
))
{
char
__user
*
koptval
=
optval
;
int
koptlen
=
optlen
;
switch
(
optname
)
{
case
MCAST_JOIN_GROUP
:
case
MCAST_LEAVE_GROUP
:
{
struct
compat_group_req
__user
*
gr32
=
(
void
__user
*
)
optval
;
struct
group_req
__user
*
kgr
=
compat_alloc_user_space
(
sizeof
(
struct
group_req
));
u32
interface
;
if
(
!
access_ok
(
gr32
,
sizeof
(
*
gr32
))
||
!
access_ok
(
kgr
,
sizeof
(
struct
group_req
))
||
__get_user
(
interface
,
&
gr32
->
gr_interface
)
||
__put_user
(
interface
,
&
kgr
->
gr_interface
)
||
copy_in_user
(
&
kgr
->
gr_group
,
&
gr32
->
gr_group
,
sizeof
(
kgr
->
gr_group
)))
return
-
EFAULT
;
koptval
=
(
char
__user
*
)
kgr
;
koptlen
=
sizeof
(
struct
group_req
);
break
;
}
case
MCAST_JOIN_SOURCE_GROUP
:
case
MCAST_LEAVE_SOURCE_GROUP
:
case
MCAST_BLOCK_SOURCE
:
case
MCAST_UNBLOCK_SOURCE
:
{
struct
compat_group_source_req
__user
*
gsr32
=
(
void
__user
*
)
optval
;
struct
group_source_req
__user
*
kgsr
=
compat_alloc_user_space
(
sizeof
(
struct
group_source_req
));
u32
interface
;
if
(
!
access_ok
(
gsr32
,
sizeof
(
*
gsr32
))
||
!
access_ok
(
kgsr
,
sizeof
(
struct
group_source_req
))
||
__get_user
(
interface
,
&
gsr32
->
gsr_interface
)
||
__put_user
(
interface
,
&
kgsr
->
gsr_interface
)
||
copy_in_user
(
&
kgsr
->
gsr_group
,
&
gsr32
->
gsr_group
,
sizeof
(
kgsr
->
gsr_group
))
||
copy_in_user
(
&
kgsr
->
gsr_source
,
&
gsr32
->
gsr_source
,
sizeof
(
kgsr
->
gsr_source
)))
return
-
EFAULT
;
koptval
=
(
char
__user
*
)
kgsr
;
koptlen
=
sizeof
(
struct
group_source_req
);
break
;
}
case
MCAST_MSFILTER
:
{
struct
compat_group_filter
__user
*
gf32
=
(
void
__user
*
)
optval
;
struct
group_filter
__user
*
kgf
;
u32
interface
,
fmode
,
numsrc
;
if
(
!
access_ok
(
gf32
,
__COMPAT_GF0_SIZE
)
||
__get_user
(
interface
,
&
gf32
->
gf_interface
)
||
__get_user
(
fmode
,
&
gf32
->
gf_fmode
)
||
__get_user
(
numsrc
,
&
gf32
->
gf_numsrc
))
return
-
EFAULT
;
koptlen
=
optlen
+
sizeof
(
struct
group_filter
)
-
sizeof
(
struct
compat_group_filter
);
if
(
koptlen
<
GROUP_FILTER_SIZE
(
numsrc
))
return
-
EINVAL
;
kgf
=
compat_alloc_user_space
(
koptlen
);
if
(
!
access_ok
(
kgf
,
koptlen
)
||
__put_user
(
interface
,
&
kgf
->
gf_interface
)
||
__put_user
(
fmode
,
&
kgf
->
gf_fmode
)
||
__put_user
(
numsrc
,
&
kgf
->
gf_numsrc
)
||
copy_in_user
(
&
kgf
->
gf_group
,
&
gf32
->
gf_group
,
sizeof
(
kgf
->
gf_group
))
||
(
numsrc
&&
copy_in_user
(
kgf
->
gf_slist
,
gf32
->
gf_slist
,
numsrc
*
sizeof
(
kgf
->
gf_slist
[
0
]))))
return
-
EFAULT
;
koptval
=
(
char
__user
*
)
kgf
;
break
;
}
default:
break
;
}
return
setsockopt
(
sock
,
level
,
optname
,
koptval
,
koptlen
);
}
EXPORT_SYMBOL
(
compat_mc_setsockopt
);
/* Argument list sizes for compat_sys_socketcall */
#define AL(x) ((x) * sizeof(u32))
static
unsigned
char
nas
[
21
]
=
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录