qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v4 09/11] 9p: darwin: Implement compatibility for mknodat


From: Will Cohen
Subject: Re: [PATCH v4 09/11] 9p: darwin: Implement compatibility for mknodat
Date: Sun, 6 Feb 2022 20:10:23 -0500

This patch set currently places it in 9p-util only because 9p is the only place where this issue seems to have come up so far and we were wary of editing files too far afield, but I have no attachment to its specific location!

On Sun, Feb 6, 2022 at 4:21 PM Philippe Mathieu-Daudé <f4bug@amsat.org> wrote:
On 6/2/22 21:07, Will Cohen wrote:
> From: Keno Fischer <keno@juliacomputing.com>
>
> Darwin does not support mknodat. However, to avoid race conditions
> with later setting the permissions, we must avoid using mknod on
> the full path instead. We could try to fchdir, but that would cause
> problems if multiple threads try to call mknodat at the same time.
> However, luckily there is a solution: Darwin includes a function
> that sets the cwd for the current thread only.
> This should suffice to use mknod safely.
>
> This function (pthread_fchdir_np) is protected by a check in
> meson in a patch later in tihs series.
>
> Signed-off-by: Keno Fischer <keno@juliacomputing.com>
> Signed-off-by: Michael Roitzsch <reactorcontrol@icloud.com>
> [Will Cohen: - Adjust coding style
>               - Replace clang references with gcc
>               - Note radar filed with Apple for missing syscall
>               - Replace direct syscall with pthread_fchdir_np and
>                 adjust patch notes accordingly]
> Signed-off-by: Will Cohen <wwcohen@gmail.com>
> ---
>   hw/9pfs/9p-local.c       |  5 +++--
>   hw/9pfs/9p-util-darwin.c | 27 +++++++++++++++++++++++++++
>   hw/9pfs/9p-util-linux.c  |  5 +++++
>   hw/9pfs/9p-util.h        |  2 ++
>   4 files changed, 37 insertions(+), 2 deletions(-)

> diff --git a/hw/9pfs/9p-util.h b/hw/9pfs/9p-util.h
> index 8e610ad224..f6fed963bf 100644
> --- a/hw/9pfs/9p-util.h
> +++ b/hw/9pfs/9p-util.h
> @@ -97,6 +97,8 @@ ssize_t flistxattrat_nofollow(int dirfd, const char *filename,
>   ssize_t fremovexattrat_nofollow(int dirfd, const char *filename,
>                                   const char *name);
>   
> +int qemu_mknodat(int dirfd, const char *filename, mode_t mode, dev_t dev);

I think this belong to "osdep.h" & os-posix.c.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]