Kaydet (Commit) 3116cc44 authored tarafından Victor Stinner's avatar Victor Stinner

Fix os.set_inheritable() on Android


Issue #27057: Fix os.set_inheritable() on Android, ioctl() is blocked by
SELinux and fails with EACCESS. The function now falls back to fcntl().

Patch written by Michał Bednarski.
üst 49621418
......@@ -110,6 +110,7 @@ Neal Becker
Robin Becker
Torsten Becker
Bill Bedford
Michał Bednarski
Ian Beer
Stefan Behnel
Reimer Behrends
......
......@@ -123,6 +123,10 @@ Core and Builtins
Library
-------
- Issue #27057: Fix os.set_inheritable() on Android, ioctl() is blocked by
SELinux and fails with EACCESS. The function now falls back to fcntl().
Patch written by Michał Bednarski.
- Issue #27014: Fix infinite recursion using typing.py. Thanks to Kalle Tuure!
- Issue #14132: Fix urllib.request redirect handling when the target only has
......
......@@ -856,7 +856,7 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works)
return 0;
}
if (errno != ENOTTY) {
if (errno != ENOTTY && errno != EACCES) {
if (raise)
PyErr_SetFromErrno(PyExc_OSError);
return -1;
......@@ -865,7 +865,12 @@ set_inheritable(int fd, int inheritable, int raise, int *atomic_flag_works)
/* Issue #22258: Here, ENOTTY means "Inappropriate ioctl for
device". The ioctl is declared but not supported by the kernel.
Remember that ioctl() doesn't work. It is the case on
Illumos-based OS for example. */
Illumos-based OS for example.
Issue #27057: When SELinux policy disallows ioctl it will fail
with EACCES. While FIOCLEX is safe operation it may be
unavailable because ioctl was denied altogether.
This can be the case on Android. */
ioctl_works = 0;
}
/* fallback to fcntl() if ioctl() does not work */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment