• Aleksa Sarai's avatar
    fchmodat2: add support for AT_EMPTY_PATH · 5daeb41a
    Aleksa Sarai authored
    
    
    This allows userspace to avoid going through /proc/self/fd when dealing
    with all types of file descriptors for chmod(), and makes fchmodat2() a
    proper superset of all other chmod syscalls.
    
    The primary difference between fchmodat2(AT_EMPTY_PATH) and fchmod() is
    that fchmod() doesn't operate on O_PATH file descriptors by design. To
    quote open(2):
    
    > O_PATH (since Linux 2.6.39)
    > [...]
    > The file itself is not opened, and other file operations (e.g.,
    > read(2), write(2), fchmod(2), fchown(2), fgetxattr(2), ioctl(2),
    > mmap(2)) fail with the error EBADF.
    
    However, procfs has allowed userspace to do this operation ever since
    the introduction of O_PATH through magic-links, so adding this feature
    is only an improvement for programs that have to mess around with
    /proc/self/fd/$n today to get this behaviour. In addition,
    fchownat(AT_EMPTY_PATH) has existed since the introduction of O_PATH and
    allows chown() operations directly on O_PATH descriptors.
    Signed-off-by: default avatarAleksa Sarai <cyphar@cyphar.com>
    Acked-by: default avatarAlexey Gladkov <legion@kernel.org>
    Message-Id: <20230728-fchmodat2-at_empty_path-v1-1-f3add31d3516@cyphar.com>
    Signed-off-by: default avatarChristian Brauner <brauner@kernel.org>
    5daeb41a
open.c 40.3 KB