.dellink does not get called after .newlink fails, bareudp_newlink() must undo what bareudp_configure() has done if bareudp_link_config() fails.
Fixes: 571912c69f0e ("net: UDP tunnel encapsulation module for tunnelling different protocols like MPLS, IP, NSH etc.") Signed-off-by: Jakub Kicinski <k...@kernel.org> --- Found by code inspection and compile-tested only. drivers/net/bareudp.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/bareudp.c b/drivers/net/bareudp.c index 85ebd2b7e446..7a03a9059ccc 100644 --- a/drivers/net/bareudp.c +++ b/drivers/net/bareudp.c @@ -648,6 +648,7 @@ static int bareudp_newlink(struct net *net, struct net_device *dev, struct nlattr *tb[], struct nlattr *data[], struct netlink_ext_ack *extack) { + struct bareudp_dev *bareudp = netdev_priv(dev); struct bareudp_conf conf; int err; @@ -661,9 +662,14 @@ static int bareudp_newlink(struct net *net, struct net_device *dev, err = bareudp_link_config(dev, tb); if (err) - return err; + goto err_unconfig; return 0; + +err_unconfig: + list_del(&bareudp->next); + unregister_netdevice(dev); + return err; } static void bareudp_dellink(struct net_device *dev, struct list_head *head) -- 2.26.2