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é <[email protected]>
wrote:

> On 6/2/22 21:07, Will Cohen wrote:
> > From: Keno Fischer <[email protected]>
> >
> > 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 <[email protected]>
> > Signed-off-by: Michael Roitzsch <[email protected]>
> > [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 <[email protected]>
> > ---
> >   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