On Tue, Apr 11, 2017, at 02:07 PM, Eric Blake wrote: > > A good idea on the surface. But reading the man page of openat(), the > section on O_PATH says: > The file > itself is not opened, and other file operations (e.g., > read(2), > write(2), fchmod(2), fchown(2), fgetxattr(2), mmap(2)) > fail with > the error EBADF. Right, though more topically I'd have expected fchmodat() (not fchmod()) to take AT_EMPTY_PATH, just like fstatat() does. But it doesn't appear to be supported...oh, even at the syscall level, interesting. Ah, I see, glibc does: int fchmodat (int fd, const char *file, mode_t mode, int flag) { if (flag & ~AT_SYMLINK_NOFOLLOW) return INLINE_SYSCALL_ERROR_RETURN_VALUE (EINVAL); ... } And indeed the syscall doesn't have flags, bringing us back to the start here. Sorry, that seems obvious in retrospect, but I was "working forwards" from the O_PATH userspace API mindset.