Skip to content

Commit a97cb0e

Browse files
Peter ZijlstraIngo Molnar
authored andcommitted
futex: Fix OWNER_DEAD fixup
Both Geert and DaveJ reported that the recent futex commit: c1e2f0e ("futex: Avoid violating the 10th rule of futex") introduced a problem with setting OWNER_DEAD. We set the bit on an uninitialized variable and then entirely optimize it away as a dead-store. Move the setting of the bit to where it is more useful. Reported-by: Geert Uytterhoeven <[email protected]> Reported-by: Dave Jones <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Cc: Andrew Morton <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Paul E. McKenney <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Thomas Gleixner <[email protected]> Fixes: c1e2f0e ("futex: Avoid violating the 10th rule of futex") Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
1 parent 1f07476 commit a97cb0e

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

kernel/futex.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2311,9 +2311,6 @@ static int fixup_pi_state_owner(u32 __user *uaddr, struct futex_q *q,
23112311
raw_spin_lock_irq(&pi_state->pi_mutex.wait_lock);
23122312

23132313
oldowner = pi_state->owner;
2314-
/* Owner died? */
2315-
if (!pi_state->owner)
2316-
newtid |= FUTEX_OWNER_DIED;
23172314

23182315
/*
23192316
* We are here because either:
@@ -2374,6 +2371,9 @@ static int fixup_pi_state_owner(u32 __user *uaddr, struct futex_q *q,
23742371
}
23752372

23762373
newtid = task_pid_vnr(newowner) | FUTEX_WAITERS;
2374+
/* Owner died? */
2375+
if (!pi_state->owner)
2376+
newtid |= FUTEX_OWNER_DIED;
23772377

23782378
if (get_futex_value_locked(&uval, uaddr))
23792379
goto handle_fault;

0 commit comments

Comments
 (0)