mac802154: fix hold rtnl while ioctl
This patch fixes an issue to set address configuration with ioctl. Accessing the mib requires rtnl lock and the ndo_do_ioctl doesn't hold the rtnl lock while this callback is called. This patch do that manually. Signed-off-by: Alexander Aring <alex.aring@gmail.com> Reported-by: Matteo Petracca <matteo.petracca@sssup.it> Reviewed-by: Stefan Schmidt <stefan@osg.samsung.com> Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
parent
2d8cbd31dd
commit
4a669f7d72
@ -62,8 +62,7 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||||||
(struct sockaddr_ieee802154 *)&ifr->ifr_addr;
|
(struct sockaddr_ieee802154 *)&ifr->ifr_addr;
|
||||||
int err = -ENOIOCTLCMD;
|
int err = -ENOIOCTLCMD;
|
||||||
|
|
||||||
ASSERT_RTNL();
|
rtnl_lock();
|
||||||
|
|
||||||
spin_lock_bh(&sdata->mib_lock);
|
spin_lock_bh(&sdata->mib_lock);
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
@ -90,6 +89,7 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||||||
case SIOCSIFADDR:
|
case SIOCSIFADDR:
|
||||||
if (netif_running(dev)) {
|
if (netif_running(dev)) {
|
||||||
spin_unlock_bh(&sdata->mib_lock);
|
spin_unlock_bh(&sdata->mib_lock);
|
||||||
|
rtnl_unlock();
|
||||||
return -EBUSY;
|
return -EBUSY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -112,6 +112,7 @@ mac802154_wpan_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
|||||||
}
|
}
|
||||||
|
|
||||||
spin_unlock_bh(&sdata->mib_lock);
|
spin_unlock_bh(&sdata->mib_lock);
|
||||||
|
rtnl_unlock();
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user