Need to copy own address and peer address locally and pass them to
pasn_deauthenticate(), because this pointer data will be flushed from
the PTKSA cache before sending the Deauthentication frame and these
pointers to then-freed memory would be dereferenced.
Fixes: 24929543 ("PASN: Deauthenticate on PTKSA cache entry expiration")
Signed-off-by: Vinay Gannevaram <quic_vganneva@quicinc.com>
static void wpas_pasn_deauth_cb(struct ptksa_cache_entry *entry)
{
struct wpa_supplicant *wpa_s = entry->ctx;
+ u8 own_addr[ETH_ALEN];
+ u8 peer_addr[ETH_ALEN];
- wpas_pasn_deauthenticate(wpa_s, entry->own_addr, entry->addr);
+ /* Use a copy of the addresses from the entry to avoid issues with the
+ * entry getting freed during deauthentication processing. */
+ os_memcpy(own_addr, entry->own_addr, ETH_ALEN);
+ os_memcpy(peer_addr, entry->addr, ETH_ALEN);
+ wpas_pasn_deauthenticate(wpa_s, own_addr, peer_addr);
}