On Fri, Apr 26, 2024, at 18:20, Christian Göttsche wrote:
From: Christian Göttsche <cgzones@xxxxxxxxxxxxxx> Add the four syscalls setxattrat(), getxattrat(), listxattrat() and removexattrat(). Those can be used to operate on extended attributes, especially security related ones, either relative to a pinned directory or on a file descriptor without read access, avoiding a /proc/<pid>/fd/<fd> detour, requiring a mounted procfs. One use case will be setfiles(8) setting SELinux file contexts ("security.selinux") without race conditions and without a file descriptor opened with read access requiring SELinux read permission. Use the do_{name}at() pattern from fs/open.c. Pass the value of the extended attribute, its length, and for setxattrat(2) the command (XATTR_CREATE or XATTR_REPLACE) via an added struct xattr_args to not exceed six syscall arguments and not merging the AT_* and XATTR_* flags. Signed-off-by: Christian Göttsche <cgzones@xxxxxxxxxxxxxx> CC: x86@xxxxxxxxxx CC: linux-alpha@xxxxxxxxxxxxxxx CC: linux-kernel@xxxxxxxxxxxxxxx CC: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx CC: linux-ia64@xxxxxxxxxxxxxxx CC: linux-m68k@xxxxxxxxxxxxxxxxxxxx CC: linux-mips@xxxxxxxxxxxxxxx CC: linux-parisc@xxxxxxxxxxxxxxx CC: linuxppc-dev@xxxxxxxxxxxxxxxx CC: linux-s390@xxxxxxxxxxxxxxx CC: linux-sh@xxxxxxxxxxxxxxx CC: sparclinux@xxxxxxxxxxxxxxx CC: linux-fsdevel@xxxxxxxxxxxxxxx CC: audit@xxxxxxxxxxxxxxx CC: linux-arch@xxxxxxxxxxxxxxx CC: linux-api@xxxxxxxxxxxxxxx CC: linux-security-module@xxxxxxxxxxxxxxx CC: selinux@xxxxxxxxxxxxxxx
I checked that the syscalls are all well-formed regarding argument types, number of arguments and (absence of) compat handling, and that they are wired up correctly across architectures I did not look at the actual implementation in detail. Reviewed-by: Arnd Bergmann <arnd@xxxxxxxx>