mirror of
https://github.com/torvalds/linux.git
synced 2024-12-22 02:52:56 +00:00
941297f443
When a slab cache uses SLAB_DESTROY_BY_RCU, we must be careful when allocating objects, since slab allocator could give a freed object still used by lockless readers. In particular, nf_conntrack RCU lookups rely on ct->tuplehash[xxx].hnnode.next being always valid (ie containing a valid 'nulls' value, or a valid pointer to next object in hash chain.) kmem_cache_zalloc() setups object with NULL values, but a NULL value is not valid for ct->tuplehash[xxx].hnnode.next. Fix is to call kmem_cache_alloc() and do the zeroing ourself. As spotted by Patrick, we also need to make sure lookup keys are committed to memory before setting refcount to 1, or a lockless reader could get a reference on the old version of the object. Its key re-check could then pass the barrier. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: Patrick McHardy <kaber@trash.net> |
||
---|---|---|
.. | ||
00-INDEX | ||
arrayRCU.txt | ||
checklist.txt | ||
listRCU.txt | ||
NMI-RCU.txt | ||
rcu.txt | ||
rcubarrier.txt | ||
rculist_nulls.txt | ||
rcuref.txt | ||
RTFP.txt | ||
torture.txt | ||
trace.txt | ||
UP.txt | ||
whatisRCU.txt |