3
0
mirror of https://git.kernel.org/pub/scm/network/wireless/iwd.git synced 2024-12-22 21:22:37 +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:
Andrew Zaborowski 2020-02-07 12:39:13 +01:00 committed by Denis Kenzior
parent 053c1ca2a2
commit 1896ac2d73

View File

@ -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;