From 6ce27e328d5977c7e4066458fdfbb20a6ab7aac5 Mon Sep 17 00:00:00 2001 From: "L. E. Segovia" Date: Wed, 27 Mar 2024 16:55:10 +0000 Subject: [PATCH] gst: clock: Block futex_time64 usage on Android API level < 30 This syscall is seccomp blocked on all lower API levels: https://github.com/aosp-mirror/platform_bionic/commit/ee7bc3002dc3127faac110167d28912eb0e86a20 While at it, also fix all direct tests on __NR_futex_time64 and __NR_futex so that they refer to the results available in config.h. Part-of: --- subprojects/gstreamer/gst/gstsystemclock.c | 20 ++++++++++++++------ subprojects/gstreamer/meson.build | 2 +- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/subprojects/gstreamer/gst/gstsystemclock.c b/subprojects/gstreamer/gst/gstsystemclock.c index 827a7e1b56..9dce497ede 100644 --- a/subprojects/gstreamer/gst/gstsystemclock.c +++ b/subprojects/gstreamer/gst/gstsystemclock.c @@ -250,8 +250,12 @@ gst_futex_cond_broadcast (guint * cond_val) { g_atomic_int_inc (cond_val); -#if defined(__NR_futex_time64) +#if defined(HAVE_FUTEX_TIME64) +#if defined(__BIONIC__) + if (__builtin_available (android 30, *)) { +#else { +#endif int res; res = syscall (__NR_futex_time64, cond_val, (gsize) FUTEX_WAKE_PRIVATE, (gsize) INT_MAX, NULL); @@ -260,7 +264,7 @@ gst_futex_cond_broadcast (guint * cond_val) * normal `futex` syscall. This can happen if newer kernel headers are * used than the kernel that is actually running. */ -#ifdef __NR_futex +#if defined(HAVE_FUTEX) if (res >= 0 || errno != ENOSYS) { #else { @@ -270,7 +274,7 @@ gst_futex_cond_broadcast (guint * cond_val) } #endif -#if defined(__NR_futex) +#if defined(HAVE_FUTEX) syscall (__NR_futex, cond_val, (gsize) FUTEX_WAKE_PRIVATE, (gsize) INT_MAX, NULL); #endif @@ -308,8 +312,12 @@ gst_futex_cond_wait_until (guint * cond_val, GMutex * mutex, gint64 end_time) * define `__NR_futex_time64`. */ -#ifdef __NR_futex_time64 +#if defined(HAVE_FUTEX_TIME64) +#if defined(__BIONIC__) + if (__builtin_available (android 30, *)) { +#else { +#endif struct { gint64 tv_sec; @@ -329,7 +337,7 @@ gst_futex_cond_wait_until (guint * cond_val, GMutex * mutex, gint64 end_time) * normal `futex` syscall. This can happen if newer kernel headers are * used than the kernel that is actually running. */ -#ifdef __NR_futex +#if defined(HAVE_FUTEX) if (res >= 0 || errno != ENOSYS) { #else { @@ -342,7 +350,7 @@ gst_futex_cond_wait_until (guint * cond_val, GMutex * mutex, gint64 end_time) } #endif -#ifdef __NR_futex +#if defined(HAVE_FUTEX) { struct { diff --git a/subprojects/gstreamer/meson.build b/subprojects/gstreamer/meson.build index 1bc72bd4e2..dda46eb051 100644 --- a/subprojects/gstreamer/meson.build +++ b/subprojects/gstreamer/meson.build @@ -313,7 +313,7 @@ if cc.compiles('''#include int main (int argc, char ** argv) { syscall (__NR_futex_time64, NULL, FUTEX_WAKE, FUTEX_WAIT); return 0; - }''', name : 'futex(2) system call') + }''', name : 'futex_time64(2) system call') cdata.set('HAVE_FUTEX_TIME64', 1) endif