Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e639c869 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

media: pt1: fix logic when pt1_nr_tables is zero or negative



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: default avatarMauro Carvalho Chehab <mchehab@s-opensource.com>
parent 29236349
Loading
Loading
Loading
Loading
+9 −8
Original line number Diff line number Diff line
@@ -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++;
	}

	while (i < pt1_nr_tables) {
		ret = pt1_init_table(pt1, &tables[i], &pfn);