mirror of
https://git.yoctoproject.org/poky
synced 2026-06-03 01:40:07 +00:00
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. (From OE-Core rev: 1d6bff65391045ba40e84721eb0f6826e25e09f3) Signed-off-by: Peter Kjellerstedt <peter.kjellerstedt@axis.com> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
committed by
Richard Purdie
parent
63a7ae21cc
commit
67ad6c8dc2
+36
@@ -0,0 +1,36 @@
|
|||||||
|
From edd1e47f107410d9e4edb691335410026ae5a534 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Kjellerstedt <peter.kjellerstedt@axis.com>
|
||||||
|
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 <peter.kjellerstedt@axis.com>
|
||||||
|
---
|
||||||
|
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)
|
||||||
@@ -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-Do-not-write-bindir-into-pkg-config-files.patch \
|
||||||
file://0001-meson-Run-atomics-test-on-clang-as-well.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-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"
|
SRC_URI:append:class-native = " file://relocate-modules.patch"
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user