Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
26689452
Commit
26689452
authored
Jan 14, 2009
by
Heiko Carstens
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[CVE-2009-0029] s390 specific system call wrappers
Signed-off-by:
Heiko Carstens
<
heiko.carstens@de.ibm.com
>
parent
2b664219
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
50 additions
and
44 deletions
+50
-44
arch/s390/kernel/compat_wrapper.S
arch/s390/kernel/compat_wrapper.S
+2
-2
arch/s390/kernel/entry.h
arch/s390/kernel/entry.h
+8
-7
arch/s390/kernel/process.c
arch/s390/kernel/process.c
+5
-4
arch/s390/kernel/signal.c
arch/s390/kernel/signal.c
+8
-11
arch/s390/kernel/sys_s390.c
arch/s390/kernel/sys_s390.c
+21
-14
arch/s390/kernel/syscalls.S
arch/s390/kernel/syscalls.S
+6
-6
No files found.
arch/s390/kernel/compat_wrapper.S
View file @
26689452
...
...
@@ -547,7 +547,7 @@ sys32_setdomainname_wrapper:
.
globl
sys32_newuname_wrapper
sys32_newuname_wrapper
:
llgtr
%
r2
,%
r2
#
struct
new_utsname
*
jg
s
390x_newuname
#
branch
to
system
call
jg
s
ys_s390_newuname
#
branch
to
system
call
.
globl
compat_sys_adjtimex_wrapper
compat_sys_adjtimex_wrapper
:
...
...
@@ -615,7 +615,7 @@ sys32_sysfs_wrapper:
.
globl
sys32_personality_wrapper
sys32_personality_wrapper
:
llgfr
%
r2
,%
r2
#
unsigned
long
jg
s
390x
_personality
#
branch
to
system
call
jg
s
ys_s390
_personality
#
branch
to
system
call
.
globl
sys32_setfsuid16_wrapper
sys32_setfsuid16_wrapper
:
...
...
arch/s390/kernel/entry.h
View file @
26689452
...
...
@@ -31,21 +31,22 @@ struct old_sigaction;
struct
sel_arg_struct
;
long
sys_mmap2
(
struct
mmap_arg_struct
__user
*
arg
);
long
old_mmap
(
struct
mmap_arg_struct
__user
*
arg
);
long
sys_s390_
old_mmap
(
struct
mmap_arg_struct
__user
*
arg
);
long
sys_ipc
(
uint
call
,
int
first
,
unsigned
long
second
,
unsigned
long
third
,
void
__user
*
ptr
);
long
s
390x
_newuname
(
struct
new_utsname
__user
*
name
);
long
s
390x
_personality
(
unsigned
long
personality
);
long
s390_fadvise64
(
int
fd
,
u32
offset_high
,
u32
offset_low
,
long
s
ys_s390
_newuname
(
struct
new_utsname
__user
*
name
);
long
s
ys_s390
_personality
(
unsigned
long
personality
);
long
s
ys_s
390_fadvise64
(
int
fd
,
u32
offset_high
,
u32
offset_low
,
size_t
len
,
int
advice
);
long
s390_fadvise64_64
(
struct
fadvise64_64_args
__user
*
args
);
long
s390_fallocate
(
int
fd
,
int
mode
,
loff_t
offset
,
u32
len_high
,
u32
len_low
);
long
sys_s390_fadvise64_64
(
struct
fadvise64_64_args
__user
*
args
);
long
sys_s390_fallocate
(
int
fd
,
int
mode
,
loff_t
offset
,
u32
len_high
,
u32
len_low
);
long
sys_fork
(
void
);
long
sys_clone
(
void
);
long
sys_vfork
(
void
);
void
execve_tail
(
void
);
long
sys_execve
(
void
);
int
sys_sigsuspend
(
int
history0
,
int
history1
,
old_sigset_t
mask
);
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
);
...
...
arch/s390/kernel/process.c
View file @
26689452
...
...
@@ -39,6 +39,7 @@
#include <linux/tick.h>
#include <linux/elfcore.h>
#include <linux/kernel_stat.h>
#include <linux/syscalls.h>
#include <asm/uaccess.h>
#include <asm/pgtable.h>
#include <asm/system.h>
...
...
@@ -225,13 +226,13 @@ int copy_thread(int nr, unsigned long clone_flags, unsigned long new_stackp,
return
0
;
}
asmlinkage
long
sys_fork
(
void
)
SYSCALL_DEFINE0
(
fork
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
return
do_fork
(
SIGCHLD
,
regs
->
gprs
[
15
],
regs
,
0
,
NULL
,
NULL
);
}
asmlinkage
long
sys_clone
(
void
)
SYSCALL_DEFINE0
(
clone
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
unsigned
long
clone_flags
;
...
...
@@ -258,7 +259,7 @@ asmlinkage long sys_clone(void)
* do not have enough call-clobbered registers to hold all
* the information you need.
*/
asmlinkage
long
sys_vfork
(
void
)
SYSCALL_DEFINE0
(
vfork
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
return
do_fork
(
CLONE_VFORK
|
CLONE_VM
|
SIGCHLD
,
...
...
@@ -278,7 +279,7 @@ asmlinkage void execve_tail(void)
/*
* sys_execve() executes a new program.
*/
asmlinkage
long
sys_execve
(
void
)
SYSCALL_DEFINE0
(
execve
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
char
*
filename
;
...
...
arch/s390/kernel/signal.c
View file @
26689452
...
...
@@ -25,6 +25,7 @@
#include <linux/personality.h>
#include <linux/binfmts.h>
#include <linux/tracehook.h>
#include <linux/syscalls.h>
#include <asm/ucontext.h>
#include <asm/uaccess.h>
#include <asm/lowcore.h>
...
...
@@ -53,8 +54,7 @@ typedef struct
/*
* Atomically swap in the new signal mask, and wait for a signal.
*/
asmlinkage
int
sys_sigsuspend
(
int
history0
,
int
history1
,
old_sigset_t
mask
)
SYSCALL_DEFINE3
(
sigsuspend
,
int
,
history0
,
int
,
history1
,
old_sigset_t
,
mask
)
{
mask
&=
_BLOCKABLE
;
spin_lock_irq
(
&
current
->
sighand
->
siglock
);
...
...
@@ -70,9 +70,8 @@ sys_sigsuspend(int history0, int history1, old_sigset_t mask)
return
-
ERESTARTNOHAND
;
}
asmlinkage
long
sys_sigaction
(
int
sig
,
const
struct
old_sigaction
__user
*
act
,
struct
old_sigaction
__user
*
oact
)
SYSCALL_DEFINE3
(
sigaction
,
int
,
sig
,
const
struct
old_sigaction
__user
*
,
act
,
struct
old_sigaction
__user
*
,
oact
)
{
struct
k_sigaction
new_ka
,
old_ka
;
int
ret
;
...
...
@@ -102,15 +101,13 @@ sys_sigaction(int sig, const struct old_sigaction __user *act,
return
ret
;
}
asmlinkage
long
sys_sigaltstack
(
const
stack_t
__user
*
uss
,
stack_t
__user
*
uoss
)
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
)
{
...
...
@@ -164,7 +161,7 @@ static int restore_sigregs(struct pt_regs *regs, _sigregs __user *sregs)
return
0
;
}
asmlinkage
long
sys_sigreturn
(
void
)
SYSCALL_DEFINE0
(
sigreturn
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
sigframe
__user
*
frame
=
(
sigframe
__user
*
)
regs
->
gprs
[
15
];
...
...
@@ -191,7 +188,7 @@ asmlinkage long sys_sigreturn(void)
return
0
;
}
asmlinkage
long
sys_rt_sigreturn
(
void
)
SYSCALL_DEFINE0
(
rt_sigreturn
)
{
struct
pt_regs
*
regs
=
task_pt_regs
(
current
);
rt_sigframe
__user
*
frame
=
(
rt_sigframe
__user
*
)
regs
->
gprs
[
15
];
...
...
arch/s390/kernel/sys_s390.c
View file @
26689452
...
...
@@ -29,6 +29,7 @@
#include <linux/personality.h>
#include <linux/unistd.h>
#include <linux/ipc.h>
#include <linux/syscalls.h>
#include <asm/uaccess.h>
#include "entry.h"
...
...
@@ -74,7 +75,7 @@ struct mmap_arg_struct {
unsigned
long
offset
;
};
asmlinkage
long
sys_mmap2
(
struct
mmap_arg_struct
__user
*
arg
)
SYSCALL_DEFINE1
(
mmap2
,
struct
mmap_arg_struct
__user
*
,
arg
)
{
struct
mmap_arg_struct
a
;
int
error
=
-
EFAULT
;
...
...
@@ -86,7 +87,7 @@ asmlinkage long sys_mmap2(struct mmap_arg_struct __user *arg)
return
error
;
}
asmlinkage
long
old_mmap
(
struct
mmap_arg_struct
__user
*
arg
)
SYSCALL_DEFINE1
(
s390_old_mmap
,
struct
mmap_arg_struct
__user
*
,
arg
)
{
struct
mmap_arg_struct
a
;
long
error
=
-
EFAULT
;
...
...
@@ -108,8 +109,8 @@ asmlinkage long old_mmap(struct mmap_arg_struct __user *arg)
*
* This is really horribly ugly.
*/
asmlinkage
long
sys_ipc
(
uint
call
,
int
first
,
unsigned
long
second
,
unsigned
long
third
,
void
__user
*
ptr
)
SYSCALL_DEFINE5
(
ipc
,
uint
,
call
,
int
,
first
,
unsigned
long
,
second
,
unsigned
long
,
third
,
void
__user
*
,
ptr
)
{
struct
ipc_kludge
tmp
;
int
ret
;
...
...
@@ -175,7 +176,7 @@ asmlinkage long sys_ipc(uint call, int first, unsigned long second,
}
#ifdef CONFIG_64BIT
asmlinkage
long
s390x_newuname
(
struct
new_utsname
__user
*
name
)
SYSCALL_DEFINE1
(
s390_newuname
,
struct
new_utsname
__user
*
,
name
)
{
int
ret
=
sys_newuname
(
name
);
...
...
@@ -186,7 +187,7 @@ asmlinkage long s390x_newuname(struct new_utsname __user *name)
return
ret
;
}
asmlinkage
long
s390x_personality
(
unsigned
long
personality
)
SYSCALL_DEFINE1
(
s390_personality
,
unsigned
long
,
personality
)
{
int
ret
;
...
...
@@ -205,15 +206,13 @@ asmlinkage long s390x_personality(unsigned long personality)
*/
#ifndef CONFIG_64BIT
asmlinkage
long
s390_fadvise64
(
int
fd
,
u32
offset_high
,
u32
offset_low
,
size_t
len
,
int
advice
)
SYSCALL_DEFINE5
(
s390_fadvise64
,
int
,
fd
,
u32
,
offset_high
,
u32
,
offset_low
,
size_t
,
len
,
int
,
advice
)
{
return
sys_fadvise64
(
fd
,
(
u64
)
offset_high
<<
32
|
offset_low
,
len
,
advice
);
}
#endif
struct
fadvise64_64_args
{
int
fd
;
long
long
offset
;
...
...
@@ -221,8 +220,7 @@ struct fadvise64_64_args {
int
advice
;
};
asmlinkage
long
s390_fadvise64_64
(
struct
fadvise64_64_args
__user
*
args
)
SYSCALL_DEFINE1
(
s390_fadvise64_64
,
struct
fadvise64_64_args
__user
*
,
args
)
{
struct
fadvise64_64_args
a
;
...
...
@@ -231,7 +229,6 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args)
return
sys_fadvise64_64
(
a
.
fd
,
a
.
offset
,
a
.
len
,
a
.
advice
);
}
#ifndef CONFIG_64BIT
/*
* This is a wrapper to call sys_fallocate(). For 31 bit s390 the last
* 64 bit argument "len" is split into the upper and lower 32 bits. The
...
...
@@ -244,9 +241,19 @@ s390_fadvise64_64(struct fadvise64_64_args __user *args)
* to
* %r2: fd, %r3: mode, %r4/%r5: offset, 96(%r15)-103(%r15): len
*/
asmlinkage
long
s390_fallocate
(
int
fd
,
int
mode
,
loff_t
offset
,
SYSCALL_DEFINE
(
s390_fallocate
)
(
int
fd
,
int
mode
,
loff_t
offset
,
u32
len_high
,
u32
len_low
)
{
return
sys_fallocate
(
fd
,
mode
,
offset
,
((
u64
)
len_high
<<
32
)
|
len_low
);
}
#ifdef CONFIG_HAVE_SYSCALL_WRAPPERS
asmlinkage
long
SyS_s390_fallocate
(
long
fd
,
long
mode
,
loff_t
offset
,
long
len_high
,
long
len_low
)
{
return
SYSC_s390_fallocate
((
int
)
fd
,
(
int
)
mode
,
offset
,
(
u32
)
len_high
,
(
u32
)
len_low
);
}
SYSCALL_ALIAS
(
sys_s390_fallocate
,
SyS_s390_fallocate
);
#endif
#endif
arch/s390/kernel/syscalls.S
View file @
26689452
...
...
@@ -98,7 +98,7 @@ SYSCALL(sys_uselib,sys_uselib,sys32_uselib_wrapper)
SYSCALL
(
sys_swapon
,
sys_swapon
,
sys32_swapon_wrapper
)
SYSCALL
(
sys_reboot
,
sys_reboot
,
sys32_reboot_wrapper
)
SYSCALL
(
sys_ni_syscall
,
sys_ni_syscall
,
old32_readdir_wrapper
)
/
*
old
readdir
syscall
*/
SYSCALL
(
old_mmap
,
old_mmap
,
old32_mmap_wrapper
)
/
*
90
*/
SYSCALL
(
sys_s390_old_mmap
,
sys_s390_old_mmap
,
old32_mmap_wrapper
)
/
*
90
*/
SYSCALL
(
sys_munmap
,
sys_munmap
,
sys32_munmap_wrapper
)
SYSCALL
(
sys_truncate
,
sys_truncate
,
sys32_truncate_wrapper
)
SYSCALL
(
sys_ftruncate
,
sys_ftruncate
,
sys32_ftruncate_wrapper
)
...
...
@@ -130,7 +130,7 @@ SYSCALL(sys_fsync,sys_fsync,sys32_fsync_wrapper)
SYSCALL
(
sys_sigreturn
,
sys_sigreturn
,
sys32_sigreturn
)
SYSCALL
(
sys_clone
,
sys_clone
,
sys32_clone
)
/
*
120
*/
SYSCALL
(
sys_setdomainname
,
sys_setdomainname
,
sys32_setdomainname_wrapper
)
SYSCALL
(
sys_newuname
,
s
390x
_newuname
,
sys32_newuname_wrapper
)
SYSCALL
(
sys_newuname
,
s
ys_s390
_newuname
,
sys32_newuname_wrapper
)
NI_SYSCALL
/
*
modify_ldt
for
i386
*/
SYSCALL
(
sys_adjtimex
,
sys_adjtimex
,
compat_sys_adjtimex_wrapper
)
SYSCALL
(
sys_mprotect
,
sys_mprotect
,
sys32_mprotect_wrapper
)
/
*
125
*/
...
...
@@ -144,7 +144,7 @@ SYSCALL(sys_getpgid,sys_getpgid,sys32_getpgid_wrapper)
SYSCALL
(
sys_fchdir
,
sys_fchdir
,
sys32_fchdir_wrapper
)
SYSCALL
(
sys_bdflush
,
sys_bdflush
,
sys32_bdflush_wrapper
)
SYSCALL
(
sys_sysfs
,
sys_sysfs
,
sys32_sysfs_wrapper
)
/
*
135
*/
SYSCALL
(
sys_personality
,
s
390x
_personality
,
sys32_personality_wrapper
)
SYSCALL
(
sys_personality
,
s
ys_s390
_personality
,
sys32_personality_wrapper
)
NI_SYSCALL
/
*
for
afs_syscall
*/
SYSCALL
(
sys_setfsuid16
,
sys_ni_syscall
,
sys32_setfsuid16_wrapper
)
/
*
old
setfsuid16
syscall
*/
SYSCALL
(
sys_setfsgid16
,
sys_ni_syscall
,
sys32_setfsgid16_wrapper
)
/
*
old
setfsgid16
syscall
*/
...
...
@@ -261,7 +261,7 @@ SYSCALL(sys_epoll_create,sys_epoll_create,sys_epoll_create_wrapper)
SYSCALL
(
sys_epoll_ctl
,
sys_epoll_ctl
,
sys_epoll_ctl_wrapper
)
/
*
250
*/
SYSCALL
(
sys_epoll_wait
,
sys_epoll_wait
,
sys_epoll_wait_wrapper
)
SYSCALL
(
sys_set_tid_address
,
sys_set_tid_address
,
sys32_set_tid_address_wrapper
)
SYSCALL
(
s390_fadvise64
,
sys_fadvise64_64
,
sys32_fadvise64_wrapper
)
SYSCALL
(
s
ys_s
390_fadvise64
,
sys_fadvise64_64
,
sys32_fadvise64_wrapper
)
SYSCALL
(
sys_timer_create
,
sys_timer_create
,
sys32_timer_create_wrapper
)
SYSCALL
(
sys_timer_settime
,
sys_timer_settime
,
sys32_timer_settime_wrapper
)
/
*
255
*/
SYSCALL
(
sys_timer_gettime
,
sys_timer_gettime
,
sys32_timer_gettime_wrapper
)
...
...
@@ -272,7 +272,7 @@ SYSCALL(sys_clock_gettime,sys_clock_gettime,sys32_clock_gettime_wrapper) /* 260
SYSCALL
(
sys_clock_getres
,
sys_clock_getres
,
sys32_clock_getres_wrapper
)
SYSCALL
(
sys_clock_nanosleep
,
sys_clock_nanosleep
,
sys32_clock_nanosleep_wrapper
)
NI_SYSCALL
/
*
reserved
for
vserver
*/
SYSCALL
(
s390_fadvise64_64
,
sys_ni_syscall
,
sys32_fadvise64_64_wrapper
)
SYSCALL
(
s
ys_s
390_fadvise64_64
,
sys_ni_syscall
,
sys32_fadvise64_64_wrapper
)
SYSCALL
(
sys_statfs64
,
sys_statfs64
,
compat_sys_statfs64_wrapper
)
SYSCALL
(
sys_fstatfs64
,
sys_fstatfs64
,
compat_sys_fstatfs64_wrapper
)
SYSCALL
(
sys_remap_file_pages
,
sys_remap_file_pages
,
sys32_remap_file_pages_wrapper
)
...
...
@@ -322,7 +322,7 @@ NI_SYSCALL /* 310 sys_move_pages */
SYSCALL
(
sys_getcpu
,
sys_getcpu
,
sys_getcpu_wrapper
)
SYSCALL
(
sys_epoll_pwait
,
sys_epoll_pwait
,
compat_sys_epoll_pwait_wrapper
)
SYSCALL
(
sys_utimes
,
sys_utimes
,
compat_sys_utimes_wrapper
)
SYSCALL
(
s390_fallocate
,
sys_fallocate
,
sys_fallocate_wrapper
)
SYSCALL
(
s
ys_s
390_fallocate
,
sys_fallocate
,
sys_fallocate_wrapper
)
SYSCALL
(
sys_utimensat
,
sys_utimensat
,
compat_sys_utimensat_wrapper
)
/
*
315
*/
SYSCALL
(
sys_signalfd
,
sys_signalfd
,
compat_sys_signalfd_wrapper
)
NI_SYSCALL
/
*
317
old
sys_timer_fd
*/
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment