From: Jouni Malinen Date: Sat, 19 Dec 2015 16:53:27 +0000 (+0200) Subject: HS 2.0: Remove duplicate icon entries X-Git-Tag: hostap_2_6~1160 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=61f25f80b46e0d0247f168385b94a904e3c6fc04;p=thirdparty%2Fhostap.git HS 2.0: Remove duplicate icon entries Only one of the icon entries with a matching BSSID and file name can be fetched from wpa_supplicant and as such, there is no need to maintain the old data if it was not explicitly deleted before running a new fetch for the same BSSID and icon. Remove older duplicated entries whenever completing a pending icon fetch to optimize memory use. Signed-off-by: Jouni Malinen --- diff --git a/wpa_supplicant/hs20_supplicant.c b/wpa_supplicant/hs20_supplicant.c index 3eeb5a26a..57b994367 100644 --- a/wpa_supplicant/hs20_supplicant.c +++ b/wpa_supplicant/hs20_supplicant.c @@ -357,6 +357,25 @@ static void hs20_set_osu_access_permission(const char *osu_dir, } } + +static void hs20_remove_duplicate_icons(struct wpa_supplicant *wpa_s, + struct icon_entry *new_icon) +{ + struct icon_entry *icon, *tmp; + + dl_list_for_each_safe(icon, tmp, &wpa_s->icon_head, struct icon_entry, + list) { + if (icon == new_icon) + continue; + if (os_memcmp(icon->bssid, new_icon->bssid, ETH_ALEN) == 0 && + os_strcmp(icon->file_name, new_icon->file_name) == 0) { + dl_list_del(&icon->list); + hs20_free_icon_entry(icon); + } + } +} + + static int hs20_process_icon_binary_file(struct wpa_supplicant *wpa_s, const u8 *sa, const u8 *pos, size_t slen, u8 dialog_token) @@ -375,6 +394,7 @@ static int hs20_process_icon_binary_file(struct wpa_supplicant *wpa_s, return -1; os_memcpy(icon->image, pos, slen); icon->image_len = slen; + hs20_remove_duplicate_icons(wpa_s, icon); wpa_msg(wpa_s, MSG_INFO, "RX-HS20-ICON " MACSTR " %s %u", MAC2STR(sa), icon->file_name,