vfswrap_getxattrat_do_async and unshare(CLONE_FS)
fweimer at redhat.com
Mon Oct 24 21:46:22 UTC 2022
As far as I can tell, vfswrap_getxattrat_do_async relies on
unshare(CLONE_FS) to do fgetxattrat emulation with a thread-local fchdir
and getxattr. There do not seem to be any other uses in the sources.
I think the more usual way to emulate the missing fgetxattrat system
call is to open the file with openat and O_PATH, and then use getxattr
on the synthetic path under /proc/self/fd. While these paths present as
symbolic links, they actually are not, so there is no race possible.
(fgetxattr cannot operate on the open file descriptor directly.)
Why wasn't the /proc-based approach chosen for Samba? It looks a bit
simpler to implement, and does not do strange things to the process
state behind glibc's back.
This came up in a discussion regarding a proposal to implement an
interface for per-thread current working directories in glibc:
Per-thread file system attributes
More information about the samba-technical