use new SYS_faccessat2 syscall to implement faccessat with flags
authorRich Felker <dalias@aerifal.cx>
Thu, 10 Sep 2020 01:55:11 +0000 (21:55 -0400)
committerRich Felker <dalias@aerifal.cx>
Thu, 10 Sep 2020 01:55:11 +0000 (21:55 -0400)
commit55fb9a177316aa46c639d93dd0323d9a9a8c160c
treee48ec6bc0079a981fe17ba9314b28378055a01c4
parentf035c7b1e65b6566c979ed69bada82a466580ba2
use new SYS_faccessat2 syscall to implement faccessat with flags

commit 0a05eace163cee9b08571d2ff9d90f5e82d9c228 implemented AT_EACCESS
for faccessat with a horrible hack, creating a child process to change
switch uid/gid and perform the access probe without making potentially
irreversible changes to the caller's credentials. this was due to the
syscall lacking a flags argument.

linux 5.8 introduced a new syscall, SYS_faccessat2, fixing this
deficiency. use it if any flags are passed, and fallback to the old
strategy on ENOSYS. continue using the old syscall when there are no
flags.
src/unistd/faccessat.c