Blame SOURCES/0015-CVE-2015-1863-p2p-ssid.patch

1dabd5
From 9ed4eee345f85e3025c33c6e20aa25696e341ccd Mon Sep 17 00:00:00 2001
1dabd5
From: Jouni Malinen <jouni@qca.qualcomm.com>
1dabd5
Date: Tue, 7 Apr 2015 11:32:11 +0300
1dabd5
Subject: [PATCH] P2P: Validate SSID element length before copying it
1dabd5
 (CVE-2015-1863)
1dabd5
1dabd5
This fixes a possible memcpy overflow for P2P dev->oper_ssid in
1dabd5
p2p_add_device(). The length provided by the peer device (0..255 bytes)
1dabd5
was used without proper bounds checking and that could have resulted in
1dabd5
arbitrary data of up to 223 bytes being written beyond the end of the
1dabd5
dev->oper_ssid[] array (of which about 150 bytes would be beyond the
1dabd5
heap allocation) when processing a corrupted management frame for P2P
1dabd5
peer discovery purposes.
1dabd5
1dabd5
This could result in corrupted state in heap, unexpected program
1dabd5
behavior due to corrupted P2P peer device information, denial of service
1dabd5
due to process crash, exposure of memory contents during GO Negotiation,
1dabd5
and potentially arbitrary code execution.
1dabd5
1dabd5
Thanks to Google security team for reporting this issue and smart
1dabd5
hardware research group of Alibaba security team for discovering it.
1dabd5
1dabd5
Signed-off-by: Jouni Malinen <jouni@qca.qualcomm.com>
1dabd5
---
1dabd5
 src/p2p/p2p.c | 1 +
1dabd5
 1 file changed, 1 insertion(+)
1dabd5
1dabd5
diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
1dabd5
index f584fae..a45fe73 100644
1dabd5
--- a/src/p2p/p2p.c
1dabd5
+++ b/src/p2p/p2p.c
1dabd5
@@ -661,6 +661,7 @@ int p2p_add_device(struct p2p_data *p2p, const u8 *addr, int freq,
1dabd5
 	if (os_memcmp(addr, p2p_dev_addr, ETH_ALEN) != 0)
1dabd5
 		os_memcpy(dev->interface_addr, addr, ETH_ALEN);
1dabd5
 	if (msg.ssid &&
1dabd5
+	    msg.ssid[1] <= sizeof(dev->oper_ssid) &&
1dabd5
 	    (msg.ssid[1] != P2P_WILDCARD_SSID_LEN ||
1dabd5
 	     os_memcmp(msg.ssid + 2, P2P_WILDCARD_SSID, P2P_WILDCARD_SSID_LEN)
1dabd5
 	     != 0)) {
1dabd5
-- 
1dabd5
1.9.1
1dabd5