The raw syscall(SYS_fchmodat2, ...) in DirFd::chmod_at bypassed LD_PRELOAD
tools (fakeroot, fakechroot, pseudo), so a recursive mode change landed on
disk but their bookkeeping never saw it, silently and with exit status 0.
Try libc fchmodat() first and keep the raw syscall as a fallback for the
NoFollow case libc declines; glibc issues fchmodat2 from there anyway.
Add util/check-libc-interposition.sh, which runs chown -R and chmod -R
under fakeroot and compares what fakeroot reports afterwards.
Fixes#14028
- compare_gnu_result.py: use context managers for open(), use next(iter()) instead of [0] slice
- compare_size_results.py: raise TypeError instead of ValueError for invalid type (TRY004)
- compare_test_results.py: flatten nested if statements (SIM102), use writelines (FURB122)
- analyze-gnu-results.py: use .values() when dict values are the only thing used (PERF102)
Default ACL still keeps umask(0777) profiles owner-writable, but restore
LLVM's online-merge pool (%4m) instead of one file per process.
Signed-off-by: Alex Chen <l46983284@gmail.com>
Some uutests set umask(0777) before spawning the utility. LLVM profile
files created under that umask can be mode 000; later writes fail with
Permission denied on stderr and break exact asserts (e.g. mkfifo).
Prepare the profraw directory with a default owner-write ACL when
setfacl is available (hard-fail under CI), use coverage-%p-%m.profraw,
and install acl on the coverage Ubuntu job.
Signed-off-by: Alex Chen <l46983284@gmail.com>