]> git.baikalelectronics.ru Git - kernel.git/commit
vxlan: Fix error path in __vxlan_dev_create()
authorPetr Machata <petrm@mellanox.com>
Tue, 18 Dec 2018 13:16:00 +0000 (13:16 +0000)
committerDavid S. Miller <davem@davemloft.net>
Wed, 19 Dec 2018 05:18:25 +0000 (21:18 -0800)
commit1e7a7bb5de34d8b5bc515c7cb712d95facbfde0e
tree7b146c9acfe3cafbc4c2a1b9dea8853d7491e8d0
parent56be1b31dfa38740c6fda51f4e2deb24e1758fa2
vxlan: Fix error path in __vxlan_dev_create()

When a failure occurs in rtnl_configure_link(), the current code
calls unregister_netdevice() to roll back the earlier call to
register_netdevice(), and jumps to errout, which calls
vxlan_fdb_destroy().

However unregister_netdevice() calls transitively ndo_uninit, which is
vxlan_uninit(), and that already takes care of deleting the default FDB
entry by calling vxlan_fdb_delete_default(). Since the entry added
earlier in __vxlan_dev_create() is exactly the default entry, the
cleanup code in the errout block always leads to double free and thus a
panic.

Besides, since vxlan_fdb_delete_default() always destroys the FDB entry
with notification enabled, the deletion of the default entry is notified
even before the addition was notified.

Instead, move the unregister_netdevice() call after the manual destroy,
which solves both problems.

Fixes: 5e6adfbeaebc ("vxlan: fix default fdb entry netlink notify ordering during netdev create")
Signed-off-by: Petr Machata <petrm@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/vxlan.c