Merge 3.5 (issue #27057)

This commit is contained in:
Victor Stinner 2016-05-19 16:48:06 +02:00
commit 4a3443be43
3 changed files with 12 additions and 2 deletions

View File

@ -110,6 +110,7 @@ Neal Becker
Robin Becker
Torsten Becker
Bill Bedford
Michał Bednarski
Ian Beer
Stefan Behnel
Reimer Behrends

View File

@ -297,6 +297,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 #27031: Removed dummy methods in Tkinter widget classes: tk_menuBar()

View File

@ -860,7 +860,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;
@ -869,7 +869,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 */