Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
e214125a
cloud-kernel
项目概览
openanolis
/
cloud-kernel
大约 1 年 前同步成功
通知
153
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,发现更多精彩内容 >>
提交
e214125a
编写于
12月 23, 2012
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
s390: switch to generic sigaltstack
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
0aa0203f
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
7 addition
and
83 deletion
+7
-83
arch/s390/Kconfig
arch/s390/Kconfig
+1
-0
arch/s390/kernel/compat_linux.h
arch/s390/kernel/compat_linux.h
+1
-8
arch/s390/kernel/compat_signal.c
arch/s390/kernel/compat_signal.c
+2
-55
arch/s390/kernel/compat_wrapper.S
arch/s390/kernel/compat_wrapper.S
+0
-5
arch/s390/kernel/entry.h
arch/s390/kernel/entry.h
+0
-1
arch/s390/kernel/signal.c
arch/s390/kernel/signal.c
+2
-13
arch/s390/kernel/syscalls.S
arch/s390/kernel/syscalls.S
+1
-1
未找到文件。
arch/s390/Kconfig
浏览文件 @
e214125a
...
...
@@ -140,6 +140,7 @@ config S390
select HAVE_MOD_ARCH_SPECIFIC
select MODULES_USE_ELF_RELA
select CLONE_BACKWARDS2
select GENERIC_SIGALTSTACK
config SCHED_OMIT_FRAME_POINTER
def_bool y
...
...
arch/s390/kernel/compat_linux.h
浏览文件 @
e214125a
...
...
@@ -75,17 +75,11 @@ struct sigaction32 {
compat_sigset_t
sa_mask
;
/* mask last for extensibility */
};
typedef
struct
{
__u32
ss_sp
;
/* pointer */
int
ss_flags
;
compat_size_t
ss_size
;
}
stack_t32
;
/* asm/ucontext.h */
struct
ucontext32
{
__u32
uc_flags
;
__u32
uc_link
;
/* pointer */
stack_t32
uc_stack
;
compat_stack_t
uc_stack
;
_sigregs32
uc_mcontext
;
compat_sigset_t
uc_sigmask
;
/* mask last for extensibility */
};
...
...
@@ -153,5 +147,4 @@ long sys32_sigaction(int sig, const struct old_sigaction32 __user *act,
struct
old_sigaction32
__user
*
oact
);
long
sys32_rt_sigaction
(
int
sig
,
const
struct
sigaction32
__user
*
act
,
struct
sigaction32
__user
*
oact
,
size_t
sigsetsize
);
long
sys32_sigaltstack
(
const
stack_t32
__user
*
uss
,
stack_t32
__user
*
uoss
);
#endif
/* _ASM_S390X_S390_H */
arch/s390/kernel/compat_signal.c
浏览文件 @
e214125a
...
...
@@ -234,45 +234,6 @@ sys32_rt_sigaction(int sig, const struct sigaction32 __user *act,
return
ret
;
}
asmlinkage
long
sys32_sigaltstack
(
const
stack_t32
__user
*
uss
,
stack_t32
__user
*
uoss
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
stack_t
kss
,
koss
;
unsigned
long
ss_sp
;
int
ret
,
err
=
0
;
mm_segment_t
old_fs
=
get_fs
();
if
(
uss
)
{
if
(
!
access_ok
(
VERIFY_READ
,
uss
,
sizeof
(
*
uss
)))
return
-
EFAULT
;
err
|=
__get_user
(
ss_sp
,
&
uss
->
ss_sp
);
err
|=
__get_user
(
kss
.
ss_size
,
&
uss
->
ss_size
);
err
|=
__get_user
(
kss
.
ss_flags
,
&
uss
->
ss_flags
);
if
(
err
)
return
-
EFAULT
;
kss
.
ss_sp
=
(
void
__user
*
)
ss_sp
;
}
set_fs
(
KERNEL_DS
);
ret
=
do_sigaltstack
((
stack_t
__force
__user
*
)
(
uss
?
&
kss
:
NULL
),
(
stack_t
__force
__user
*
)
(
uoss
?
&
koss
:
NULL
),
regs
->
gprs
[
15
]);
set_fs
(
old_fs
);
if
(
!
ret
&&
uoss
)
{
if
(
!
access_ok
(
VERIFY_WRITE
,
uoss
,
sizeof
(
*
uoss
)))
return
-
EFAULT
;
ss_sp
=
(
unsigned
long
)
koss
.
ss_sp
;
err
|=
__put_user
(
ss_sp
,
&
uoss
->
ss_sp
);
err
|=
__put_user
(
koss
.
ss_size
,
&
uoss
->
ss_size
);
err
|=
__put_user
(
koss
.
ss_flags
,
&
uoss
->
ss_flags
);
if
(
err
)
return
-
EFAULT
;
}
return
ret
;
}
static
int
save_sigregs32
(
struct
pt_regs
*
regs
,
_sigregs32
__user
*
sregs
)
{
_s390_regs_common32
regs32
;
...
...
@@ -380,10 +341,6 @@ asmlinkage long sys32_rt_sigreturn(void)
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
rt_sigframe32
__user
*
frame
=
(
rt_sigframe32
__user
*
)
regs
->
gprs
[
15
];
sigset_t
set
;
stack_t
st
;
__u32
ss_sp
;
int
err
;
mm_segment_t
old_fs
=
get_fs
();
if
(
!
access_ok
(
VERIFY_READ
,
frame
,
sizeof
(
*
frame
)))
goto
badframe
;
...
...
@@ -394,15 +351,8 @@ asmlinkage long sys32_rt_sigreturn(void)
goto
badframe
;
if
(
restore_sigregs_gprs_high
(
regs
,
frame
->
gprs_high
))
goto
badframe
;
err
=
__get_user
(
ss_sp
,
&
frame
->
uc
.
uc_stack
.
ss_sp
);
st
.
ss_sp
=
compat_ptr
(
ss_sp
);
err
|=
__get_user
(
st
.
ss_size
,
&
frame
->
uc
.
uc_stack
.
ss_size
);
err
|=
__get_user
(
st
.
ss_flags
,
&
frame
->
uc
.
uc_stack
.
ss_flags
);
if
(
err
)
if
(
compat_restore_altstack
(
&
frame
->
uc
.
uc_stack
))
goto
badframe
;
set_fs
(
KERNEL_DS
);
do_sigaltstack
((
stack_t
__force
__user
*
)
&
st
,
NULL
,
regs
->
gprs
[
15
]);
set_fs
(
old_fs
);
return
regs
->
gprs
[
2
];
badframe:
force_sig
(
SIGSEGV
,
current
);
...
...
@@ -530,10 +480,7 @@ static int setup_rt_frame32(int sig, struct k_sigaction *ka, siginfo_t *info,
/* Create the ucontext. */
err
|=
__put_user
(
UC_EXTENDED
,
&
frame
->
uc
.
uc_flags
);
err
|=
__put_user
(
0
,
&
frame
->
uc
.
uc_link
);
err
|=
__put_user
(
current
->
sas_ss_sp
,
&
frame
->
uc
.
uc_stack
.
ss_sp
);
err
|=
__put_user
(
sas_ss_flags
(
regs
->
gprs
[
15
]),
&
frame
->
uc
.
uc_stack
.
ss_flags
);
err
|=
__put_user
(
current
->
sas_ss_size
,
&
frame
->
uc
.
uc_stack
.
ss_size
);
err
|=
__compat_save_altstack
(
&
frame
->
uc
.
uc_stack
,
regs
->
gprs
[
15
]);
err
|=
save_sigregs32
(
regs
,
&
frame
->
uc
.
uc_mcontext
);
err
|=
save_sigregs_gprs_high
(
regs
,
frame
->
gprs_high
);
err
|=
__copy_to_user
(
&
frame
->
uc
.
uc_sigmask
,
set
,
sizeof
(
*
set
));
...
...
arch/s390/kernel/compat_wrapper.S
浏览文件 @
e214125a
...
...
@@ -760,11 +760,6 @@ ENTRY(sys32_capset_wrapper)
llgtr
%
r3
,%
r3
#
const
cap_user_data_t
jg
sys_capset
#
branch
to
system
call
ENTRY
(
sys32_sigaltstack_wrapper
)
llgtr
%
r2
,%
r2
#
const
stack_emu31_t
*
llgtr
%
r3
,%
r3
#
stack_emu31_t
*
jg
sys32_sigaltstack
ENTRY
(
sys32_sendfile_wrapper
)
lgfr
%
r2
,%
r2
#
int
lgfr
%
r3
,%
r3
#
int
...
...
arch/s390/kernel/entry.h
浏览文件 @
e214125a
...
...
@@ -76,7 +76,6 @@ long sys_s390_fallocate(int fd, int mode, loff_t offset, u32 len_high,
long
sys_sigsuspend
(
int
history0
,
int
history1
,
old_sigset_t
mask
);
long
sys_sigaction
(
int
sig
,
const
struct
old_sigaction
__user
*
act
,
struct
old_sigaction
__user
*
oact
);
long
sys_sigaltstack
(
const
stack_t
__user
*
uss
,
stack_t
__user
*
uoss
);
long
sys_sigreturn
(
void
);
long
sys_rt_sigreturn
(
void
);
long
sys32_sigreturn
(
void
);
...
...
arch/s390/kernel/signal.c
浏览文件 @
e214125a
...
...
@@ -89,13 +89,6 @@ SYSCALL_DEFINE3(sigaction, int, sig, const struct old_sigaction __user *, act,
return
ret
;
}
SYSCALL_DEFINE2
(
sigaltstack
,
const
stack_t
__user
*
,
uss
,
stack_t
__user
*
,
uoss
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
return
do_sigaltstack
(
uss
,
uoss
,
regs
->
gprs
[
15
]);
}
/* Returns non-zero on fault. */
static
int
save_sigregs
(
struct
pt_regs
*
regs
,
_sigregs
__user
*
sregs
)
{
...
...
@@ -190,8 +183,7 @@ SYSCALL_DEFINE0(rt_sigreturn)
set_current_blocked
(
&
set
);
if
(
restore_sigregs
(
regs
,
&
frame
->
uc
.
uc_mcontext
))
goto
badframe
;
if
(
do_sigaltstack
(
&
frame
->
uc
.
uc_stack
,
NULL
,
regs
->
gprs
[
15
])
==
-
EFAULT
)
if
(
restore_altstack
(
&
frame
->
uc
.
uc_stack
))
goto
badframe
;
return
regs
->
gprs
[
2
];
badframe:
...
...
@@ -325,10 +317,7 @@ static int setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
/* Create the ucontext. */
err
|=
__put_user
(
0
,
&
frame
->
uc
.
uc_flags
);
err
|=
__put_user
(
NULL
,
&
frame
->
uc
.
uc_link
);
err
|=
__put_user
((
void
__user
*
)
current
->
sas_ss_sp
,
&
frame
->
uc
.
uc_stack
.
ss_sp
);
err
|=
__put_user
(
sas_ss_flags
(
regs
->
gprs
[
15
]),
&
frame
->
uc
.
uc_stack
.
ss_flags
);
err
|=
__put_user
(
current
->
sas_ss_size
,
&
frame
->
uc
.
uc_stack
.
ss_size
);
err
|=
__save_altstack
(
&
frame
->
uc
.
uc_stack
,
regs
->
gprs
[
15
]);
err
|=
save_sigregs
(
regs
,
&
frame
->
uc
.
uc_mcontext
);
err
|=
__copy_to_user
(
&
frame
->
uc
.
uc_sigmask
,
set
,
sizeof
(
*
set
));
if
(
err
)
...
...
arch/s390/kernel/syscalls.S
浏览文件 @
e214125a
...
...
@@ -194,7 +194,7 @@ SYSCALL(sys_chown16,sys_ni_syscall,sys32_chown16_wrapper) /* old chown16 syscall
SYSCALL
(
sys_getcwd
,
sys_getcwd
,
sys32_getcwd_wrapper
)
SYSCALL
(
sys_capget
,
sys_capget
,
sys32_capget_wrapper
)
SYSCALL
(
sys_capset
,
sys_capset
,
sys32_capset_wrapper
)
/
*
185
*/
SYSCALL
(
sys_sigaltstack
,
sys_sigaltstack
,
sys32_sigaltstack_wrapper
)
SYSCALL
(
sys_sigaltstack
,
sys_sigaltstack
,
compat_sys_sigaltstack
)
SYSCALL
(
sys_sendfile
,
sys_sendfile64
,
sys32_sendfile_wrapper
)
NI_SYSCALL
/
*
streams1
*/
NI_SYSCALL
/
*
streams2
*/
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录