From: "Philippe Mathieu-Daudé" <philmd@redhat.com>
To: Alistair Francis <alistair.francis@wdc.com>,
qemu-devel@nongnu.org, qemu-riscv@nongnu.org
Cc: palmer@dabbelt.com, laurent@vivier.eu, alistair23@gmail.com
Subject: Re: [PATCH v1 1/2] linux-user: Protect more syscalls
Date: Fri, 21 Feb 2020 09:55:50 +0100 [thread overview]
Message-ID: <d063cb08-3efa-95b0-a9b7-f766f6a0a2ef@redhat.com> (raw)
In-Reply-To: <3fd846fa30a95eb11e2b27d95fce19f3d619d8f0.1582240656.git.alistair.francis@wdc.com>
On 2/21/20 12:18 AM, Alistair Francis wrote:
> New y2038 safe 32-bit architectures (like RISC-V) don't support old
> syscalls with a 32-bit time_t. The kernel defines new *_time64 versions
> of these syscalls. Add some more #ifdefs to syscall.c in linux-user to
> allow us to compile without these old syscalls.
>
> Signed-off-by: Alistair Francis <alistair.francis@wdc.com>
> ---
> linux-user/strace.c | 2 ++
> linux-user/syscall.c | 18 ++++++++++++++++++
> 2 files changed, 20 insertions(+)
>
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index 3d4d684450..2eb8ae3d31 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -770,6 +770,7 @@ print_syscall_ret_newselect(const struct syscallname *name, abi_long ret)
> #define TARGET_TIME_OOP 3 /* leap second in progress */
> #define TARGET_TIME_WAIT 4 /* leap second has occurred */
> #define TARGET_TIME_ERROR 5 /* clock not synchronized */
> +#ifdef TARGET_NR_adjtimex
> static void
> print_syscall_ret_adjtimex(const struct syscallname *name, abi_long ret)
> {
> @@ -808,6 +809,7 @@ print_syscall_ret_adjtimex(const struct syscallname *name, abi_long ret)
>
> gemu_log("\n");
> }
> +#endif
>
> UNUSED static struct flags access_flags[] = {
> FLAG_GENERIC(F_OK),
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index c930577686..44632a7f6a 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -738,8 +738,10 @@ safe_syscall3(ssize_t, read, int, fd, void *, buff, size_t, count)
> safe_syscall3(ssize_t, write, int, fd, const void *, buff, size_t, count)
> safe_syscall4(int, openat, int, dirfd, const char *, pathname, \
> int, flags, mode_t, mode)
> +#if defined(TARGET_NR_wait4)
> safe_syscall4(pid_t, wait4, pid_t, pid, int *, status, int, options, \
> struct rusage *, rusage)
> +#endif
> safe_syscall5(int, waitid, idtype_t, idtype, id_t, id, siginfo_t *, infop, \
> int, options, struct rusage *, rusage)
> safe_syscall3(int, execve, const char *, filename, char **, argv, char **, envp)
> @@ -776,8 +778,10 @@ safe_syscall4(int, rt_sigtimedwait, const sigset_t *, these, siginfo_t *, uinfo,
> const struct timespec *, uts, size_t, sigsetsize)
> safe_syscall4(int, accept4, int, fd, struct sockaddr *, addr, socklen_t *, len,
> int, flags)
> +#if defined(TARGET_NR_nanosleep)
> safe_syscall2(int, nanosleep, const struct timespec *, req,
> struct timespec *, rem)
> +#endif
> #ifdef TARGET_NR_clock_nanosleep
> safe_syscall4(int, clock_nanosleep, const clockid_t, clock, int, flags,
> const struct timespec *, req, struct timespec *, rem)
> @@ -1063,6 +1067,7 @@ static inline abi_long host_to_target_rusage(abi_ulong target_addr,
> return 0;
> }
>
> +#ifdef TARGET_NR_setrlimit
> static inline rlim_t target_to_host_rlim(abi_ulong target_rlim)
> {
> abi_ulong target_rlim_swap;
> @@ -1078,7 +1083,9 @@ static inline rlim_t target_to_host_rlim(abi_ulong target_rlim)
>
> return result;
> }
> +#endif
>
> +#if defined(TARGET_NR_getrlimit) || defined (TARGET_NR_ugetrlimit)
> static inline abi_ulong host_to_target_rlim(rlim_t rlim)
> {
> abi_ulong target_rlim_swap;
> @@ -1092,6 +1099,7 @@ static inline abi_ulong host_to_target_rlim(rlim_t rlim)
>
> return result;
> }
> +#endif
>
> static inline int target_to_host_resource(int code)
> {
> @@ -8584,6 +8592,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> +#if defined(TARGET_NR_gettimeofday)
> case TARGET_NR_gettimeofday:
> {
> struct timeval tv;
> @@ -8594,6 +8603,8 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> +#endif
> +#if defined(TARGET_NR_settimeofday)
> case TARGET_NR_settimeofday:
> {
> struct timeval tv, *ptv = NULL;
> @@ -8615,6 +8626,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
>
> return get_errno(settimeofday(ptv, ptz));
> }
> +#endif
> #if defined(TARGET_NR_select)
> case TARGET_NR_select:
> #if defined(TARGET_WANT_NI_OLD_SELECT)
> @@ -9260,6 +9272,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> return do_syscall(cpu_env, arg1 & 0xffff, arg2, arg3, arg4, arg5,
> arg6, arg7, arg8, 0);
> #endif
> +#if defined(TARGET_NR_wait4)
> case TARGET_NR_wait4:
> {
> int status;
> @@ -9287,6 +9300,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> +#endif
> #ifdef TARGET_NR_swapoff
> case TARGET_NR_swapoff:
> if (!(p = lock_user_string(arg1)))
> @@ -9431,6 +9445,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> return do_vm86(cpu_env, arg1, arg2);
> #endif
> #endif
> +#if defined(TARGET_NR_adjtimex)
> case TARGET_NR_adjtimex:
> {
> struct timex host_buf;
> @@ -9446,6 +9461,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> +#endif
> #if defined(TARGET_NR_clock_adjtime) && defined(CONFIG_CLOCK_ADJTIME)
> case TARGET_NR_clock_adjtime:
> {
> @@ -9971,6 +9987,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> +#if defined(TARGET_NR_nanosleep)
> case TARGET_NR_nanosleep:
> {
> struct timespec req, rem;
> @@ -9981,6 +9998,7 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
> }
> }
> return ret;
> +#endif
> case TARGET_NR_prctl:
> switch (arg1) {
> case PR_GET_PDEATHSIG:
>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
next prev parent reply other threads:[~2020-02-21 8:55 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-20 23:18 [PATCH v1 0/2] linux-user: generate syscall_nr.sh for RISC-V Alistair Francis
2020-02-20 23:18 ` [PATCH v1 1/2] linux-user: Protect more syscalls Alistair Francis
2020-02-21 8:55 ` Philippe Mathieu-Daudé [this message]
2020-02-20 23:18 ` [PATCH v1 2/2] linux-user/riscv: Update the syscall_nr's to the 5.5 kernel Alistair Francis
2020-02-22 11:29 ` Laurent Vivier
2020-02-24 19:30 ` Alistair Francis
2020-02-20 23:31 ` [PATCH v1 0/2] linux-user: generate syscall_nr.sh for RISC-V no-reply
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=d063cb08-3efa-95b0-a9b7-f766f6a0a2ef@redhat.com \
--to=philmd@redhat.com \
--cc=alistair.francis@wdc.com \
--cc=alistair23@gmail.com \
--cc=laurent@vivier.eu \
--cc=palmer@dabbelt.com \
--cc=qemu-devel@nongnu.org \
--cc=qemu-riscv@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).