public inbox for linux-media@vger.kernel.org
 help / color / mirror / Atom feed
From: Jan Nikitenko <jan.nikitenko@gmail.com>
To: Mauro Carvalho Chehab <mchehab@infradead.org>
Cc: Antti Palosaari <crope@iki.fi>,
	Christopher Pascoe <c.pascoe@itee.uq.edu.au>,
	linux-media@vger.kernel.org
Subject: Re: [PATCH] zl10353 and qt1010: fix stack corruption bug
Date: Wed, 17 Jun 2009 13:58:49 +0200	[thread overview]
Message-ID: <4A38DA79.70707@gmail.com> (raw)
In-Reply-To: <20090616155937.3f5d869d@pedra.chehab.org>

Mauro Carvalho Chehab wrote:
> Em Wed, 10 Jun 2009 08:21:20 +0200
> Jan Nikitenko <jan.nikitenko@gmail.com> escreveu:
> 
>> This patch fixes stack corruption bug present in dump_regs function of zl10353 
>> and qt1010 drivers:
>> the buffer buf is one byte smaller than required - there is 4 chars
>> for address prefix, 16*3 chars for dump of 16 eeprom bytes per line
>> and 1 byte for zero ending the string required, i.e. 53 bytes, but
>> only 52 were provided.
>> The one byte missing in stack based buffer buf can cause stack corruption 
>> possibly leading to kernel oops, as discovered originally with af9015 driver.
>>
>> Signed-off-by: Jan Nikitenko <jan.nikitenko@gmail.com>
>>
>> ---
>>
>> Antti Palosaari wrote:
>>  > On 06/10/2009 01:39 AM, Jan Nikitenko wrote:
>>  >> Solved with "[PATCH] af9015: fix stack corruption bug".
>>  >
>>  > This error leads to the zl10353.c and there it was copied to qt1010.c
>>  > and af9015.c.
>>  >
>> Antti, thanks for pointing out that the same problem was also in zl10353.c and 
>> qt1010.c. Include your Sign-off-by, please.
>>
>> Best regards,
>> Jan
>>
>>   linux/drivers/media/common/tuners/qt1010.c  |    2 +-
>>   linux/drivers/media/dvb/frontends/zl10353.c |    2 +-
>>   2 files changed, 2 insertions(+), 2 deletions(-)
>>
>> diff -r cff06234b725 linux/drivers/media/common/tuners/qt1010.c
>> --- a/linux/drivers/media/common/tuners/qt1010.c	Sun May 31 23:07:01 2009 +0300
>> +++ b/linux/drivers/media/common/tuners/qt1010.c	Wed Jun 10 07:37:51 2009 +0200
>> @@ -65,7 +65,7 @@
>>   /* dump all registers */
>>   static void qt1010_dump_regs(struct qt1010_priv *priv)
>>   {
>> -	char buf[52], buf2[4];
>> +	char buf[4+3*16+1], buf2[4];
> 
> CodingStyle is incorrect. It should be buf[4 + 3 * 16 + 1].

right.

> 
> 
>>   	u8 reg, val;
>>
>>   	for (reg = 0; ; reg++) {
>> diff -r cff06234b725 linux/drivers/media/dvb/frontends/zl10353.c
>> --- a/linux/drivers/media/dvb/frontends/zl10353.c	Sun May 31 23:07:01 2009 +0300
>> +++ b/linux/drivers/media/dvb/frontends/zl10353.c	Wed Jun 10 07:37:51 2009 +0200
>> @@ -102,7 +102,7 @@
>>   static void zl10353_dump_regs(struct dvb_frontend *fe)
>>   {
>>   	struct zl10353_state *state = fe->demodulator_priv;
>> -	char buf[52], buf2[4];
>> +	char buf[4+3*16+1], buf2[4];
> 
> Same CodingStyle issue here.

agreed.

> 
>>   	int ret;
>>   	u8 reg;
>>
> 
> Without having actually looking at the source code, would it be possible to
> change the logic in order to use something else instead of a magic number for
> buf size - e. g. using sizeof(something) ?

I am not sure if that's possible - the buffer is used for sprintf in a loop to 
store text representation of registers dump, before printk-ing it.

We could put there a comment, suggesting that 4 bytes are required for address 
prefix of form "00: ", then 16 strings of form "00 " (3 bytes each) and one byte 
for zero to terminate the string.

Or we could use sizeof, like this:
    char buf[sizeof("00: ") - 1 + 16 * (sizeof("00 ") - 1) + 1]
or
    char buf[sizeof("00: 00 01 02 03 04 05 06 07 08 09 0a 0b 0c 0d 0e 0f ")]
but it is not very readable in my opinion either.

Maybe the best way would be to avoid the need for temporal buffer completely by 
directly using printk in a loop, that is only the first printk with KERN_DEBUG, 
followed by sequence of printk with registers dump and final printk with end of 
line (but isn't a printk without KERN_ facility coding style problem as well?).

I am not sure, what approach is the best - I just wanted to fix a bug, which did 
not allow to use my af9015 based tuner on mips platform. After that, Antti 
pointed out, that the same code with the same bug is also in other two sources, 
so I send the same fix for them as well...

Best regards,
Jan

  reply	other threads:[~2009-06-17 12:05 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-06-05  7:52 AVerTV Volar Black HD: i2c oops in warm state on mips Jan Nikitenko
2009-06-05  8:55 ` Patrick Boettcher
2009-06-05 15:36 ` Antti Palosaari
2009-06-09 22:39   ` Jan Nikitenko
2009-06-10  0:11     ` Antti Palosaari
2009-06-10  6:21       ` [PATCH] zl10353 and qt1010: fix stack corruption bug Jan Nikitenko
2009-06-15 19:01         ` Antti Palosaari
2009-06-16 18:59         ` Mauro Carvalho Chehab
2009-06-17 11:58           ` Jan Nikitenko [this message]
2009-06-17 12:26             ` Matthias Schwarzott
2009-06-17 13:18               ` Mauro Carvalho Chehab
2009-06-18 11:11                 ` [PATCH v2] " Jan Nikitenko

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=4A38DA79.70707@gmail.com \
    --to=jan.nikitenko@gmail.com \
    --cc=c.pascoe@itee.uq.edu.au \
    --cc=crope@iki.fi \
    --cc=linux-media@vger.kernel.org \
    --cc=mchehab@infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox