Skip to content

Commit c8ffd8b

Browse files
author
Miklos Szeredi
committed
vfs: add faccessat2 syscall
POSIX defines faccessat() as having a fourth "flags" argument, while the linux syscall doesn't have it. Glibc tries to emulate AT_EACCESS and AT_SYMLINK_NOFOLLOW, but AT_EACCESS emulation is broken. Add a new faccessat(2) syscall with the added flags argument and implement both flags. The value of AT_EACCESS is defined in glibc headers to be the same as AT_REMOVEDIR. Use this value for the kernel interface as well, together with the explanatory comment. Also add AT_EMPTY_PATH support, which is not documented by POSIX, but can be useful and is trivial to implement. Signed-off-by: Miklos Szeredi <[email protected]>
1 parent 55923e4 commit c8ffd8b

File tree

23 files changed

+62
-13
lines changed

23 files changed

+62
-13
lines changed

arch/alpha/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -477,3 +477,4 @@
477477
# 545 reserved for clone3
478478
547 common openat2 sys_openat2
479479
548 common pidfd_getfd sys_pidfd_getfd
480+
549 common faccessat2 sys_faccessat2

arch/arm/tools/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -451,3 +451,4 @@
451451
435 common clone3 sys_clone3
452452
437 common openat2 sys_openat2
453453
438 common pidfd_getfd sys_pidfd_getfd
454+
439 common faccessat2 sys_faccessat2

arch/arm64/include/asm/unistd.h

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

41-
#define __NR_compat_syscalls 439
41+
#define __NR_compat_syscalls 440
4242
#endif
4343

4444
#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
@@ -883,6 +883,8 @@ __SYSCALL(__NR_clone3, sys_clone3)
883883
__SYSCALL(__NR_openat2, sys_openat2)
884884
#define __NR_pidfd_getfd 438
885885
__SYSCALL(__NR_pidfd_getfd, sys_pidfd_getfd)
886+
#define __NR_faccessat2 439
887+
__SYSCALL(__NR_faccessat2, sys_faccessat2)
886888

887889
/*
888890
* 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
@@ -358,3 +358,4 @@
358358
# 435 reserved for clone3
359359
437 common openat2 sys_openat2
360360
438 common pidfd_getfd sys_pidfd_getfd
361+
439 common faccessat2 sys_faccessat2

arch/m68k/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -437,3 +437,4 @@
437437
435 common clone3 __sys_clone3
438438
437 common openat2 sys_openat2
439439
438 common pidfd_getfd sys_pidfd_getfd
440+
439 common faccessat2 sys_faccessat2

arch/microblaze/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -443,3 +443,4 @@
443443
435 common clone3 sys_clone3
444444
437 common openat2 sys_openat2
445445
438 common pidfd_getfd sys_pidfd_getfd
446+
439 common faccessat2 sys_faccessat2

arch/mips/kernel/syscalls/syscall_n32.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,3 +376,4 @@
376376
435 n32 clone3 __sys_clone3
377377
437 n32 openat2 sys_openat2
378378
438 n32 pidfd_getfd sys_pidfd_getfd
379+
439 n32 faccessat2 sys_faccessat2

arch/mips/kernel/syscalls/syscall_n64.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -352,3 +352,4 @@
352352
435 n64 clone3 __sys_clone3
353353
437 n64 openat2 sys_openat2
354354
438 n64 pidfd_getfd sys_pidfd_getfd
355+
439 n64 faccessat2 sys_faccessat2

arch/mips/kernel/syscalls/syscall_o32.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -425,3 +425,4 @@
425425
435 o32 clone3 __sys_clone3
426426
437 o32 openat2 sys_openat2
427427
438 o32 pidfd_getfd sys_pidfd_getfd
428+
439 o32 faccessat2 sys_faccessat2

0 commit comments

Comments
 (0)