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

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

[media] lgdt3306a: don't go past the buffer



As warned by smatch:
	drivers/media/dvb-frontends/lgdt3306a.c:1354 log10_x1000() error: buffer overflow 'valx_x10' 14 <= 14
	drivers/media/dvb-frontends/lgdt3306a.c:1355 log10_x1000() error: buffer overflow 'log10x_x1000' 14 <= 14

There's a potential of returning a value out of the buffer. Fix it.

While here, remove the ugly braced block.

Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@osg.samsung.com>
parent 15c546e1
Loading
Loading
Loading
Loading
+10 −8
Original line number Diff line number Diff line
@@ -1319,6 +1319,7 @@ static u32 log10_x1000(u32 x)
	static u32 valx_x10[]     = {  10,  11,  13,  15,  17,  20,  25,  33,  41,  50,  59,  73,  87,  100 };
	static u32 log10x_x1000[] = {   0,  41, 114, 176, 230, 301, 398, 518, 613, 699, 771, 863, 939, 1000 };
	static u32 nelems = sizeof(valx_x10)/sizeof(valx_x10[0]);
	u32 diff_val, step_val, step_log10;
	u32 log_val = 0;
	u32 i;

@@ -1348,16 +1349,17 @@ static u32 log10_x1000(u32 x)
		if (valx_x10[i] >= x)
			break;
	}
	if (i == nelems)
		return log_val + log10x_x1000[i - 1];

	diff_val   = x - valx_x10[i-1];
	step_val   = valx_x10[i] - valx_x10[i - 1];
	step_log10 = log10x_x1000[i] - log10x_x1000[i - 1];

	{
		u32 diff_val   = x - valx_x10[i-1];
		u32 step_val   = valx_x10[i] - valx_x10[i-1];
		u32 step_log10 = log10x_x1000[i] - log10x_x1000[i-1];
	/* do a linear interpolation to get in-between values */
	return log_val + log10x_x1000[i - 1] +
		((diff_val*step_log10) / step_val);
}
}

static u32 lgdt3306a_calculate_snr_x100(struct lgdt3306a_state *state)
{