|
| From: | Will Cohen |
| Subject: | Re: [PATCH v4 09/11] 9p: darwin: Implement compatibility for mknodat |
| Date: | Sun, 6 Feb 2022 20:10:23 -0500 |
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.
| [Prev in Thread] | Current Thread | [Next in Thread] |