mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-12-22 13:02:44 +01:00
frame-xchg: Use both group_id and wdev_id when removing group
In frame_watch_group_remove I forgot to actually match the group to be removed by both wdev_id and group_id. group_ids are unique only in the scope of one wdev.
This commit is contained in:
parent
053c1ca2a2
commit
1896ac2d73
@ -323,19 +323,24 @@ bool frame_watch_add(uint64_t wdev_id, uint32_t group_id, uint16_t frame_type,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct watch_group_match_info {
|
||||||
|
uint64_t wdev_id;
|
||||||
|
uint32_t id;
|
||||||
|
};
|
||||||
|
|
||||||
static bool frame_watch_group_match(const void *a, const void *b)
|
static bool frame_watch_group_match(const void *a, const void *b)
|
||||||
{
|
{
|
||||||
const struct watch_group *group = a;
|
const struct watch_group *group = a;
|
||||||
uint32_t id = L_PTR_TO_UINT(b);
|
const struct watch_group_match_info *info = b;
|
||||||
|
|
||||||
return group->id == id;
|
return group->wdev_id == info->wdev_id && group->id == info->id;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool frame_watch_group_remove(uint64_t wdev_id, uint32_t group_id)
|
bool frame_watch_group_remove(uint64_t wdev_id, uint32_t group_id)
|
||||||
{
|
{
|
||||||
|
struct watch_group_match_info info = { wdev_id, group_id };
|
||||||
struct watch_group *group = l_queue_remove_if(watch_groups,
|
struct watch_group *group = l_queue_remove_if(watch_groups,
|
||||||
frame_watch_group_match,
|
frame_watch_group_match, &info);
|
||||||
L_UINT_TO_PTR(group_id));
|
|
||||||
|
|
||||||
if (!group)
|
if (!group)
|
||||||
return false;
|
return false;
|
||||||
|
Loading…
Reference in New Issue
Block a user