• Eric Dumazet's avatar
    xfrm: fix RCU bugs · ef8531b6
    Eric Dumazet authored
    This patch reverts commit 56892261 (xfrm: Use rcu_dereference_bh to
    deference pointer protected by rcu_read_lock_bh), and fixes bugs
    introduced in commit 418a99ac ( 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: default avatarEric Dumazet <edumazet@google.com>
    Cc: Fan Du <fan.du@windriver.com>
    Cc: Priyanka Jain <Priyanka.Jain@freescale.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ef8531b6
xfrm_policy.c 71.2 KB