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
nexedi
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
Show 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