netdev: Check ifi_flags in netdev_connect/disconnect
Also, set the flags appropriately when removing the netdev object. This prevents callers from accidentally starting any actions that will simply fail.
This commit is contained in:
parent
11f42e2476
commit
2b0b5d4173
|
@ -802,6 +802,8 @@ static void netdev_free(void *data)
|
||||||
|
|
||||||
l_debug("Freeing netdev %s[%d]", netdev->name, netdev->index);
|
l_debug("Freeing netdev %s[%d]", netdev->name, netdev->index);
|
||||||
|
|
||||||
|
netdev->ifi_flags &= ~IFF_UP;
|
||||||
|
|
||||||
if (netdev->events_ready)
|
if (netdev->events_ready)
|
||||||
WATCHLIST_NOTIFY(&netdev_watches, netdev_watch_func_t,
|
WATCHLIST_NOTIFY(&netdev_watches, netdev_watch_func_t,
|
||||||
netdev, NETDEV_WATCH_EVENT_DEL);
|
netdev, NETDEV_WATCH_EVENT_DEL);
|
||||||
|
@ -3293,6 +3295,9 @@ int netdev_connect(struct netdev *netdev, struct scan_bss *bss,
|
||||||
struct eapol_sm *sm = NULL;
|
struct eapol_sm *sm = NULL;
|
||||||
bool is_rsn = hs->supplicant_ie != NULL;
|
bool is_rsn = hs->supplicant_ie != NULL;
|
||||||
|
|
||||||
|
if (!(netdev->ifi_flags & IFF_UP))
|
||||||
|
return -ENETDOWN;
|
||||||
|
|
||||||
if (netdev->type != NL80211_IFTYPE_STATION &&
|
if (netdev->type != NL80211_IFTYPE_STATION &&
|
||||||
netdev->type != NL80211_IFTYPE_P2P_CLIENT)
|
netdev->type != NL80211_IFTYPE_P2P_CLIENT)
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
|
@ -3367,6 +3372,9 @@ int netdev_disconnect(struct netdev *netdev,
|
||||||
struct l_genl_msg *disconnect;
|
struct l_genl_msg *disconnect;
|
||||||
bool send_disconnect = true;
|
bool send_disconnect = true;
|
||||||
|
|
||||||
|
if (!(netdev->ifi_flags & IFF_UP))
|
||||||
|
return -ENETDOWN;
|
||||||
|
|
||||||
if (netdev->type != NL80211_IFTYPE_STATION &&
|
if (netdev->type != NL80211_IFTYPE_STATION &&
|
||||||
netdev->type != NL80211_IFTYPE_P2P_CLIENT)
|
netdev->type != NL80211_IFTYPE_P2P_CLIENT)
|
||||||
return -ENOTSUP;
|
return -ENOTSUP;
|
||||||
|
|
Loading…
Reference in New Issue