https://github.com/python/cpython/commit/9f5b921491c3e9ed1a6f9e00133fbc26ab4365fc
commit: 9f5b921491c3e9ed1a6f9e00133fbc26ab4365fc
branch: 3.13
author: Malcolm Smith <[email protected]>
committer: Yhg1s <[email protected]>
date: 2024-09-26T13:36:12-07:00
summary:
[3.13] gh-123014: Disable pidfd API on older Android versions (GH-124458)
(#124543)
gh-123014: Disable pidfd API on older Android versions (#124458)
(cherry picked from commit c58c572a65eb5b93d054e779df289e975a0b9864)
files:
A Misc/NEWS.d/next/Library/2024-09-24-19-32-14.gh-issue-123014.zVcfkZ.rst
M Doc/library/os.rst
M Doc/library/signal.rst
M Modules/clinic/posixmodule.c.h
M Modules/clinic/signalmodule.c.h
M Modules/posixmodule.c
M Modules/signalmodule.c
diff --git a/Doc/library/os.rst b/Doc/library/os.rst
index c8bbb5eb3abf6c..b93e01e99869c9 100644
--- a/Doc/library/os.rst
+++ b/Doc/library/os.rst
@@ -4572,7 +4572,7 @@ written in Python, such as a mail server's external
command delivery program.
See the :manpage:`pidfd_open(2)` man page for more details.
- .. availability:: Linux >= 5.3
+ .. availability:: Linux >= 5.3, Android >= :func:`build-time
<sys.getandroidapilevel>` API level 31
.. versionadded:: 3.9
.. data:: PIDFD_NONBLOCK
diff --git a/Doc/library/signal.rst b/Doc/library/signal.rst
index 79c4948e99e967..17fcb2b3707978 100644
--- a/Doc/library/signal.rst
+++ b/Doc/library/signal.rst
@@ -411,7 +411,7 @@ The :mod:`signal` module defines the following functions:
See the :manpage:`pidfd_send_signal(2)` man page for more information.
- .. availability:: Linux >= 5.1
+ .. availability:: Linux >= 5.1, Android >= :func:`build-time
<sys.getandroidapilevel>` API level 31
.. versionadded:: 3.9
diff --git
a/Misc/NEWS.d/next/Library/2024-09-24-19-32-14.gh-issue-123014.zVcfkZ.rst
b/Misc/NEWS.d/next/Library/2024-09-24-19-32-14.gh-issue-123014.zVcfkZ.rst
new file mode 100644
index 00000000000000..53dbabd9480ddb
--- /dev/null
+++ b/Misc/NEWS.d/next/Library/2024-09-24-19-32-14.gh-issue-123014.zVcfkZ.rst
@@ -0,0 +1,3 @@
+:func:`os.pidfd_open` and :func:`signal.pidfd_send_signal` are now
+unavailable when building against Android API levels older than 31, since
+the underlying system calls may cause a crash.
diff --git a/Modules/clinic/posixmodule.c.h b/Modules/clinic/posixmodule.c.h
index d879635dafe5b2..14a6efb9ac96d8 100644
--- a/Modules/clinic/posixmodule.c.h
+++ b/Modules/clinic/posixmodule.c.h
@@ -5954,7 +5954,7 @@ os_wait(PyObject *module, PyObject *Py_UNUSED(ignored))
#endif /* defined(HAVE_WAIT) */
-#if (defined(__linux__) && defined(__NR_pidfd_open))
+#if (defined(__linux__) && defined(__NR_pidfd_open) && !(defined(__ANDROID__)
&& __ANDROID_API__ < 31))
PyDoc_STRVAR(os_pidfd_open__doc__,
"pidfd_open($module, /, pid, flags=0)\n"
@@ -6013,7 +6013,7 @@ os_pidfd_open(PyObject *module, PyObject *const *args,
Py_ssize_t nargs, PyObjec
return return_value;
}
-#endif /* (defined(__linux__) && defined(__NR_pidfd_open)) */
+#endif /* (defined(__linux__) && defined(__NR_pidfd_open) &&
!(defined(__ANDROID__) && __ANDROID_API__ < 31)) */
#if defined(HAVE_SETNS)
@@ -12819,4 +12819,4 @@ os__is_inputhook_installed(PyObject *module, PyObject
*Py_UNUSED(ignored))
#ifndef OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF
#define OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF
#endif /* !defined(OS__SUPPORTS_VIRTUAL_TERMINAL_METHODDEF) */
-/*[clinic end generated code: output=6a1d88bd90c7a28b input=a9049054013a1b77]*/
+/*[clinic end generated code: output=b2ffb856bcada7c9 input=a9049054013a1b77]*/
diff --git a/Modules/clinic/signalmodule.c.h b/Modules/clinic/signalmodule.c.h
index 1d3a143dfd8d39..986c0289f2bfcb 100644
--- a/Modules/clinic/signalmodule.c.h
+++ b/Modules/clinic/signalmodule.c.h
@@ -670,7 +670,7 @@ signal_pthread_kill(PyObject *module, PyObject *const
*args, Py_ssize_t nargs)
#endif /* defined(HAVE_PTHREAD_KILL) */
-#if (defined(__linux__) && defined(__NR_pidfd_send_signal))
+#if (defined(__linux__) && defined(__NR_pidfd_send_signal) &&
!(defined(__ANDROID__) && __ANDROID_API__ < 31))
PyDoc_STRVAR(signal_pidfd_send_signal__doc__,
"pidfd_send_signal($module, pidfd, signalnum, siginfo=None, flags=0, /)\n"
@@ -723,7 +723,7 @@ signal_pidfd_send_signal(PyObject *module, PyObject *const
*args, Py_ssize_t nar
return return_value;
}
-#endif /* (defined(__linux__) && defined(__NR_pidfd_send_signal)) */
+#endif /* (defined(__linux__) && defined(__NR_pidfd_send_signal) &&
!(defined(__ANDROID__) && __ANDROID_API__ < 31)) */
#ifndef SIGNAL_ALARM_METHODDEF
#define SIGNAL_ALARM_METHODDEF
@@ -776,4 +776,4 @@ signal_pidfd_send_signal(PyObject *module, PyObject *const
*args, Py_ssize_t nar
#ifndef SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF
#define SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF
#endif /* !defined(SIGNAL_PIDFD_SEND_SIGNAL_METHODDEF) */
-/*[clinic end generated code: output=6d8e17a32cef668f input=a9049054013a1b77]*/
+/*[clinic end generated code: output=c57b4b98fad6f4b8 input=a9049054013a1b77]*/
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index c0a7c149c4dc2f..124d608508b3cd 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -10102,7 +10102,10 @@ os_wait_impl(PyObject *module)
}
#endif /* HAVE_WAIT */
-#if defined(__linux__) && defined(__NR_pidfd_open)
+
+// This system call always crashes on older Android versions.
+#if defined(__linux__) && defined(__NR_pidfd_open) && \
+ !(defined(__ANDROID__) && __ANDROID_API__ < 31)
/*[clinic input]
os.pidfd_open
pid: pid_t
diff --git a/Modules/signalmodule.c b/Modules/signalmodule.c
index 73bfcb756657b8..0e53a36bca55f0 100644
--- a/Modules/signalmodule.c
+++ b/Modules/signalmodule.c
@@ -1299,7 +1299,9 @@ signal_pthread_kill_impl(PyObject *module, unsigned long
thread_id,
#endif /* #if defined(HAVE_PTHREAD_KILL) */
-#if defined(__linux__) && defined(__NR_pidfd_send_signal)
+// This system call always crashes on older Android versions.
+#if defined(__linux__) && defined(__NR_pidfd_send_signal) && \
+ !(defined(__ANDROID__) && __ANDROID_API__ < 31)
/*[clinic input]
signal.pidfd_send_signal
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3/lists/python-checkins.python.org/
Member address: [email protected]