Skip to content
  • Kirill Tkhai's avatar
    net: Protect iterations over net::fib_notifier_ops in fib_seq_sum() · 11bf284f
    Kirill Tkhai authored
    
    
    There is at least unlocked deletion of net->ipv4.fib_notifier_ops
    from net::fib_notifier_ops:
    
    ip_fib_net_exit()
      rtnl_unlock()
      fib4_notifier_exit()
        fib_notifier_ops_unregister(net->ipv4.notifier_ops)
          list_del_rcu(&ops->list)
    
    So fib_seq_sum() can't use rtnl_lock() only for protection.
    
    The possible solution could be to use rtnl_lock()
    in fib_notifier_ops_unregister(), but this adds
    a possible delay during net namespace creation,
    so we better use rcu_read_lock() till someone
    really needs the mutex (if that happens).
    
    Signed-off-by: default avatarKirill Tkhai <ktkhai@virtuozzo.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    11bf284f