From: Riku Voipio <riku.voipio@iki.fi>
To: Paul Burton <paul@archlinuxmips.org>
Cc: Riku Voipio <riku.voipio@iki.fi>, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH v2 12/16] linux-user: support {name_to, open_by}_handle_at syscalls
Date: Fri, 27 Jun 2014 16:26:04 +0300 [thread overview]
Message-ID: <20140627132604.GA17562@afflict.kos.to> (raw)
In-Reply-To: <1403391191-18603-13-git-send-email-paul@archlinuxmips.org>
Hi,
Comments inline:
On Sat, Jun 21, 2014 at 11:53:07PM +0100, Paul Burton wrote:
> Implement support for the name_to_handle_at and open_by_handle_at
> syscalls, allowing their use by the target program.
>
> Signed-off-by: Paul Burton <paul@archlinuxmips.org>
> ---
> Changes in v2:
> - None.
> ---
> linux-user/strace.c | 30 ++++++++++++++++++++++++++++++
> linux-user/strace.list | 6 ++++++
> linux-user/syscall.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++
> 3 files changed, 86 insertions(+)
>
> diff --git a/linux-user/strace.c b/linux-user/strace.c
> index ea6c1d2..c20ddf1 100644
> --- a/linux-user/strace.c
> +++ b/linux-user/strace.c
> @@ -1552,6 +1552,36 @@ print_kill(const struct syscallname *name,
> }
> #endif
>
> +#ifdef TARGET_NR_name_to_handle_at
> +static void
> +print_name_to_handle_at(const struct syscallname *name,
> + abi_long arg0, abi_long arg1, abi_long arg2,
> + abi_long arg3, abi_long arg4, abi_long arg5)
> +{
> + print_syscall_prologue(name);
> + print_at_dirfd(arg0, 0);
> + print_string(arg1, 0);
> + print_pointer(arg2, 0);
> + print_pointer(arg3, 0);
> + print_raw_param("0x%x", arg4, 1);
> + print_syscall_epilogue(name);
> +}
> +#endif
> +
> +#ifdef TARGET_NR_open_by_handle_at
> +static void
> +print_open_by_handle_at(const struct syscallname *name,
> + abi_long arg0, abi_long arg1, abi_long arg2,
> + abi_long arg3, abi_long arg4, abi_long arg5)
> +{
> + print_syscall_prologue(name);
> + print_raw_param("%d", arg0, 0);
> + print_pointer(arg2, 0);
> + print_open_flags(arg3, 1);
> + print_syscall_epilogue(name);
> +}
> +#endif
> +
> /*
> * An array of all of the syscalls we know about
> */
> diff --git a/linux-user/strace.list b/linux-user/strace.list
> index 8de972a..147f579 100644
> --- a/linux-user/strace.list
> +++ b/linux-user/strace.list
> @@ -582,6 +582,9 @@
> #ifdef TARGET_NR_munmap
> { TARGET_NR_munmap, "munmap" , NULL, print_munmap, NULL },
> #endif
> +#ifdef TARGET_NR_name_to_handle_at
> +{ TARGET_NR_name_to_handle_at, "name_to_handle_at" , NULL, print_name_to_handle_at, NULL },
> +#endif
> #ifdef TARGET_NR_nanosleep
> { TARGET_NR_nanosleep, "nanosleep" , NULL, NULL, NULL },
> #endif
> @@ -624,6 +627,9 @@
> #ifdef TARGET_NR_openat
> { TARGET_NR_openat, "openat" , NULL, print_openat, NULL },
> #endif
> +#ifdef TARGET_NR_open_by_handle_at
> +{ TARGET_NR_open_by_handle_at, "open_by_handle_at" , NULL, print_open_by_handle_at, NULL },
> +#endif
> #ifdef TARGET_NR_osf_adjtime
> { TARGET_NR_osf_adjtime, "osf_adjtime" , NULL, NULL, NULL },
> #endif
> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
> index fb36f46..0495781 100644
> --- a/linux-user/syscall.c
> +++ b/linux-user/syscall.c
> @@ -5347,6 +5347,56 @@ abi_long do_syscall(void *cpu_env, int num, abi_long arg1,
> unlock_user(p, arg2, 0);
> break;
> #endif
> +#ifdef TARGET_NR_name_to_handle_at
+#if defined(TARGET_NR_name_to_handle_at) && defined(__NR_name_to_handle_at)
This is something that all other syscall definitions need - else qemu won't compile
on old distributions anymore.
> + case TARGET_NR_name_to_handle_at:
> + {
> + struct file_handle *fh;
> + uint32_t sz;
> + int mount_id;
> +
> + if (!(p = lock_user_string(arg2)))
> + goto efault;
> +
> + if (get_user_u32(sz, arg3)) {
> + unlock_user(p, arg2, 0);
> + goto efault;
> + }
> +
> + if (!(fh = lock_user(VERIFY_WRITE, arg3, sizeof(*fh) + sz, 1))) {
> + unlock_user(p, arg2, 0);
> + goto efault;
> + }
> +
> + ret = get_errno(name_to_handle_at(arg1, path(p), fh,
> + &mount_id, arg5));
> +
> + unlock_user(p, arg2, 0);
> + unlock_user(p, arg3, sizeof(*fh) + sz);
I think:
+ unlock_user(fh, arg3, sizeof(*fh) + sz);
> +
> + if (put_user_s32(mount_id, arg4))
> + goto efault;
> + }
> + break;
> +#endif
> +#ifdef TARGET_NR_open_by_handle_at
> + case TARGET_NR_open_by_handle_at:
> + {
> + struct file_handle *fh;
> + uint32_t sz;
> +
> + if (get_user_u32(sz, arg2))
> + goto efault;
> +
> + if (!(fh = lock_user(VERIFY_WRITE, arg2, sizeof(*fh) + sz, 1)))
> + goto efault;
> +
> + ret = get_errno(open_by_handle_at(arg1, fh,
> + target_to_host_bitmask(arg3, fcntl_flags_tbl)));
> +
> + unlock_user(p, arg2, sizeof(*fh) + sz);
And here too:
+ unlock_user(fh, arg2, sizeof(*fh) + sz);
> + }
> + break;
> +#endif
> case TARGET_NR_close:
> ret = get_errno(close(arg1));
> break;
> --
> 2.0.0
next prev parent reply other threads:[~2014-06-27 13:26 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-21 22:52 [Qemu-devel] [PATCH v2 00/16] linux-user fixes & improvements Paul Burton
2014-06-21 22:52 ` [Qemu-devel] [PATCH v2 01/16] linux-user: translate the result of getsockopt SO_TYPE Paul Burton
2014-06-21 22:52 ` [Qemu-devel] [PATCH v2 02/16] linux-user: support SO_ACCEPTCONN getsockopt option Paul Burton
2014-06-21 22:52 ` [Qemu-devel] [PATCH v2 03/16] linux-user: support SO_{SND, RCV}BUFFORCE setsockopt options Paul Burton
2014-06-21 22:52 ` [Qemu-devel] [PATCH v2 04/16] linux-user: support SO_PASSSEC setsockopt option Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 05/16] linux-user: allow NULL arguments to mount Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 06/16] linux-user: support strace of epoll_create1 Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 07/16] linux-user: fix struct target_epoll_event layout for MIPS Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 08/16] linux-user: respect timezone for settimeofday Paul Burton
2014-06-21 23:18 ` Peter Maydell
2014-06-22 10:11 ` Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 09/16] linux-user: allow NULL tv argument " Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 10/16] linux-user: support timerfd_{create, gettime, settime} syscalls Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 11/16] linux-user: support ioprio_{get, set} syscalls Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 12/16] linux-user: support {name_to, open_by}_handle_at syscalls Paul Burton
2014-06-27 13:26 ` Riku Voipio [this message]
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 13/16] linux-user: support the setns syscall Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 14/16] linux-user: support the unshare syscall Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 15/16] linux-user: support the KDSIGACCEPT ioctl Paul Burton
2014-06-21 23:13 ` Peter Maydell
2014-06-22 10:08 ` Paul Burton
2014-06-21 22:53 ` [Qemu-devel] [PATCH v2 16/16] linux-user: support the SIOCGIFINDEX ioctl Paul Burton
2014-06-27 13:30 ` [Qemu-devel] [PATCH v2 00/16] linux-user fixes & improvements Riku Voipio
2014-08-05 11:33 ` Riku Voipio
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=20140627132604.GA17562@afflict.kos.to \
--to=riku.voipio@iki.fi \
--cc=paul@archlinuxmips.org \
--cc=qemu-devel@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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.