summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTavian Barnes <tavianator@tavianator.com>2019-07-05 19:11:20 -0400
committerTavian Barnes <tavianator@tavianator.com>2019-07-05 19:11:20 -0400
commit71a1b65ba926ff9c6db3cb671580b5491db0bd97 (patch)
tree64914ae4d8748d7665a61a5dd646b07da9b63dbe
parent2bc5a80b3a24487b12bef5ea55a1155652260eff (diff)
downloadbfs-71a1b65ba926ff9c6db3cb671580b5491db0bd97.tar.xz
stat: Treat EPERM like ENOSYS for statx()
On some configurations (e.g. old Docker with the default seccomp() profile), statx() fails with EPERM. Consider this to mean statx() is unsupported, as EPERM is not a documented error code in normal operation. Possible fix for https://github.com/alpinelinux/aports/pull/9277
-rw-r--r--stat.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/stat.c b/stat.c
index e3d5400..a2e2c8d 100644
--- a/stat.c
+++ b/stat.c
@@ -282,7 +282,9 @@ static int bfs_stat_explicit(int at_fd, const char *at_path, int at_flags, enum
if (has_statx) {
int ret = bfs_statx_impl(at_fd, at_path, at_flags, flags, buf);
- if (ret != 0 && errno == ENOSYS) {
+ // EPERM is commonly returned in a seccomp() sandbox that does
+ // not allow statx()
+ if (ret != 0 && (errno == ENOSYS || errno == EPERM)) {
has_statx = false;
} else {
return ret;