diff options
| author | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-11-01 17:05:52 -0400 | 
|---|---|---|
| committer | Mauro Carvalho Chehab <mchehab@s-opensource.com> | 2017-12-11 13:04:55 -0500 | 
| commit | e639c869558cc1172cacf7477819c7e9db60e3a4 (patch) | |
| tree | 3c26c9051f3461a5328ccc77b30214692382663b /drivers/media/pci/pt1 | |
| parent | 29236349aa7dfc5556424261240be9050187b49d (diff) | |
| download | linux-e639c869558cc1172cacf7477819c7e9db60e3a4.tar.bz2 | |
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: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Diffstat (limited to 'drivers/media/pci/pt1')
| -rw-r--r-- | drivers/media/pci/pt1/pt1.c | 17 | 
1 files changed, 9 insertions, 8 deletions
| diff --git a/drivers/media/pci/pt1/pt1.c b/drivers/media/pci/pt1/pt1.c index b6b1a8d20d86..acc3afeb6224 100644 --- a/drivers/media/pci/pt1/pt1.c +++ b/drivers/media/pci/pt1/pt1.c @@ -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); |