⬢ DragonFlyBSD Kernel Audit
DF-4689 / fixB.diff
← back to finding ↓ download raw
--- a/sys/dev/netif/ath/ath_hal/ar5212/ar2425.c	2026-09-22 21:03:53.558340862 +0000
+++ b/sys/dev/netif/ath/ath_hal/ar5212/ar2425.c	2026-09-22 21:03:53.558340862 +0000
@@ -428,6 +428,8 @@
 		/* if this pdGain is used */
 	}
 
+	if (numPdGainsUsed == 0)		/* EEPROM pd-gain data invalid */
+		return;
 	*pMinCalPower = Pmin_t2[0];
 	kk = 0; /* index for the final table */
 	for (ii = 0; ii < numPdGainsUsed; ii++) {
@@ -529,6 +531,12 @@
 	ar2425getGainBoundariesAndPdadcsForPowers(ah, freq,
 		pRawDataset, pdGainOverlap_t2,&minCalPower2413_t2,gainBoundaries,
 		rfXpdGain, pdadcValues);
+	/* xpd_mask==0 leaves the pdadc table uncomputed (wild backfills) */
+	if (pRawDataset->xpd_mask == 0) {
+		HALDEBUG(ah, HAL_DEBUG_ANY, "%s: invalid pd gain data\n",
+		    __func__);
+		return AH_FALSE;
+	}
 
 	OS_REG_RMW_FIELD(ah, AR_PHY_TPCRG1, AR_PHY_TPCRG1_NUM_PD_GAIN, 
 			 (pRawDataset->pDataPerChannel[0].numPdGains - 1));