From 1d6bff65391045ba40e84721eb0f6826e25e09f3 Mon Sep 17 00:00:00 2001 From: Peter Kjellerstedt Date: Tue, 23 May 2023 03:14:06 +0200 Subject: glib-2.0: Avoid having g_futex_simple() inadvertently modify errno If both __NR_futex and __NR_futex_time64 are defined, g_futex_simple() will first call futex_time64(). If that fails with ENOSYS, then futex_time() is called instead. However, errno was not saved and restored in this case, which would result in g_futex_simple() returning with errno set to ENOSYS, even if futex_time() succeeded. Signed-off-by: Peter Kjellerstedt Signed-off-by: Alexandre Belloni Signed-off-by: Richard Purdie --- ...g-g_futex_simple-inadvertently-modify-err.patch | 36 ++++++++++++++++++++++ meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb | 1 + 2 files changed, 37 insertions(+) create mode 100644 meta/recipes-core/glib-2.0/glib-2.0/0001-Avoid-having-g_futex_simple-inadvertently-modify-err.patch (limited to 'meta/recipes-core/glib-2.0') diff --git a/meta/recipes-core/glib-2.0/glib-2.0/0001-Avoid-having-g_futex_simple-inadvertently-modify-err.patch b/meta/recipes-core/glib-2.0/glib-2.0/0001-Avoid-having-g_futex_simple-inadvertently-modify-err.patch new file mode 100644 index 0000000000..db63cfd91e --- /dev/null +++ b/meta/recipes-core/glib-2.0/glib-2.0/0001-Avoid-having-g_futex_simple-inadvertently-modify-err.patch @@ -0,0 +1,36 @@ +From edd1e47f107410d9e4edb691335410026ae5a534 Mon Sep 17 00:00:00 2001 +From: Peter Kjellerstedt +Date: Tue, 25 Apr 2023 20:02:31 +0200 +Subject: [PATCH] Avoid having g_futex_simple() inadvertently modify errno + +If both __NR_futex and __NR_futex_time64 are defined, g_futex_simple() +will first call futex_time64(). If that fails with ENOSYS, then +futex_time() is called instead. However, errno was not saved and +restored in this case, which would result in g_futex_simple() +returning with errno set to ENOSYS, even if futex_time() succeeded. + +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/commit/edd1e47f107410d9e4edb691335410026ae5a534] +Signed-off-by: Peter Kjellerstedt +--- + glib/gthreadprivate.h | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/glib/gthreadprivate.h b/glib/gthreadprivate.h +index 9c847e039..74d37ba32 100644 +--- a/glib/gthreadprivate.h ++++ b/glib/gthreadprivate.h +@@ -65,9 +65,13 @@ struct _GRealThread + #define g_futex_simple(uaddr, futex_op, ...) \ + G_STMT_START \ + { \ ++ int saved_errno = errno; \ + int res = syscall (__NR_futex_time64, uaddr, (gsize) futex_op, __VA_ARGS__); \ + if (res < 0 && errno == ENOSYS) \ +- syscall (__NR_futex, uaddr, (gsize) futex_op, __VA_ARGS__); \ ++ { \ ++ errno = saved_errno; \ ++ syscall (__NR_futex, uaddr, (gsize) futex_op, __VA_ARGS__); \ ++ } \ + } \ + G_STMT_END + #elif defined(__NR_futex_time64) diff --git a/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb b/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb index 224f2c262e..f3a716eb9d 100644 --- a/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb +++ b/meta/recipes-core/glib-2.0/glib-2.0_2.76.2.bb @@ -14,6 +14,7 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \ file://0001-Do-not-write-bindir-into-pkg-config-files.patch \ file://0001-meson-Run-atomics-test-on-clang-as-well.patch \ file://0001-gio-tests-resources.c-comment-out-a-build-host-only-.patch \ + file://0001-Avoid-having-g_futex_simple-inadvertently-modify-err.patch \ " SRC_URI:append:class-native = " file://relocate-modules.patch" -- cgit 1.2.3-korg