From: Paul Burton <paulburton89@gmail.com>
To: Riku Voipio <riku.voipio@iki.fi>
Cc: qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [12/16] linux-user: support {name_to, open_by}_handle_at syscalls
Date: Tue, 26 Aug 2014 15:21:30 +0100 [thread overview]
Message-ID: <20140826142130.GE2333@gmail.com> (raw)
In-Reply-To: <20140826123041.GA27386@afflict.kos.to>
[-- Attachment #1: Type: text/plain, Size: 5789 bytes --]
On Tue, Aug 26, 2014 at 03:30:41PM +0300, Riku Voipio wrote:
> Hi Paul,
>
> On Sun, Jun 15, 2014 at 05:18:29PM +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.
>
> What was your testcase for these syscalls? I usually use LTP for testing
> syscalls, but there is no testcase for name_to_handle_at and
> open_by_handle_at.
Hi Riku,
First thanks for taking care of a whole bunch of these patches, and my
apologies for not being around or responsive! Meatspace has been keeping
me busy, but has calmed down for now so I should be able to find more
time to contribute :)
Actually my test for these was that a mipsel systemd could boot from
init through to a login prompt inside a container on my x86-64 host
using QEMU via binfmt_misc. That does however also require a few more
patches which I need to clean up before submitting. But you can find
them here in the short term if you're interested:
https://github.com/Arch-Linux-MIPS/qemu
Paul
> Riku
>
> > Signed-off-by: Paul Burton <paul@archlinuxmips.org>
> > ---
> > 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 c7f176a..192ad3a 100644
> > --- a/linux-user/syscall.c
> > +++ b/linux-user/syscall.c
> > @@ -5349,6 +5349,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
> > + 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);
> > +
> > + 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);
> > + }
> > + break;
> > +#endif
> > case TARGET_NR_close:
> > ret = get_errno(close(arg1));
> > break;
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 819 bytes --]
next prev parent reply other threads:[~2014-08-26 14:21 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-15 16:18 [Qemu-devel] [PATCH 00/16] linux-user fixes & improvements Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 01/16] linux-user: translate the result of getsockopt SO_TYPE Paul Burton
2014-06-21 9:39 ` Riku Voipio
2014-06-21 17:39 ` Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 02/16] linux-user: support SO_ACCEPTCONN getsockopt option Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 03/16] linux-user: support SO_{SND, RCV}BUFFORCE setsockopt options Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 04/16] linux-user: support SO_PASSSEC setsockopt option Paul Burton
2014-06-21 10:59 ` Riku Voipio
2014-06-21 17:46 ` Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 05/16] linux-user: allow NULL arguments to mount Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 06/16] linux-user: support strace of epoll_create1 Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 07/16] linux-user: fix struct target_epoll_event layout for MIPS Paul Burton
2014-06-21 11:02 ` Riku Voipio
2014-06-21 18:04 ` Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 08/16] linux-user: respect timezone for settimeofday Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 09/16] linux-user: allow NULL tv argument " Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 10/16] linux-user: support timerfd_{create, gettime, settime} syscalls Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 11/16] linux-user: support ioprio_{get, set} syscalls Paul Burton
2014-06-20 12:54 ` Riku Voipio
2014-06-15 16:18 ` [Qemu-devel] [PATCH 12/16] linux-user: support {name_to, open_by}_handle_at syscalls Paul Burton
2014-08-26 12:30 ` [Qemu-devel] [12/16] " Riku Voipio
2014-08-26 14:21 ` Paul Burton [this message]
2014-08-28 7:10 ` Riku Voipio
2014-06-15 16:18 ` [Qemu-devel] [PATCH 13/16] linux-user: support the setns syscall Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 14/16] linux-user: support the unshare syscall Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 15/16] linux-user: support the KDSIGACCEPT ioctl Paul Burton
2014-06-15 16:18 ` [Qemu-devel] [PATCH 16/16] linux-user: support the SIOCGIFINDEX ioctl Paul Burton
2014-06-17 13:39 ` [Qemu-devel] [PATCH 00/16] linux-user fixes & improvements Riku Voipio
2014-06-21 11:11 ` 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=20140826142130.GE2333@gmail.com \
--to=paulburton89@gmail.com \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
/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.