| From ead64a2fb25ceb87d946a29fff6fc3dc87e09d5a Mon Sep 17 00:00:00 2001 |
| From: Taehee Yoo <ap420073@gmail.com> |
| Date: Tue, 21 Jul 2020 14:51:50 +0000 |
| Subject: [PATCH] netdevsim: fix unbalaced locking in nsim_create() |
| |
| commit 2c9d8e01f0c6017317eee7638496173d4a64e6bc upstream. |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c |
| index 533a182eefca..2a197cd22628 100644 |
| --- a/drivers/net/netdevsim/netdev.c |
| +++ b/drivers/net/netdevsim/netdev.c |
| @@ -314,7 +314,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); |
| |
| @@ -328,8 +328,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.27.0 |
| |