Jelajahi Sumber

qcacld-3.0: Fix integer overflow in rrm_fill_beacon_ies()

In function rrm_fill_beacon_ies, the total IE length is
calculated as sum of length field of the IE and 2 (element id 1
byte and IE length field 1 byte). The total IE length is defined
of type uint16_t and will overflow if the *(pBcnIes + 1)=0xfe.

Validate the len against total IE length to avoid overflow.

Change-Id: If8f86952ce43c5923906fc6ef18705f1785c5d88
CRs-Fixed: 2573329
Pragaspathi Thilagaraj 5 tahun lalu
induk
melakukan
77a8a13b1b
1 mengubah file dengan 8 tambahan dan 1 penghapusan
  1. 8 1
      core/mac/src/pe/rrm/rrm_api.c

+ 8 - 1
core/mac/src/pe/rrm/rrm_api.c

@@ -747,10 +747,17 @@ rrm_fill_beacon_ies(struct mac_context *mac, uint8_t *pIes,
 	}
 
 	while (BcnNumIes > 0) {
-		len = *(pBcnIes + 1) + 2;       /* element id + length. */
+		len = *(pBcnIes + 1);
+		len += 2;       /* element id + length. */
 		pe_debug("EID = %d, len = %d total = %d",
 			*pBcnIes, *(pBcnIes + 1), len);
 
+		if (BcnNumIes < len) {
+			pe_err("RRM: Invalid IE len:%d exp_len:%d",
+			       len, BcnNumIes);
+			break;
+		}
+
 		if (len <= 2) {
 			pe_err("RRM: Invalid IE");
 			break;