[Python-checkins] bpo-44849: Fix os.set_inheritable() on FreeBSD 14 with O_PATH (GH-27623)
vstinner
webhook-mailer at python.org
Fri Aug 6 09:15:18 EDT 2021
https://github.com/python/cpython/commit/c24896c0e3b32c8a9f614ef51366007b67d5c665
commit: c24896c0e3b32c8a9f614ef51366007b67d5c665
branch: main
author: Victor Stinner <vstinner at python.org>
committer: vstinner <vstinner at python.org>
date: 2021-08-06T15:15:10+02:00
summary:
bpo-44849: Fix os.set_inheritable() on FreeBSD 14 with O_PATH (GH-27623)
Fix the os.set_inheritable() function on FreeBSD 14 for file
descriptor opened with the O_PATH flag: ignore the EBADF error on
ioctl(), fallback on the fcntl() implementation.
files:
A Misc/NEWS.d/next/Library/2021-08-06-13-00-28.bpo-44849.O78F_f.rst
M Python/fileutils.c
diff --git a/Misc/NEWS.d/next/Library/2021-08-06-13-00-28.bpo-44849.O78F_f.rst b/Misc/NEWS.d/next/Library/2021-08-06-13-00-28.bpo-44849.O78F_f.rst
new file mode 100644
index 00000000000000..b1f225485ddef5
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2021-08-06-13-00-28.bpo-44849.O78F_f.rst
@@ -0,0 +1,4 @@
+Fix the :func:`os.set_inheritable` function on FreeBSD 14 for file descriptor
+opened with the :data:`~os.O_PATH` flag: ignore the :data:`~errno.EBADF`
+error on ``ioctl()``, fallback on the ``fcntl()`` implementation. Patch by
+Victor Stinner.
diff --git a/Python/fileutils.c b/Python/fileutils.c
index a8fab00629da41..e8a7eda505c7ec 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -1374,10 +1374,11 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works)
return 0;
}
-#ifdef __linux__
+#ifdef O_PATH
if (errno == EBADF) {
- // On Linux, ioctl(FIOCLEX) will fail with EBADF for O_PATH file descriptors
- // Fall through to the fcntl() path
+ // bpo-44849: On Linux and FreeBSD, ioctl(FIOCLEX) fails with EBADF
+ // on O_PATH file descriptors. Fall through to the fcntl()
+ // implementation.
}
else
#endif
More information about the Python-checkins
mailing list