ipv4: Add a missing rcu_assign_pointer() in routing cache.
rt_intern_hash() is doing an update of a RCU guarded hash chain without using rcu_assign_pointer() or equivalent barrier. Signed-off-by: Eric Dumazet <dada1@cosmosbay.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
dc976c09da
commit
00269b54ed
@@ -1109,7 +1109,12 @@ restart:
|
|||||||
printk("\n");
|
printk("\n");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
rt_hash_table[hash].chain = rt;
|
/*
|
||||||
|
* Since lookup is lockfree, we must make sure
|
||||||
|
* previous writes to rt are comitted to memory
|
||||||
|
* before making rt visible to other CPUS.
|
||||||
|
*/
|
||||||
|
rcu_assign_pointer(rt_hash_table[hash].chain, rt);
|
||||||
spin_unlock_bh(rt_hash_lock_addr(hash));
|
spin_unlock_bh(rt_hash_lock_addr(hash));
|
||||||
*rp = rt;
|
*rp = rt;
|
||||||
return 0;
|
return 0;
|
||||||
|
Reference in New Issue
Block a user