⬢ DragonFlyBSD Kernel Audit
DF-4540 / fix.diff
← back to finding ↓ download raw
--- a/sys/dev/video/cxm/cxm_tuner.c
+++ b/sys/dev/video/cxm/cxm_tuner.c
@@ -722,9 +722,18 @@
 
 		N = (16 * osc_freq) / 1000;
 
+	{
+		const struct cxm_tuner_band_code *band_end =
+		    &sc->tuner->band_codes[
+			NUM_ELEMENTS(sc->tuner->band_codes)];
+
 		for (band_code = sc->tuner->band_codes;
-		     band_code->freq > freq; band_code++)
+		     band_code < band_end && band_code->freq > freq;
+		     band_code++)
 			;
+		if (band_code >= band_end)
+			return -1;
+	}
 
 		if (freq >= sc->tuner_freq) {
 			msg[0] = (unsigned char)(N >> 8);
@@ -786,9 +795,18 @@
 	    || channel > channels->max_channel)
 		return -1;
 
-	for (assignments = channels->assignments;
-	     assignments->channel > channel; assignments++)
-		;
+	{
+		const struct cxm_tuner_channel_assignment *assign_end =
+		    &channels->assignments[
+			NUM_ELEMENTS(channels->assignments)];
+
+		for (assignments = channels->assignments;
+		     assignments < assign_end &&
+		     assignments->channel > channel; assignments++)
+			;
+		if (assignments == assign_end)
+			return -1;
+	}
 
 	if (!assignments->freq)
 		return -1;