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
33dd955d
Commit
33dd955d
authored
May 27, 2017
by
Al Viro
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'work.sys_wait' into misc.alpha
parents
9ba3eb51
92ebce5a
Changes
7
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
188 additions
and
258 deletions
+188
-258
arch/alpha/kernel/osf_sys.c
arch/alpha/kernel/osf_sys.c
+14
-37
arch/x86/include/asm/uaccess.h
arch/x86/include/asm/uaccess.h
+1
-1
include/linux/resource.h
include/linux/resource.h
+1
-1
include/linux/sched/task.h
include/linux/sched/task.h
+2
-0
kernel/compat.c
kernel/compat.c
+0
-66
kernel/exit.c
kernel/exit.c
+164
-143
kernel/sys.c
kernel/sys.c
+6
-10
No files found.
arch/alpha/kernel/osf_sys.c
View file @
33dd955d
...
...
@@ -1178,46 +1178,23 @@ SYSCALL_DEFINE2(osf_getrusage, int, who, struct rusage32 __user *, ru)
SYSCALL_DEFINE4
(
osf_wait4
,
pid_t
,
pid
,
int
__user
*
,
ustatus
,
int
,
options
,
struct
rusage32
__user
*
,
ur
)
{
struct
rusage
r
;
long
ret
,
err
;
unsigned
int
status
=
0
;
mm_segment_t
old_fs
;
struct
rusage
r
;
long
err
=
kernel_wait4
(
pid
,
&
status
,
options
,
&
r
);
if
(
err
<=
0
)
return
err
;
if
(
put_user
(
status
,
ustatus
))
return
-
EFAULT
;
if
(
!
ur
)
return
sys_wait4
(
pid
,
ustatus
,
options
,
NULL
);
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
ret
=
sys_wait4
(
pid
,
(
unsigned
int
__user
*
)
&
status
,
options
,
(
struct
rusage
__user
*
)
&
r
);
set_fs
(
old_fs
);
if
(
!
access_ok
(
VERIFY_WRITE
,
ur
,
sizeof
(
*
ur
)))
return
err
;
if
(
put_tv32
(
&
ur
->
ru_utime
,
&
r
.
ru_utime
))
return
-
EFAULT
;
err
=
0
;
err
|=
put_user
(
status
,
ustatus
);
err
|=
__put_user
(
r
.
ru_utime
.
tv_sec
,
&
ur
->
ru_utime
.
tv_sec
);
err
|=
__put_user
(
r
.
ru_utime
.
tv_usec
,
&
ur
->
ru_utime
.
tv_usec
);
err
|=
__put_user
(
r
.
ru_stime
.
tv_sec
,
&
ur
->
ru_stime
.
tv_sec
);
err
|=
__put_user
(
r
.
ru_stime
.
tv_usec
,
&
ur
->
ru_stime
.
tv_usec
);
err
|=
__put_user
(
r
.
ru_maxrss
,
&
ur
->
ru_maxrss
);
err
|=
__put_user
(
r
.
ru_ixrss
,
&
ur
->
ru_ixrss
);
err
|=
__put_user
(
r
.
ru_idrss
,
&
ur
->
ru_idrss
);
err
|=
__put_user
(
r
.
ru_isrss
,
&
ur
->
ru_isrss
);
err
|=
__put_user
(
r
.
ru_minflt
,
&
ur
->
ru_minflt
);
err
|=
__put_user
(
r
.
ru_majflt
,
&
ur
->
ru_majflt
);
err
|=
__put_user
(
r
.
ru_nswap
,
&
ur
->
ru_nswap
);
err
|=
__put_user
(
r
.
ru_inblock
,
&
ur
->
ru_inblock
);
err
|=
__put_user
(
r
.
ru_oublock
,
&
ur
->
ru_oublock
);
err
|=
__put_user
(
r
.
ru_msgsnd
,
&
ur
->
ru_msgsnd
);
err
|=
__put_user
(
r
.
ru_msgrcv
,
&
ur
->
ru_msgrcv
);
err
|=
__put_user
(
r
.
ru_nsignals
,
&
ur
->
ru_nsignals
);
err
|=
__put_user
(
r
.
ru_nvcsw
,
&
ur
->
ru_nvcsw
);
err
|=
__put_user
(
r
.
ru_nivcsw
,
&
ur
->
ru_nivcsw
);
return
err
?
err
:
ret
;
if
(
put_tv32
(
&
ur
->
ru_stime
,
&
r
.
ru_stime
))
return
-
EFAULT
;
if
(
copy_to_user
(
&
ur
->
ru_maxrss
,
&
r
.
ru_maxrss
,
sizeof
(
struct
rusage32
)
-
offsetof
(
struct
rusage32
,
ru_maxrss
)))
return
-
EFAULT
;
return
err
;
}
/*
...
...
arch/x86/include/asm/uaccess.h
View file @
33dd955d
...
...
@@ -703,7 +703,7 @@ extern struct movsl_mask {
#define unsafe_put_user(x, ptr, err_label) \
do { \
int __pu_err; \
__put_user_size((x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \
__put_user_size((
__typeof__(*(ptr)))(
x), (ptr), sizeof(*(ptr)), __pu_err, -EFAULT); \
if (unlikely(__pu_err)) goto err_label; \
} while (0)
...
...
include/linux/resource.h
View file @
33dd955d
...
...
@@ -6,7 +6,7 @@
struct
task_struct
;
int
getrusage
(
struct
task_struct
*
p
,
int
who
,
struct
rusage
__user
*
ru
);
void
getrusage
(
struct
task_struct
*
p
,
int
who
,
struct
rusage
*
ru
);
int
do_prlimit
(
struct
task_struct
*
tsk
,
unsigned
int
resource
,
struct
rlimit
*
new_rlim
,
struct
rlimit
*
old_rlim
);
...
...
include/linux/sched/task.h
View file @
33dd955d
...
...
@@ -9,6 +9,7 @@
#include <linux/sched.h>
struct
task_struct
;
struct
rusage
;
union
thread_union
;
/*
...
...
@@ -74,6 +75,7 @@ extern long _do_fork(unsigned long, unsigned long, unsigned long, int __user *,
extern
long
do_fork
(
unsigned
long
,
unsigned
long
,
unsigned
long
,
int
__user
*
,
int
__user
*
);
struct
task_struct
*
fork_idle
(
int
);
extern
pid_t
kernel_thread
(
int
(
*
fn
)(
void
*
),
void
*
arg
,
unsigned
long
flags
);
extern
long
kernel_wait4
(
pid_t
,
int
*
,
int
,
struct
rusage
*
);
extern
void
free_task
(
struct
task_struct
*
tsk
);
...
...
kernel/compat.c
View file @
33dd955d
...
...
@@ -543,72 +543,6 @@ int put_compat_rusage(const struct rusage *r, struct compat_rusage __user *ru)
return
0
;
}
COMPAT_SYSCALL_DEFINE4
(
wait4
,
compat_pid_t
,
pid
,
compat_uint_t
__user
*
,
stat_addr
,
int
,
options
,
struct
compat_rusage
__user
*
,
ru
)
{
if
(
!
ru
)
{
return
sys_wait4
(
pid
,
stat_addr
,
options
,
NULL
);
}
else
{
struct
rusage
r
;
int
ret
;
unsigned
int
status
;
mm_segment_t
old_fs
=
get_fs
();
set_fs
(
KERNEL_DS
);
ret
=
sys_wait4
(
pid
,
(
stat_addr
?
(
unsigned
int
__user
*
)
&
status
:
NULL
),
options
,
(
struct
rusage
__user
*
)
&
r
);
set_fs
(
old_fs
);
if
(
ret
>
0
)
{
if
(
put_compat_rusage
(
&
r
,
ru
))
return
-
EFAULT
;
if
(
stat_addr
&&
put_user
(
status
,
stat_addr
))
return
-
EFAULT
;
}
return
ret
;
}
}
COMPAT_SYSCALL_DEFINE5
(
waitid
,
int
,
which
,
compat_pid_t
,
pid
,
struct
compat_siginfo
__user
*
,
uinfo
,
int
,
options
,
struct
compat_rusage
__user
*
,
uru
)
{
siginfo_t
info
;
struct
rusage
ru
;
long
ret
;
mm_segment_t
old_fs
=
get_fs
();
memset
(
&
info
,
0
,
sizeof
(
info
));
set_fs
(
KERNEL_DS
);
ret
=
sys_waitid
(
which
,
pid
,
(
siginfo_t
__user
*
)
&
info
,
options
,
uru
?
(
struct
rusage
__user
*
)
&
ru
:
NULL
);
set_fs
(
old_fs
);
if
((
ret
<
0
)
||
(
info
.
si_signo
==
0
))
return
ret
;
if
(
uru
)
{
/* sys_waitid() overwrites everything in ru */
if
(
COMPAT_USE_64BIT_TIME
)
ret
=
copy_to_user
(
uru
,
&
ru
,
sizeof
(
ru
));
else
ret
=
put_compat_rusage
(
&
ru
,
uru
);
if
(
ret
)
return
-
EFAULT
;
}
BUG_ON
(
info
.
si_code
&
__SI_MASK
);
info
.
si_code
|=
__SI_CHLD
;
return
copy_siginfo_to_user32
(
uinfo
,
&
info
);
}
static
int
compat_get_user_cpu_mask
(
compat_ulong_t
__user
*
user_mask_ptr
,
unsigned
len
,
struct
cpumask
*
new_mask
)
{
...
...
kernel/exit.c
View file @
33dd955d
This diff is collapsed.
Click to expand it.
kernel/sys.c
View file @
33dd955d
...
...
@@ -1552,7 +1552,7 @@ static void accumulate_thread_rusage(struct task_struct *t, struct rusage *r)
r
->
ru_oublock
+=
task_io_get_oublock
(
t
);
}
static
void
k_
getrusage
(
struct
task_struct
*
p
,
int
who
,
struct
rusage
*
r
)
void
getrusage
(
struct
task_struct
*
p
,
int
who
,
struct
rusage
*
r
)
{
struct
task_struct
*
t
;
unsigned
long
flags
;
...
...
@@ -1626,20 +1626,16 @@ static void k_getrusage(struct task_struct *p, int who, struct rusage *r)
r
->
ru_maxrss
=
maxrss
*
(
PAGE_SIZE
/
1024
);
/* convert pages to KBs */
}
int
getrusage
(
struct
task_struct
*
p
,
int
who
,
struct
rusage
__user
*
ru
)
SYSCALL_DEFINE2
(
getrusage
,
int
,
who
,
struct
rusage
__user
*
,
ru
)
{
struct
rusage
r
;
k_getrusage
(
p
,
who
,
&
r
);
return
copy_to_user
(
ru
,
&
r
,
sizeof
(
r
))
?
-
EFAULT
:
0
;
}
SYSCALL_DEFINE2
(
getrusage
,
int
,
who
,
struct
rusage
__user
*
,
ru
)
{
if
(
who
!=
RUSAGE_SELF
&&
who
!=
RUSAGE_CHILDREN
&&
who
!=
RUSAGE_THREAD
)
return
-
EINVAL
;
return
getrusage
(
current
,
who
,
ru
);
getrusage
(
current
,
who
,
&
r
);
return
copy_to_user
(
ru
,
&
r
,
sizeof
(
r
))
?
-
EFAULT
:
0
;
}
#ifdef CONFIG_COMPAT
...
...
@@ -1651,7 +1647,7 @@ COMPAT_SYSCALL_DEFINE2(getrusage, int, who, struct compat_rusage __user *, ru)
who
!=
RUSAGE_THREAD
)
return
-
EINVAL
;
k_
getrusage
(
current
,
who
,
&
r
);
getrusage
(
current
,
who
,
&
r
);
return
put_compat_rusage
(
&
r
,
ru
);
}
#endif
...
...
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