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:
parent
dc976c09da
commit
00269b54ed
1 changed files with 6 additions and 1 deletions
|
@ -1109,7 +1109,12 @@ static int rt_intern_hash(unsigned hash, struct rtable *rt, struct rtable **rp)
|
|||
printk("\n");
|
||||
}
|
||||
#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));
|
||||
*rp = rt;
|
||||
return 0;
|
||||
|
|
Loading…
Reference in a new issue