summaryrefslogtreecommitdiffstats
path: root/0001-rtlwifi-Fix-potential-overflow-on-P2P-code.patch
diff options
context:
space:
mode:
Diffstat (limited to '0001-rtlwifi-Fix-potential-overflow-on-P2P-code.patch')
-rw-r--r--0001-rtlwifi-Fix-potential-overflow-on-P2P-code.patch52
1 files changed, 52 insertions, 0 deletions
diff --git a/0001-rtlwifi-Fix-potential-overflow-on-P2P-code.patch b/0001-rtlwifi-Fix-potential-overflow-on-P2P-code.patch
new file mode 100644
index 000000000..f8f40bd82
--- /dev/null
+++ b/0001-rtlwifi-Fix-potential-overflow-on-P2P-code.patch
@@ -0,0 +1,52 @@
+From 5d6fc173fd2963e39be890667d5bf3b1fde351dd Mon Sep 17 00:00:00 2001
+From: Laura Abbott <labbott@redhat.com>
+Date: Wed, 16 Oct 2019 16:45:48 -0400
+Subject: [PATCH v2] rtlwifi: Fix potential overflow on P2P code
+To: Ping-Ke Shih <pkshih@realtek.com>
+To: Kalle Valo <kvalo@codeaurora.org>
+Cc: David S. Miller <davem@davemloft.net>
+Cc: linux-wireless@vger.kernel.org
+Cc: netdev@vger.kernel.org
+Cc: linux-kernel@vger.kernel.org
+Cc: Nicolas Waisman <nico@semmle.com>
+
+Nicolas Waisman noticed that even though noa_len is checked for
+a compatible length it's still possible to overrun the buffers
+of p2pinfo since there's no check on the upper bound of noa_num.
+Bound noa_num against P2P_MAX_NOA_NUM.
+
+Reported-by: Nicolas Waisman <nico@semmle.com>
+Signed-off-by: Laura Abbott <labbott@redhat.com>
+---
+v2: Use P2P_MAX_NOA_NUM instead of erroring out.
+---
+ drivers/net/wireless/realtek/rtlwifi/ps.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/drivers/net/wireless/realtek/rtlwifi/ps.c b/drivers/net/wireless/realtek/rtlwifi/ps.c
+index 70f04c2f5b17..fff8dda14023 100644
+--- a/drivers/net/wireless/realtek/rtlwifi/ps.c
++++ b/drivers/net/wireless/realtek/rtlwifi/ps.c
+@@ -754,6 +754,9 @@ static void rtl_p2p_noa_ie(struct ieee80211_hw *hw, void *data,
+ return;
+ } else {
+ noa_num = (noa_len - 2) / 13;
++ if (noa_num > P2P_MAX_NOA_NUM)
++ noa_num = P2P_MAX_NOA_NUM;
++
+ }
+ noa_index = ie[3];
+ if (rtlpriv->psc.p2p_ps_info.p2p_ps_mode ==
+@@ -848,6 +851,9 @@ static void rtl_p2p_action_ie(struct ieee80211_hw *hw, void *data,
+ return;
+ } else {
+ noa_num = (noa_len - 2) / 13;
++ if (noa_num > P2P_MAX_NOA_NUM)
++ noa_num = P2P_MAX_NOA_NUM;
++
+ }
+ noa_index = ie[3];
+ if (rtlpriv->psc.p2p_ps_info.p2p_ps_mode ==
+--
+2.21.0
+