Skip to content

Commit 11eb264

Browse files
lizf-osdavem330
authored andcommitted
dlci: acquire rtnl_lock before calling __dev_get_by_name()
Otherwise the net device returned can be freed at anytime. Signed-off-by: Li Zefan <lizefan@huawei.com> Cc: stable@vger.kernel.org Signed-off-by: David S. Miller <davem@davemloft.net>
1 parent a5cc68f commit 11eb264

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

drivers/net/wan/dlci.c

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -385,20 +385,24 @@ static int dlci_del(struct dlci_add *dlci)
385385
struct net_device *master, *slave;
386386
int err;
387387

388+
rtnl_lock();
389+
388390
/* validate slave device */
389391
master = __dev_get_by_name(&init_net, dlci->devname);
390-
if (!master)
391-
return -ENODEV;
392+
if (!master) {
393+
err = -ENODEV;
394+
goto out;
395+
}
392396

393397
if (netif_running(master)) {
394-
return -EBUSY;
398+
err = -EBUSY;
399+
goto out;
395400
}
396401

397402
dlp = netdev_priv(master);
398403
slave = dlp->slave;
399404
flp = netdev_priv(slave);
400405

401-
rtnl_lock();
402406
err = (*flp->deassoc)(slave, master);
403407
if (!err) {
404408
list_del(&dlp->list);
@@ -407,8 +411,8 @@ static int dlci_del(struct dlci_add *dlci)
407411

408412
dev_put(slave);
409413
}
414+
out:
410415
rtnl_unlock();
411-
412416
return err;
413417
}
414418

0 commit comments

Comments
 (0)