From: Lennart Poettering Date: Fri, 22 Oct 2021 12:03:46 +0000 (+0200) Subject: fd-util: tweak error handling in fd_reopen() X-Git-Tag: v250-rc1~449^2~1 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d6274e6b8f63c102a032926aa2f43e24785aaa5c;p=thirdparty%2Fsystemd.git fd-util: tweak error handling in fd_reopen() If we know that /proc/ works, then ENOENT when reopening an fd means the fd didn't exist. Let's return the correct error code for that, i.e. EBADF. --- diff --git a/src/basic/fd-util.c b/src/basic/fd-util.c index cf6742c2b31..27f651600ec 100644 --- a/src/basic/fd-util.c +++ b/src/basic/fd-util.c @@ -645,7 +645,7 @@ finish: } int fd_reopen(int fd, int flags) { - int new_fd; + int new_fd, r; /* Reopens the specified fd with new flags. This is useful for convert an O_PATH fd into a regular one, or to * turn O_RDWR fds into O_RDONLY fds. @@ -669,10 +669,13 @@ int fd_reopen(int fd, int flags) { if (errno != ENOENT) return -errno; - if (proc_mounted() == 0) + r = proc_mounted(); + if (r == 0) return -ENOSYS; /* if we have no /proc/, the concept is not implementable */ - return -ENOENT; + return r > 0 ? -EBADF : -ENOENT; /* If /proc/ is definitely around then this means the fd is + * not valid, otherwise let's propagate the original + * error */ } return new_fd;