Skip to content

Commit 475d4df

Browse files
committed
Merge tag 'v6.6-vfs.fchmodat2' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
Pull fchmodat2 system call from Christian Brauner: "This adds the fchmodat2() system call. It is a revised version of the fchmodat() system call, adding a missing flag argument. Support for both AT_SYMLINK_NOFOLLOW and AT_EMPTY_PATH are included. Adding this system call revision has been a longstanding request but so far has always fallen through the cracks. While the kernel implementation of fchmodat() does not have a flag argument the libc provided POSIX-compliant fchmodat(3) version does. Both glibc and musl have to implement a workaround in order to support AT_SYMLINK_NOFOLLOW (see [1] and [2]). The workaround is brittle because it relies not just on O_PATH and O_NOFOLLOW semantics and procfs magic links but also on our rather inconsistent symlink semantics. This gives userspace a proper fchmodat2() system call that libcs can use to properly implement fchmodat(3) and allows them to get rid of their hacks. In this case it will immediately benefit them as the current workaround is already defunct because of aformentioned inconsistencies. In addition to AT_SYMLINK_NOFOLLOW, give userspace the ability to use AT_EMPTY_PATH with fchmodat2(). This is already possible with fchownat() so there's no reason to not also support it for fchmodat2(). The implementation is simple and comes with selftests. Implementation of the system call and wiring up the system call are done as separate patches even though they could arguably be one patch. But in case there are merge conflicts from other system call additions it can be beneficial to have separate patches" Link: https://sourceware.org/git/?p=glibc.git;a=blob;f=sysdeps/unix/sysv/linux/fchmodat.c;h=17eca54051ee28ba1ec3f9aed170a62630959143;hb=a492b1e5ef7ab50c6fdd4e4e9879ea5569ab0a6c#l35 [1] Link: https://git.musl-libc.org/cgit/musl/tree/src/stat/fchmodat.c?id=718f363bc2067b6487900eddc9180c84e7739f80#n28 [2] * tag 'v6.6-vfs.fchmodat2' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: selftests: fchmodat2: remove duplicate unneeded defines fchmodat2: add support for AT_EMPTY_PATH selftests: Add fchmodat2 selftest arch: Register fchmodat2, usually as syscall 452 fs: Add fchmodat2() Non-functional cleanup of a "__user * filename"
2 parents 511fb5b + 7121437 commit 475d4df

File tree

25 files changed

+196
-7
lines changed

25 files changed

+196
-7
lines changed

arch/alpha/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -491,3 +491,4 @@
491491
559 common futex_waitv sys_futex_waitv
492492
560 common set_mempolicy_home_node sys_ni_syscall
493493
561 common cachestat sys_cachestat
494+
562 common fchmodat2 sys_fchmodat2

arch/arm/tools/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,3 +465,4 @@
465465
449 common futex_waitv sys_futex_waitv
466466
450 common set_mempolicy_home_node sys_set_mempolicy_home_node
467467
451 common cachestat sys_cachestat
468+
452 common fchmodat2 sys_fchmodat2

arch/arm64/include/asm/unistd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939
#define __ARM_NR_compat_set_tls (__ARM_NR_COMPAT_BASE + 5)
4040
#define __ARM_NR_COMPAT_END (__ARM_NR_COMPAT_BASE + 0x800)
4141

42-
#define __NR_compat_syscalls 452
42+
#define __NR_compat_syscalls 453
4343
#endif
4444

4545
#define __ARCH_WANT_SYS_CLONE

arch/arm64/include/asm/unistd32.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -909,6 +909,8 @@ __SYSCALL(__NR_futex_waitv, sys_futex_waitv)
909909
__SYSCALL(__NR_set_mempolicy_home_node, sys_set_mempolicy_home_node)
910910
#define __NR_cachestat 451
911911
__SYSCALL(__NR_cachestat, sys_cachestat)
912+
#define __NR_fchmodat2 452
913+
__SYSCALL(__NR_fchmodat2, sys_fchmodat2)
912914

913915
/*
914916
* Please add new compat syscalls above this comment and update

arch/ia64/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -372,3 +372,4 @@
372372
449 common futex_waitv sys_futex_waitv
373373
450 common set_mempolicy_home_node sys_set_mempolicy_home_node
374374
451 common cachestat sys_cachestat
375+
452 common fchmodat2 sys_fchmodat2

arch/m68k/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,3 +451,4 @@
451451
449 common futex_waitv sys_futex_waitv
452452
450 common set_mempolicy_home_node sys_set_mempolicy_home_node
453453
451 common cachestat sys_cachestat
454+
452 common fchmodat2 sys_fchmodat2

arch/microblaze/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -457,3 +457,4 @@
457457
449 common futex_waitv sys_futex_waitv
458458
450 common set_mempolicy_home_node sys_set_mempolicy_home_node
459459
451 common cachestat sys_cachestat
460+
452 common fchmodat2 sys_fchmodat2

arch/mips/kernel/syscalls/syscall_n32.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,3 +390,4 @@
390390
449 n32 futex_waitv sys_futex_waitv
391391
450 n32 set_mempolicy_home_node sys_set_mempolicy_home_node
392392
451 n32 cachestat sys_cachestat
393+
452 n32 fchmodat2 sys_fchmodat2

arch/mips/kernel/syscalls/syscall_n64.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -366,3 +366,4 @@
366366
449 n64 futex_waitv sys_futex_waitv
367367
450 common set_mempolicy_home_node sys_set_mempolicy_home_node
368368
451 n64 cachestat sys_cachestat
369+
452 n64 fchmodat2 sys_fchmodat2

arch/mips/kernel/syscalls/syscall_o32.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,3 +439,4 @@
439439
449 o32 futex_waitv sys_futex_waitv
440440
450 o32 set_mempolicy_home_node sys_set_mempolicy_home_node
441441
451 o32 cachestat sys_cachestat
442+
452 o32 fchmodat2 sys_fchmodat2

0 commit comments

Comments
 (0)