netdevsim: fix unbalaced locking in nsim_create()
authorTaehee Yoo <ap420073@gmail.com>
Tue, 21 Jul 2020 14:51:50 +0000 (14:51 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 21 Jul 2020 23:00:43 +0000 (16:00 -0700)
In the nsim_create(), rtnl_lock() is called before nsim_bpf_init().
If nsim_bpf_init() is failed, rtnl_unlock() should be called,
but it isn't called.
So, unbalanced locking would occur.

Fixes: e05b2d141fef ("netdevsim: move netdev creation/destruction to dev probe")
Signed-off-by: Taehee Yoo <ap420073@gmail.com>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/netdevsim/netdev.c

index 2908e0a..23950e7 100644 (file)
@@ -302,7 +302,7 @@ nsim_create(struct nsim_dev *nsim_dev, struct nsim_dev_port *nsim_dev_port)
        rtnl_lock();
        err = nsim_bpf_init(ns);
        if (err)
-               goto err_free_netdev;
+               goto err_rtnl_unlock;
 
        nsim_ipsec_init(ns);
 
@@ -316,8 +316,8 @@ nsim_create(struct nsim_dev *nsim_dev, struct nsim_dev_port *nsim_dev_port)
 err_ipsec_teardown:
        nsim_ipsec_teardown(ns);
        nsim_bpf_uninit(ns);
+err_rtnl_unlock:
        rtnl_unlock();
-err_free_netdev:
        free_netdev(dev);
        return ERR_PTR(err);
 }