From 9996ddbb27c9eb39cd234a4abce6c3742572c770 Mon Sep 17 00:00:00 2001 From: Eric Engestrom Date: Wed, 12 Jun 2019 17:23:27 +0100 Subject: [PATCH] util/futex: fix dangling pointer use Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=110901 Fixes: 7dc2f4788288ec9c7ab6 "util: emulate futex on FreeBSD using umtx" Cc: Greg V Signed-off-by: Eric Engestrom --- src/util/futex.h | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/util/futex.h b/src/util/futex.h index a8b2c0f..268af92 100644 --- a/src/util/futex.h +++ b/src/util/futex.h @@ -69,15 +69,15 @@ static inline int futex_wake(uint32_t *addr, int count) static inline int futex_wait(uint32_t *addr, int32_t value, struct timespec *timeout) { void *uaddr = NULL, *uaddr2 = NULL; + struct _umtx_time tmo = { + ._flags = UMTX_ABSTIME, + ._clockid = CLOCK_MONOTONIC + }; assert(value == (int)(uint32_t)value); /* Check that bits weren't discarded */ if (timeout != NULL) { - const struct _umtx_time tmo = { - ._timeout = *timeout, - ._flags = UMTX_ABSTIME, - ._clockid = CLOCK_MONOTONIC - }; + tmo._timeout = *timeout; uaddr = (void *)(uintptr_t)sizeof(tmo); uaddr2 = (void *)&tmo; } -- 2.7.4