mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-01 15:49:49 +01:00
netdev: Track the id of the SET_STATION netlink command
This way we make sure it gets cancelled any sort of connect abort of netdev removal and don't leak the message on error.
This commit is contained in:
parent
a03839f8ef
commit
4dba9e37dd
17
src/netdev.c
17
src/netdev.c
@ -78,6 +78,7 @@ struct netdev {
|
|||||||
uint32_t pairwise_set_key_cmd_id;
|
uint32_t pairwise_set_key_cmd_id;
|
||||||
uint32_t group_new_key_cmd_id;
|
uint32_t group_new_key_cmd_id;
|
||||||
uint32_t group_management_new_key_cmd_id;
|
uint32_t group_management_new_key_cmd_id;
|
||||||
|
uint32_t set_station_cmd_id;
|
||||||
uint32_t connect_cmd_id;
|
uint32_t connect_cmd_id;
|
||||||
uint32_t disconnect_cmd_id;
|
uint32_t disconnect_cmd_id;
|
||||||
enum netdev_result result;
|
enum netdev_result result;
|
||||||
@ -476,6 +477,11 @@ static void netdev_connect_free(struct netdev *netdev)
|
|||||||
netdev->group_management_new_key_cmd_id = 0;
|
netdev->group_management_new_key_cmd_id = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (netdev->set_station_cmd_id) {
|
||||||
|
l_genl_family_cancel(nl80211, netdev->set_station_cmd_id);
|
||||||
|
netdev->set_station_cmd_id = 0;
|
||||||
|
}
|
||||||
|
|
||||||
if (netdev->connect_cmd_id) {
|
if (netdev->connect_cmd_id) {
|
||||||
l_genl_family_cancel(nl80211, netdev->connect_cmd_id);
|
l_genl_family_cancel(nl80211, netdev->connect_cmd_id);
|
||||||
netdev->connect_cmd_id = 0;
|
netdev->connect_cmd_id = 0;
|
||||||
@ -893,6 +899,9 @@ static void netdev_setting_keys_failed(struct netdev *netdev,
|
|||||||
netdev->group_management_new_key_cmd_id);
|
netdev->group_management_new_key_cmd_id);
|
||||||
netdev->group_management_new_key_cmd_id = 0;
|
netdev->group_management_new_key_cmd_id = 0;
|
||||||
|
|
||||||
|
l_genl_family_cancel(nl80211, netdev->set_station_cmd_id);
|
||||||
|
netdev->set_station_cmd_id = 0;
|
||||||
|
|
||||||
netdev->result = NETDEV_RESULT_KEY_SETTING_FAILED;
|
netdev->result = NETDEV_RESULT_KEY_SETTING_FAILED;
|
||||||
msg = netdev_build_cmd_disconnect(netdev,
|
msg = netdev_build_cmd_disconnect(netdev,
|
||||||
MMPDU_REASON_CODE_UNSPECIFIED);
|
MMPDU_REASON_CODE_UNSPECIFIED);
|
||||||
@ -906,6 +915,8 @@ static void netdev_set_station_cb(struct l_genl_msg *msg, void *user_data)
|
|||||||
struct netdev *netdev = user_data;
|
struct netdev *netdev = user_data;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
|
netdev->set_station_cmd_id = 0;
|
||||||
|
|
||||||
if (!netdev->connected)
|
if (!netdev->connected)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
@ -1127,9 +1138,13 @@ static void netdev_set_pairwise_key_cb(struct l_genl_msg *msg, void *data)
|
|||||||
|
|
||||||
msg = netdev_build_cmd_set_station(netdev);
|
msg = netdev_build_cmd_set_station(netdev);
|
||||||
|
|
||||||
l_genl_family_send(nl80211, msg, netdev_set_station_cb, netdev, NULL);
|
netdev->set_station_cmd_id =
|
||||||
|
l_genl_family_send(nl80211, msg, netdev_set_station_cb,
|
||||||
|
netdev, NULL);
|
||||||
|
if (netdev->set_station_cmd_id > 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
l_genl_msg_unref(msg);
|
||||||
error:
|
error:
|
||||||
netdev_setting_keys_failed(netdev, MMPDU_REASON_CODE_UNSPECIFIED);
|
netdev_setting_keys_failed(netdev, MMPDU_REASON_CODE_UNSPECIFIED);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user