V4L/DVB (6957): tda18271: fail table lookups if frequency is out of range

Signed-off-by: Michael Krufky <mkrufky@linuxtv.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
diff --git a/drivers/media/dvb/frontends/tda18271-tables.c b/drivers/media/dvb/frontends/tda18271-tables.c
index e10a93b..f8202c4 100644
--- a/drivers/media/dvb/frontends/tda18271-tables.c
+++ b/drivers/media/dvb/frontends/tda18271-tables.c
@@ -273,6 +273,7 @@
 	struct tda18271_pll_map *map = NULL;
 	unsigned int i = 0;
 	char *map_name;
+	int ret = 0;
 
 	switch (map_type) {
 	case MAIN_PLL:
@@ -291,12 +292,17 @@
 
 	if (!map) {
 		tda_warn("%s map is not set!\n", map_name);
-		return -EINVAL;
+		ret = -EINVAL;
+		goto fail;
 	}
 
 	while ((map[i].lomax * 1000) < *freq) {
-		if (map[i + 1].lomax == 0)
+		if (map[i].lomax == 0) {
+			tda_map("%s: frequency (%d) out of range\n",
+				map_name, *freq);
+			ret = -ERANGE;
 			break;
+		}
 		i++;
 	}
 	*post_div = map[i].pd;
@@ -304,8 +310,8 @@
 
 	tda_map("%s: post div = 0x%02x, div = 0x%02x\n",
 		map_name, *post_div, *div);
-
-	return 0;
+fail:
+	return ret;
 }
 
 int tda18271_lookup_map(enum tda18271_map_type map_type, u32 *freq, u8 *val)
@@ -313,6 +319,7 @@
 	struct tda18271_map *map = NULL;
 	unsigned int i = 0;
 	char *map_name;
+	int ret = 0;
 
 	switch (map_type) {
 	case BP_FILTER:
@@ -347,19 +354,24 @@
 
 	if (!map) {
 		tda_warn("%s map is not set!\n", map_name);
-		return -EINVAL;
+		ret = -EINVAL;
+		goto fail;
 	}
 
 	while ((map[i].rfmax * 1000) < *freq) {
-		if (map[i + 1].rfmax == 0)
+		if (map[i].rfmax == 0) {
+			tda_map("%s: frequency (%d) out of range\n",
+				map_name, *freq);
+			ret = -ERANGE;
 			break;
+		}
 		i++;
 	}
 	*val = map[i].val;
 
 	tda_map("%s: 0x%02x\n", map_name, *val);
-
-	return 0;
+fail:
+	return ret;
 }
 
 /*