diff options
| author | Miss Islington (bot) <31488909+miss-islington@users.noreply.github.com> | 2021-08-06 06:42:51 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-08-06 06:42:51 -0700 |
| commit | 791c28a56f043618111a19377f8527326037230e (patch) | |
| tree | bd017f698e9cf4226c9cf33e88103f647b20b7b7 | |
| parent | 693a661478036dc2c5b48e138dd09320a972c25a (diff) | |
| download | cpython-git-791c28a56f043618111a19377f8527326037230e.tar.gz | |
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.
(cherry picked from commit c24896c0e3b32c8a9f614ef51366007b67d5c665)
Co-authored-by: Victor Stinner <vstinner@python.org>
| -rw-r--r-- | Misc/NEWS.d/next/Library/2021-08-06-13-00-28.bpo-44849.O78F_f.rst | 4 | ||||
| -rw-r--r-- | Python/fileutils.c | 7 |
2 files changed, 8 insertions, 3 deletions
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 0000000000..b1f225485d --- /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 45ea204391..11c659d5a4 100644 --- a/Python/fileutils.c +++ b/Python/fileutils.c @@ -1314,10 +1314,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 |
