mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-22 23:09:34 +01:00
core: Add sanity check to sync RTNL link deletion with nl80211
This commit is contained in:
parent
46b9f4a0a8
commit
b7a421673c
@ -30,6 +30,7 @@
|
|||||||
#include <net/if.h>
|
#include <net/if.h>
|
||||||
#include <ell/ell.h>
|
#include <ell/ell.h>
|
||||||
|
|
||||||
|
#include "src/wiphy.h"
|
||||||
#include "src/netdev.h"
|
#include "src/netdev.h"
|
||||||
|
|
||||||
struct netdev_data {
|
struct netdev_data {
|
||||||
@ -92,6 +93,8 @@ static void dellink_notify(const struct ifinfomsg *ifi, int bytes)
|
|||||||
struct netdev_data *netdev;
|
struct netdev_data *netdev;
|
||||||
uint32_t index = ifi->ifi_index;
|
uint32_t index = ifi->ifi_index;
|
||||||
|
|
||||||
|
wiphy_notify_dellink(index);
|
||||||
|
|
||||||
netdev = l_hashmap_remove(netdev_list, L_UINT_TO_PTR(index));
|
netdev = l_hashmap_remove(netdev_list, L_UINT_TO_PTR(index));
|
||||||
if (!netdev)
|
if (!netdev)
|
||||||
return;
|
return;
|
||||||
|
22
src/wiphy.c
22
src/wiphy.c
@ -443,3 +443,25 @@ bool wiphy_exit(void)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void wiphy_check_dellink(void *data, void *user_data)
|
||||||
|
{
|
||||||
|
uint32_t index = L_PTR_TO_UINT(user_data);
|
||||||
|
struct wiphy *wiphy = data;
|
||||||
|
struct netdev *netdev;
|
||||||
|
|
||||||
|
netdev = l_queue_remove_if(wiphy->netdev_list, netdev_match,
|
||||||
|
L_UINT_TO_PTR(index));
|
||||||
|
if (netdev) {
|
||||||
|
l_warn("Removing leftover interface %s", netdev->name);
|
||||||
|
netdev_free(netdev);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void wiphy_notify_dellink(uint32_t index)
|
||||||
|
{
|
||||||
|
if (!wiphy_list)
|
||||||
|
return;
|
||||||
|
|
||||||
|
l_queue_foreach(wiphy_list, wiphy_check_dellink, L_UINT_TO_PTR(index));
|
||||||
|
}
|
||||||
|
@ -20,7 +20,10 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
|
||||||
bool wiphy_init(void);
|
bool wiphy_init(void);
|
||||||
bool wiphy_exit(void);
|
bool wiphy_exit(void);
|
||||||
|
|
||||||
|
void wiphy_notify_dellink(uint32_t index);
|
||||||
|
Loading…
Reference in New Issue
Block a user