Browse Source

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.
pull/27635/head
Victor Stinner 5 years ago
committed by GitHub
parent
commit
c24896c0e3
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 4
      Misc/NEWS.d/next/Library/2021-08-06-13-00-28.bpo-44849.O78F_f.rst
  2. 7
      Python/fileutils.c

4
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.

7
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

Loading…
Cancel
Save