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 <ap420...@gmail.com>
---

v1->v2:
 - Change error path label name.

 drivers/net/netdevsim/netdev.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c
index 2908e0a0d6e1..23950e7a0f81 100644
--- a/drivers/net/netdevsim/netdev.c
+++ b/drivers/net/netdevsim/netdev.c
@@ -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);
 }
-- 
2.17.1

Reply via email to