Messages in this thread Patch in this message | | | Date | Fri, 19 Jul 2013 20:31:01 +0200 | From | Peter Zijlstra <> | Subject | [PATCH] mutex: Fix mutex_can_spin_on_owner |
| |
mutex_can_spin_on_owner() is broken in that it would allow the compiler to load lock->owner twice, seeing a pointer first time and a MULL pointer the second time.
Signed-off-by: Peter Zijlstra <peterz@infradead.org> --- kernel/mutex.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/kernel/mutex.c b/kernel/mutex.c index ff05f4b..7ff48c5 100644 --- a/kernel/mutex.c +++ b/kernel/mutex.c @@ -209,11 +209,13 @@ int mutex_spin_on_owner(struct mutex *lock, struct task_struct *owner) */ static inline int mutex_can_spin_on_owner(struct mutex *lock) { + struct task_struct *owner; int retval = 1; rcu_read_lock(); - if (lock->owner) - retval = lock->owner->on_cpu; + owner = ACCESS_ONCE(lock->owner); + if (owner) + retval = owner->on_cpu; rcu_read_unlock(); /* * if lock->owner is not set, the mutex owner may have just acquired
| |