From: Laurent Vivier <laurent@vivier.eu>
To: Peter Maydell <peter.maydell@linaro.org>, Shu-Chun Weng <scw@google.com>
Cc: arunkaly@google.com, Riku Voipio <riku.voipio@iki.fi>,
QEMU Developers <qemu-devel@nongnu.org>
Subject: Re: [Qemu-devel] [PATCH] linux-user: add memfd_create
Date: Fri, 23 Aug 2019 18:42:56 +0200 [thread overview]
Message-ID: <02298489-b0d0-c7d5-6f8a-7b0ff604aac6@vivier.eu> (raw)
In-Reply-To: <CAFEAcA-GWR6_wGCMWkMHttU3ARJPqfADvNTnqQUU_OzcWgHHuQ@mail.gmail.com>
Le 19/08/2019 à 13:56, Peter Maydell a écrit :
> On Fri, 16 Aug 2019 at 22:28, Shu-Chun Weng via Qemu-devel
> <qemu-devel@nongnu.org> wrote:
>>
>> Add support for the memfd_create syscall. If the host does not have the
>> libc wrapper, translate to a direct syscall with NC-macro.
>>
>> Buglink: https://bugs.launchpad.net/qemu/+bug/1734792
>> Signed-off-by: Shu-Chun Weng <scw@google.com>
>> ---
>> include/qemu/memfd.h | 4 ++++
>> linux-user/syscall.c | 11 +++++++++++
>> util/memfd.c | 2 +-
>> 3 files changed, 16 insertions(+), 1 deletion(-)
>>
>> diff --git a/include/qemu/memfd.h b/include/qemu/memfd.h
>> index d551c28b68..975b6bdb77 100644
>> --- a/include/qemu/memfd.h
>> +++ b/include/qemu/memfd.h
>> @@ -32,6 +32,10 @@
>> #define MFD_HUGE_SHIFT 26
>> #endif
>>
>> +#if defined CONFIG_LINUX && !defined CONFIG_MEMFD
>> +int memfd_create(const char *name, unsigned int flags);
>> +#endif
>> +
>> int qemu_memfd_create(const char *name, size_t size, bool hugetlb,
>> uint64_t hugetlbsize, unsigned int seals, Error **errp);
>> bool qemu_memfd_alloc_check(void);
>> diff --git a/linux-user/syscall.c b/linux-user/syscall.c
>> index 8367cb138d..b506c1f40e 100644
>> --- a/linux-user/syscall.c
>> +++ b/linux-user/syscall.c
>> @@ -20,6 +20,7 @@
>> #include "qemu/osdep.h"
>> #include "qemu/cutils.h"
>> #include "qemu/path.h"
>> +#include "qemu/memfd.h"
>> #include <elf.h>
>> #include <endian.h>
>> #include <grp.h>
>> @@ -11938,6 +11939,16 @@ static abi_long do_syscall1(void *cpu_env, int num, abi_long arg1,
>> /* PowerPC specific. */
>> return do_swapcontext(cpu_env, arg1, arg2, arg3);
>> #endif
>> +#ifdef TARGET_NR_memfd_create
>> + case TARGET_NR_memfd_create:
>> + p = lock_user_string(arg1);
>> + if (!p) {
>> + return -TARGET_EFAULT;
>> + }
>> + ret = get_errno(memfd_create(p, arg2));
>
> I think here you may need to call
> fd_trans_unregister(ret);
>
> since memfd_create() returns a file descriptor.
> (This call unregisters any pre-existing hooks for "we need
> to mangle the data for reads/writes of this file descriptor",
> in case the fd was previously being used for a file descriptor
> type that needed that.) This is what eg NR_open does.
>
> Laurent -- do I have this right? It's not entirely clear
> to me that we could ever be in a situation where a syscall
> like open or memfd_create returns an fd that's got an fd_trans
> hook active, because that would imply we'd failed to delete
> the hook on fd-close somehow. Is this just a belt-and-braces
> bit of coding ?
Exactly.
It's in case we missed one fd close and then to be sure an existing "fd
translator" will not mess with data of the new one.
Thanks,
Laurent
next prev parent reply other threads:[~2019-08-23 16:52 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-08-16 21:10 [Qemu-devel] [PATCH] linux-user: add memfd_create Shu-Chun Weng via Qemu-devel
2019-08-18 21:57 ` Philippe Mathieu-Daudé
2019-08-19 7:12 ` Marc-André Lureau
2019-08-19 11:56 ` Peter Maydell
2019-08-19 18:08 ` [Qemu-devel] [PATCH v2] " Shu-Chun Weng via Qemu-devel
2019-08-19 18:09 ` [Qemu-devel] [PATCH v3] " Shu-Chun Weng via Qemu-devel
2019-08-23 16:48 ` Laurent Vivier
2019-09-10 16:49 ` Laurent Vivier
2019-08-23 16:42 ` Laurent Vivier [this message]
2019-09-10 8:16 ` [Qemu-devel] [PATCH] " Laurent Vivier
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=02298489-b0d0-c7d5-6f8a-7b0ff604aac6@vivier.eu \
--to=laurent@vivier.eu \
--cc=arunkaly@google.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
--cc=scw@google.com \
/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).