summaryrefslogtreecommitdiffstats
path: root/Python/fileutils.c
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2016-05-19 14:46:18 (GMT)
committerVictor Stinner <victor.stinner@gmail.com>2016-05-19 14:46:18 (GMT)
commit3116cc44af1de8f261f642baba50e254b5e1592d (patch)
tree5723144656278b10936898099aca18faf3a9c1bc /Python/fileutils.c
parent4962141804676b34c372c8d6941eaf8edab3bfce (diff)
downloadcpython-3116cc44af1de8f261f642baba50e254b5e1592d.zip
cpython-3116cc44af1de8f261f642baba50e254b5e1592d.tar.gz
cpython-3116cc44af1de8f261f642baba50e254b5e1592d.tar.bz2
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.
Diffstat (limited to 'Python/fileutils.c')
-rw-r--r--Python/fileutils.c9
1 files changed, 7 insertions, 2 deletions
diff --git a/Python/fileutils.c b/Python/fileutils.c
index 06d632a..8987ce5 100644
--- a/Python/fileutils.c
+++ b/Python/fileutils.c
@@ -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 */