hostapd: P2P: Fix a corner case in peer addition based on PD Request
authorStefan Lippers-Hollmann <s.l-h@gmx.de>
Sat, 27 Feb 2021 22:55:08 +0000 (23:55 +0100)
committerRISCi_ATOM <bob@bobcall.me>
Thu, 11 Mar 2021 15:43:03 +0000 (10:43 -0500)
commit440f4f98eef4aebe78820f9efc2c88ed38fc7352
tree54687b134a2df1e8da264a4f7e0320b65473cbf6
parent84f94a061234ea3e37773a3ecca175426f9431aa
hostapd: P2P: Fix a corner case in peer addition based on PD Request

p2p_add_device() may remove the oldest entry if there is no room in the
peer table for a new peer. This would result in any pointer to that
removed entry becoming stale. A corner case with an invalid PD Request
frame could result in such a case ending up using (read+write) freed
memory. This could only by triggered when the peer table has reached its
maximum size and the PD Request frame is received from the P2P Device
Address of the oldest remaining entry and the frame has incorrect P2P
Device Address in the payload.

Fix this by fetching the dev pointer again after having called
p2p_add_device() so that the stale pointer cannot be used.

This fixes the following security vulnerabilities/bugs:

- CVE-2021-27803 - A vulnerability was discovered in how p2p/p2p_pd.c
  in wpa_supplicant before 2.10 processes P2P (Wi-Fi Direct) provision
  discovery requests. It could result in denial of service or other
  impact (potentially execution of arbitrary code), for an attacker
  within radio range.

Fixes: 17bef1e97a50 ("P2P: Add peer entry based on Provision Discovery Request")
Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
Signed-off-by: Stefan Lippers-Hollmann <s.l-h@gmx.de>
(cherry picked from commit 1ca5de13a153061feae260864d73d96f7c463785)
package/network/services/hostapd/Makefile
package/network/services/hostapd/patches/060-P2P-Fix-a-corner-case-in-peer-addition-based-on-PD-R.patch [new file with mode: 0644]