From: Masatake YAMATO Date: Sat, 13 Apr 2024 16:40:14 +0000 (+0900) Subject: lsns: tolerate lsns_ioctl(fd, NS_GET_{PARENT,USERNS}) failing with ENOSYS X-Git-Tag: archive/raspbian/2.40.2-8+rpi1~1^2^2^2^2^2^2^2^2^2~10 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=cd35aa68c3773499ed98e117c5986fc9150ffb7b;p=util-linux.git lsns: tolerate lsns_ioctl(fd, NS_GET_{PARENT,USERNS}) failing with ENOSYS With the original code, "lsns/filedesc" test case failed on "build (qemu-user, s390x)" and "build (qemu-user, riscv64)". On the platforms, lsns_ioctl(fd, NS_GET_{PARENT,USERNS}) failed with ENOSYS. The error stoped the iteration for gathering information from /proc/[0-9]+. As a result, lsns printed nothing. We don't expect this behavior. Signed-off-by: Masatake YAMATO (cherry picked from commit f2a8b20d9c63f771d1fddd639ea1ec3fe034dc6d) Gbp-Pq: Topic upstream Gbp-Pq: Name lsns-tolerate-lsns_ioctl-fd-NS_GET_-PARENT-USERNS-failing.patch --- diff --git a/sys-utils/lsns.c b/sys-utils/lsns.c index 1f3574f..4ea01d2 100644 --- a/sys-utils/lsns.c +++ b/sys-utils/lsns.c @@ -308,7 +308,11 @@ static int get_ns_ino(int dir, const char *nsname, ino_t *ino, ino_t *pino, ino_ return -errno; if (strcmp(nsname, "pid") == 0 || strcmp(nsname, "user") == 0) { if ((pfd = lsns_ioctl(fd, NS_GET_PARENT)) < 0) { - if (errno == EPERM) + if (errno == EPERM + /* On the test platforms, "build (qemu-user, s390x)" and + * "build (qemu-user, riscv64)", the ioctl reported ENOSYS. + */ + || errno == ENOSYS) goto user; close(fd); return -errno; @@ -323,7 +327,11 @@ static int get_ns_ino(int dir, const char *nsname, ino_t *ino, ino_t *pino, ino_ } user: if ((ofd = lsns_ioctl(fd, NS_GET_USERNS)) < 0) { - if (errno == EPERM) + if (errno == EPERM + /* On the test platforms, "build (qemu-user, s390x)" and + * "build (qemu-user, riscv64)", the ioctl reported ENOSYS. + */ + || errno == ENOSYS) goto out; close(fd); return -errno;