Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
0abb013e
K
Kernel
项目概览
openeuler
/
Kernel
大约 2 年 前同步成功
通知
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看板
提交
0abb013e
编写于
2月 19, 2020
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
binfmt_elf_fdpic: don't use __... uaccess primitives
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
646e84de
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
12 deletion
+19
-12
fs/binfmt_elf_fdpic.c
fs/binfmt_elf_fdpic.c
+19
-12
未找到文件。
fs/binfmt_elf_fdpic.c
浏览文件 @
0abb013e
...
@@ -537,7 +537,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
...
@@ -537,7 +537,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
platform_len
=
strlen
(
k_platform
)
+
1
;
platform_len
=
strlen
(
k_platform
)
+
1
;
sp
-=
platform_len
;
sp
-=
platform_len
;
u_platform
=
(
char
__user
*
)
sp
;
u_platform
=
(
char
__user
*
)
sp
;
if
(
__
copy_to_user
(
u_platform
,
k_platform
,
platform_len
)
!=
0
)
if
(
copy_to_user
(
u_platform
,
k_platform
,
platform_len
)
!=
0
)
return
-
EFAULT
;
return
-
EFAULT
;
}
}
...
@@ -552,7 +552,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
...
@@ -552,7 +552,7 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
platform_len
=
strlen
(
k_base_platform
)
+
1
;
platform_len
=
strlen
(
k_base_platform
)
+
1
;
sp
-=
platform_len
;
sp
-=
platform_len
;
u_base_platform
=
(
char
__user
*
)
sp
;
u_base_platform
=
(
char
__user
*
)
sp
;
if
(
__
copy_to_user
(
u_base_platform
,
k_base_platform
,
platform_len
)
!=
0
)
if
(
copy_to_user
(
u_base_platform
,
k_base_platform
,
platform_len
)
!=
0
)
return
-
EFAULT
;
return
-
EFAULT
;
}
}
...
@@ -604,11 +604,13 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
...
@@ -604,11 +604,13 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
/* put the ELF interpreter info on the stack */
/* put the ELF interpreter info on the stack */
#define NEW_AUX_ENT(id, val) \
#define NEW_AUX_ENT(id, val) \
do { \
do { \
struct { unsigned long _id, _val; } __user *ent; \
struct { unsigned long _id, _val; } __user *ent
, v
; \
\
\
ent = (void __user *) csp; \
ent = (void __user *) csp; \
__put_user((id), &ent[nr]._id); \
v._id = (id); \
__put_user((val), &ent[nr]._val); \
v._val = (val); \
if (copy_to_user(ent + nr, &v, sizeof(v))) \
return -EFAULT; \
nr++; \
nr++; \
} while (0)
} while (0)
...
@@ -675,7 +677,8 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
...
@@ -675,7 +677,8 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
/* stack argc */
/* stack argc */
csp
-=
sizeof
(
unsigned
long
);
csp
-=
sizeof
(
unsigned
long
);
__put_user
(
bprm
->
argc
,
(
unsigned
long
__user
*
)
csp
);
if
(
put_user
(
bprm
->
argc
,
(
unsigned
long
__user
*
)
csp
))
return
-
EFAULT
;
BUG_ON
(
csp
!=
sp
);
BUG_ON
(
csp
!=
sp
);
...
@@ -689,25 +692,29 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
...
@@ -689,25 +692,29 @@ static int create_elf_fdpic_tables(struct linux_binprm *bprm,
p
=
(
char
__user
*
)
current
->
mm
->
arg_start
;
p
=
(
char
__user
*
)
current
->
mm
->
arg_start
;
for
(
loop
=
bprm
->
argc
;
loop
>
0
;
loop
--
)
{
for
(
loop
=
bprm
->
argc
;
loop
>
0
;
loop
--
)
{
__put_user
((
elf_caddr_t
)
p
,
argv
++
);
if
(
put_user
((
elf_caddr_t
)
p
,
argv
++
))
return
-
EFAULT
;
len
=
strnlen_user
(
p
,
MAX_ARG_STRLEN
);
len
=
strnlen_user
(
p
,
MAX_ARG_STRLEN
);
if
(
!
len
||
len
>
MAX_ARG_STRLEN
)
if
(
!
len
||
len
>
MAX_ARG_STRLEN
)
return
-
EINVAL
;
return
-
EINVAL
;
p
+=
len
;
p
+=
len
;
}
}
__put_user
(
NULL
,
argv
);
if
(
put_user
(
NULL
,
argv
))
return
-
EFAULT
;
current
->
mm
->
arg_end
=
(
unsigned
long
)
p
;
current
->
mm
->
arg_end
=
(
unsigned
long
)
p
;
/* fill in the envv[] array */
/* fill in the envv[] array */
current
->
mm
->
env_start
=
(
unsigned
long
)
p
;
current
->
mm
->
env_start
=
(
unsigned
long
)
p
;
for
(
loop
=
bprm
->
envc
;
loop
>
0
;
loop
--
)
{
for
(
loop
=
bprm
->
envc
;
loop
>
0
;
loop
--
)
{
__put_user
((
elf_caddr_t
)(
unsigned
long
)
p
,
envp
++
);
if
(
put_user
((
elf_caddr_t
)(
unsigned
long
)
p
,
envp
++
))
return
-
EFAULT
;
len
=
strnlen_user
(
p
,
MAX_ARG_STRLEN
);
len
=
strnlen_user
(
p
,
MAX_ARG_STRLEN
);
if
(
!
len
||
len
>
MAX_ARG_STRLEN
)
if
(
!
len
||
len
>
MAX_ARG_STRLEN
)
return
-
EINVAL
;
return
-
EINVAL
;
p
+=
len
;
p
+=
len
;
}
}
__put_user
(
NULL
,
envp
);
if
(
put_user
(
NULL
,
envp
))
return
-
EFAULT
;
current
->
mm
->
env_end
=
(
unsigned
long
)
p
;
current
->
mm
->
env_end
=
(
unsigned
long
)
p
;
mm
->
start_stack
=
(
unsigned
long
)
sp
;
mm
->
start_stack
=
(
unsigned
long
)
sp
;
...
@@ -849,8 +856,8 @@ static int elf_fdpic_map_file(struct elf_fdpic_params *params,
...
@@ -849,8 +856,8 @@ static int elf_fdpic_map_file(struct elf_fdpic_params *params,
tmp
=
phdr
->
p_memsz
/
sizeof
(
Elf32_Dyn
);
tmp
=
phdr
->
p_memsz
/
sizeof
(
Elf32_Dyn
);
dyn
=
(
Elf32_Dyn
__user
*
)
params
->
dynamic_addr
;
dyn
=
(
Elf32_Dyn
__user
*
)
params
->
dynamic_addr
;
__get_user
(
d_tag
,
&
dyn
[
tmp
-
1
].
d_tag
);
if
(
get_user
(
d_tag
,
&
dyn
[
tmp
-
1
].
d_tag
)
||
if
(
d_tag
!=
0
)
d_tag
!=
0
)
goto
dynamic_error
;
goto
dynamic_error
;
break
;
break
;
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录