]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commit - drivers/net/vxlan.c
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)
commit6db9246871394b3a136cd52001a0763676563840
tree7b146c9acfe3cafbc4c2a1b9dea8853d7491e8d0
parent6ad0b5a4e03dc5cc0c1ed6be093bdcefdc794a6f
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: 0241b836732f ("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