diff options
| author | Tycho Andersen <tycho@tycho.ws> | 2018-12-09 13:24:12 -0500 |
|---|---|---|
| committer | Kees Cook <keescook@chromium.org> | 2018-12-11 19:28:41 -0500 |
| commit | a5662e4d81c4d4b08140c625d0f3c50b15786252 (patch) | |
| tree | d21aaa33543bb1c440fa264ba99c0feb36b3536d /kernel/seccomp.c | |
| parent | db5113911abaa7eb20cf115d4339959c1aecea95 (diff) | |
seccomp: switch system call argument type to void *
The const qualifier causes problems for any code that wants to write to the
third argument of the seccomp syscall, as we will do in a future patch in
this series.
The third argument to the seccomp syscall is documented as void *, so
rather than just dropping the const, let's switch everything to use void *
as well.
I believe this is safe because of 1. the documentation above, 2. there's no
real type information exported about syscalls anywhere besides the man
pages.
Signed-off-by: Tycho Andersen <tycho@tycho.ws>
CC: Kees Cook <keescook@chromium.org>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Eric W. Biederman <ebiederm@xmission.com>
CC: "Serge E. Hallyn" <serge@hallyn.com>
Acked-by: Serge Hallyn <serge@hallyn.com>
CC: Christian Brauner <christian@brauner.io>
CC: Tyler Hicks <tyhicks@canonical.com>
CC: Akihiro Suda <suda.akihiro@lab.ntt.co.jp>
Signed-off-by: Kees Cook <keescook@chromium.org>
Diffstat (limited to 'kernel/seccomp.c')
| -rw-r--r-- | kernel/seccomp.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/kernel/seccomp.c b/kernel/seccomp.c index 96afc32e041d..393e029f778a 100644 --- a/kernel/seccomp.c +++ b/kernel/seccomp.c | |||
| @@ -924,7 +924,7 @@ static long seccomp_get_action_avail(const char __user *uaction) | |||
| 924 | 924 | ||
| 925 | /* Common entry point for both prctl and syscall. */ | 925 | /* Common entry point for both prctl and syscall. */ |
| 926 | static long do_seccomp(unsigned int op, unsigned int flags, | 926 | static long do_seccomp(unsigned int op, unsigned int flags, |
| 927 | const char __user *uargs) | 927 | void __user *uargs) |
| 928 | { | 928 | { |
| 929 | switch (op) { | 929 | switch (op) { |
| 930 | case SECCOMP_SET_MODE_STRICT: | 930 | case SECCOMP_SET_MODE_STRICT: |
| @@ -944,7 +944,7 @@ static long do_seccomp(unsigned int op, unsigned int flags, | |||
| 944 | } | 944 | } |
| 945 | 945 | ||
| 946 | SYSCALL_DEFINE3(seccomp, unsigned int, op, unsigned int, flags, | 946 | SYSCALL_DEFINE3(seccomp, unsigned int, op, unsigned int, flags, |
| 947 | const char __user *, uargs) | 947 | void __user *, uargs) |
| 948 | { | 948 | { |
| 949 | return do_seccomp(op, flags, uargs); | 949 | return do_seccomp(op, flags, uargs); |
| 950 | } | 950 | } |
| @@ -956,10 +956,10 @@ SYSCALL_DEFINE3(seccomp, unsigned int, op, unsigned int, flags, | |||
| 956 | * | 956 | * |
| 957 | * Returns 0 on success or -EINVAL on failure. | 957 | * Returns 0 on success or -EINVAL on failure. |
| 958 | */ | 958 | */ |
| 959 | long prctl_set_seccomp(unsigned long seccomp_mode, char __user *filter) | 959 | long prctl_set_seccomp(unsigned long seccomp_mode, void __user *filter) |
| 960 | { | 960 | { |
| 961 | unsigned int op; | 961 | unsigned int op; |
| 962 | char __user *uargs; | 962 | void __user *uargs; |
| 963 | 963 | ||
| 964 | switch (seccomp_mode) { | 964 | switch (seccomp_mode) { |
| 965 | case SECCOMP_MODE_STRICT: | 965 | case SECCOMP_MODE_STRICT: |
