From: Mathieu Desnoyers Date: Mon, 6 Jul 2015 19:01:22 +0000 (-0400) Subject: Fix: compat_futex.c: *uaddr should be read as volatile X-Git-Tag: v0.9.0~48 X-Git-Url: https://git.lttng.org./?a=commitdiff_plain;h=f4fe930941ad7e73ca2064c8be1abc31626ec50b;p=userspace-rcu.git Fix: compat_futex.c: *uaddr should be read as volatile Ensure that a volatile read is used when reading *uaddr in the compatibility implementation for sys_futex FUTEX_WAIT. Signed-off-by: Mathieu Desnoyers --- diff --git a/compat_futex.c b/compat_futex.c index 9a08624..6ec0b39 100644 --- a/compat_futex.c +++ b/compat_futex.c @@ -30,6 +30,7 @@ #include #include +#include /* * Using attribute "weak" for __urcu_compat_futex_lock and @@ -77,7 +78,7 @@ int compat_futex_noasync(int32_t *uaddr, int op, int32_t val, * Comparing *uaddr content against val figures out which * thread has been awakened. */ - while (*uaddr == val) + while (CMM_LOAD_SHARED(*uaddr) == val) pthread_cond_wait(&__urcu_compat_futex_cond, &__urcu_compat_futex_lock); break; @@ -121,7 +122,7 @@ int compat_futex_async(int32_t *uaddr, int op, int32_t val, switch (op) { case FUTEX_WAIT: - while (*uaddr == val) + while (CMM_LOAD_SHARED(*uaddr) == val) poll(NULL, 0, 10); break; case FUTEX_WAKE: