blob: 54c405b539c07ed91db0a6bc80cf4e27bd3b56bd [file] [log] [blame]
Andrew Geisslere34f8962021-04-15 15:53:51 -05001From 947272febe24a8f0ea828b5b2f35f13c3821901e Mon Sep 17 00:00:00 2001
2From: Jouni Malinen <jouni@codeaurora.org>
3Date: Mon, 9 Nov 2020 11:43:12 +0200
4Subject: [PATCH] P2P: Fix copying of secondary device types for P2P group
5 client
6
7Parsing and copying of WPS secondary device types list was verifying
8that the contents is not too long for the internal maximum in the case
9of WPS messages, but similar validation was missing from the case of P2P
10group information which encodes this information in a different
11attribute. This could result in writing beyond the memory area assigned
12for these entries and corrupting memory within an instance of struct
13p2p_device. This could result in invalid operations and unexpected
14behavior when trying to free pointers from that corrupted memory.
15
16CVE: CVE-2021-0326
17
18Upstream-Status: Backport
19
20Credit to OSS-Fuzz: https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=27269
21Fixes: e57ae6e19edf ("P2P: Keep track of secondary device types for peers")
22Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
23Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
24---
25 src/p2p/p2p.c | 2 ++
26 1 file changed, 2 insertions(+)
27
28diff --git a/src/p2p/p2p.c b/src/p2p/p2p.c
29index 74b7b52ae..5cbfc217f 100644
30--- a/src/p2p/p2p.c
31+++ b/src/p2p/p2p.c
32@@ -453,6 +453,8 @@ static void p2p_copy_client_info(struct p2p_device *dev,
33 dev->info.config_methods = cli->config_methods;
34 os_memcpy(dev->info.pri_dev_type, cli->pri_dev_type, 8);
35 dev->info.wps_sec_dev_type_list_len = 8 * cli->num_sec_dev_types;
36+ if (dev->info.wps_sec_dev_type_list_len > WPS_SEC_DEV_TYPE_MAX_LEN)
37+ dev->info.wps_sec_dev_type_list_len = WPS_SEC_DEV_TYPE_MAX_LEN;
38 os_memcpy(dev->info.wps_sec_dev_type_list, cli->sec_dev_types,
39 dev->info.wps_sec_dev_type_list_len);
40 }
41--
422.17.1
43