diff options
author | Eric Dumazet <edumazet@google.com> | 2012-08-19 12:31:48 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2012-08-22 22:39:46 -0700 |
commit | ef8531b64c3e2443da52e9f05d74a988230eedc5 (patch) | |
tree | 685df5cd6a04c761d3f7d3927185e4c0678c4dbb /mm | |
parent | 0115e8e30d6fcdd4b8faa30d3ffd90859a591f51 (diff) |
xfrm: fix RCU bugs
This patch reverts commit 56892261ed1a (xfrm: Use rcu_dereference_bh to
deference pointer protected by rcu_read_lock_bh), and fixes bugs
introduced in commit 418a99ac6ad ( Replace rwlock on xfrm_policy_afinfo
with rcu )
1) We properly use RCU variant in this file, not a mix of RCU/RCU_BH
2) We must defer some writes after the synchronize_rcu() call or a reader
can crash dereferencing NULL pointer.
3) Now we use the xfrm_policy_afinfo_lock spinlock only from process
context, we no longer need to block BH in xfrm_policy_register_afinfo()
and xfrm_policy_unregister_afinfo()
4) Can use RCU_INIT_POINTER() instead of rcu_assign_pointer() in
xfrm_policy_unregister_afinfo()
5) Remove a forward inline declaration (xfrm_policy_put_afinfo()),
and also move xfrm_policy_get_afinfo() declaration.
Signed-off-by: Eric Dumazet <edumazet@google.com>
Cc: Fan Du <fan.du@windriver.com>
Cc: Priyanka Jain <Priyanka.Jain@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'mm')
0 files changed, 0 insertions, 0 deletions