vxlan: fix race between flush and incoming learning
authorstephen hemminger <stephen@networkplumber.org>
Mon, 17 Jun 2013 19:09:57 +0000 (12:09 -0700)
committerDavid S. Miller <davem@davemloft.net>
Mon, 17 Jun 2013 22:55:46 +0000 (15:55 -0700)
commit3bf74b1aecdce719f1445200d5db7dfee2297bba
tree3c219f5bbe142d0e5c096caf9169b546d7d669e1
parent8177a9d79c0e942dcac3312f15585d0344d505a5
vxlan: fix race between flush and incoming learning

It is possible for a packet to arrive during vxlan_stop(), and
have a dynamic entry created. Close this by checking if device
is up.

 CPU1                             CPU2
vxlan_stop
  vxlan_flush
     hash_lock acquired
                                  vxlan_encap_recv
                                     vxlan_snoop
                                        waiting for hash_lock
     hash_lock relased
  vxlan_flush done
                                        hash_lock acquired
                                        vxlan_fdb_create

This is a day-one bug in vxlan goes back to 3.7.

Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxlan.c