On Wed, 2016-08-31 at 15:42 +0200, Manfred Spraul wrote: > As explained in commit 51d7d5205d33 > ("powerpc: Add smp_mb() to arch_spin_is_locked()", for some architectures > the ACQUIRE during spin_lock only applies to loading the lock, not to > storing the lock state. > > nf_conntrack_lock() does not handle this correctly: > /* 1) Acquire the lock */ > spin_lock(lock); > while (unlikely(nf_conntrack_locks_all)) { > spin_unlock(lock); > > spinlock_store_acquire() is missing between spin_lock and reading > nf_conntrack_locks_all. In addition, reading nf_conntrack_locks_all > needs ACQUIRE memory ordering. > > 2nd, minor issue: If there would be many nf_conntrack_all_lock() callers, > then nf_conntrack_lock() would loop forever. > > Therefore: Change nf_conntrack_lock and nf_conntract_lock_all() to the > approach used by ipc/sem.c: > > - add spinlock_store_acquire() > - add smp_load_acquire() > - for nf_conntrack_lock, use spin_lock(&global_lock) instead of > spin_unlock_wait(&global_lock) and loop backward. > - use smp_store_mb() instead of a raw smp_mb() > > Signed-off-by: Manfred Spraul <manfred@xxxxxxxxxxxxxxxx> > Cc: Pablo Neira Ayuso <pablo@xxxxxxxxxxxxx> > Cc: netfilter-devel@xxxxxxxxxxxxxxx > > --- > > Question: Should I split this patch? > First a patch that uses smp_mb(), with Cc: stable. > The replace the smp_mb() with spinlock_store_acquire, not for stable I guess it all depends on stable backports you believe are needed. You probably should add the tags : Fixes: <12-digit-sha1> "patch title" that introduced the bug(s) you fix. By doing this archaeological research you will likely have a better answer ? Thanks ! -- To unsubscribe from this list: send the line "unsubscribe netfilter-devel" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html