media: pt1: fix logic when pt1_nr_tables is zero or negative
authorMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 1 Nov 2017 21:05:52 +0000 (17:05 -0400)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Mon, 11 Dec 2017 18:04:55 +0000 (13:04 -0500)
pt1_nr_tables is a modprobe parameter. The way the logic
handles it, it can't be negative. However, user can
set it to zero.

If set to zero, however, it will cause troubles at
pt1_init_tables(), as reported by smatch:
drivers/media/pci/pt1/pt1.c:468 pt1_init_tables() error: uninitialized symbol 'first_pfn'.

Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
drivers/media/pci/pt1/pt1.c

index b6b1a8d..acc3afe 100644 (file)
@@ -116,8 +116,8 @@ static u32 pt1_read_reg(struct pt1 *pt1, int reg)
        return readl(pt1->regs + reg * 4);
 }
 
-static int pt1_nr_tables = 8;
-module_param_named(nr_tables, pt1_nr_tables, int, 0);
+static unsigned int pt1_nr_tables = 8;
+module_param_named(nr_tables, pt1_nr_tables, uint, 0);
 
 static void pt1_increment_table_count(struct pt1 *pt1)
 {
@@ -443,6 +443,9 @@ static int pt1_init_tables(struct pt1 *pt1)
        int i, ret;
        u32 first_pfn, pfn;
 
+       if (!pt1_nr_tables)
+               return 0;
+
        tables = vmalloc(sizeof(struct pt1_table) * pt1_nr_tables);
        if (tables == NULL)
                return -ENOMEM;
@@ -450,12 +453,10 @@ static int pt1_init_tables(struct pt1 *pt1)
        pt1_init_table_count(pt1);
 
        i = 0;
-       if (pt1_nr_tables) {
-               ret = pt1_init_table(pt1, &tables[0], &first_pfn);
-               if (ret)
-                       goto err;
-               i++;
-       }
+       ret = pt1_init_table(pt1, &tables[0], &first_pfn);
+       if (ret)
+               goto err;
+       i++;
 
        while (i < pt1_nr_tables) {
                ret = pt1_init_table(pt1, &tables[i], &pfn);