All of lore.kernel.org
 help / color / mirror / Atom feed
From: Heinrich Schuchardt <xypron.glpk@gmx.de>
To: Kees Cook <keescook@chromium.org>
Cc: Mauro Carvalho Chehab <m.chehab@samsung.com>,
	Michael Krufky <mkrufky@linuxtv.org>,
	linux-media@vger.kernel.org, LKML <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 1/1] media: dib9000: avoid out of bound access
Date: Thu, 19 Jun 2014 03:41:24 +0200	[thread overview]
Message-ID: <53A23FC4.5010302@gmx.de> (raw)
In-Reply-To: <CAGXu5jKLoRkKuu8T=im6oEhn3WmXjZPwFXEbaPT6SeL29XrS0g@mail.gmail.com>

On 19.06.2014 01:50, Kees Cook wrote:
> On Wed, Jun 18, 2014 at 3:02 PM, Heinrich Schuchardt <xypron.glpk@gmx.de> wrote:
>> The current test to avoid out of bound access to mb[] is insufficient.
>> For len = 19 non-existent mb[10] will be accessed.
>>
>> A check in the for loop is insufficient to avoid out of bound access in
>> dib9000_mbx_send_attr.
>>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>>   drivers/media/dvb-frontends/dib9000.c | 5 ++++-
>>   1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/drivers/media/dvb-frontends/dib9000.c b/drivers/media/dvb-frontends/dib9000.c
>> index e540cfb..6a71917 100644
>> --- a/drivers/media/dvb-frontends/dib9000.c
>> +++ b/drivers/media/dvb-frontends/dib9000.c
>> @@ -1040,10 +1040,13 @@ static int dib9000_risc_apb_access_write(struct dib9000_state *state, u32 addres
>>          if (address >= 1024 || !state->platform.risc.fw_is_running)
>>                  return -EINVAL;
>>
>> +       if (len > 18)
>> +               return -EINVAL;
>> +
>>          /* dprintk( "APB access thru wr fw %d %x", address, attribute); */
>>
>>          mb[0] = (unsigned short)address;
>> -       for (i = 0; i < len && i < 20; i += 2)
>> +       for (i = 0; i < len; i += 2)
>>                  mb[1 + (i / 2)] = (b[i] << 8 | b[i + 1]);
>
> Good catch on the mb[] access! However, I think there is still more to
> fix since b[i + 1] can read past the end of b: Say b is defined as "u8
> b[3]". Passing len 3 means the second loop, with i==2 will access b[2]
> and b[3], the latter is out of range.

b[] and len are provided by the caller of dib9000_risc_apb_access_write.
dib9000_risc_apb_access_write cannot verify if the length of b[] matches 
len at all.

Currently dib9000_risc_apb_access_write cannot handle odd values of len. 
This holds even true if b[] has been padded with zero to an even length: 
For odd values of len the last byte is not passed to dib9000_mbx_send_attr.

What is left unclear is how odd values of len should be handled correctly:

Should the caller provide a b[] padded with 0 to the next even number of 
bytes,
or should dib9000_risc_apb_access_write take care not to read more then 
len bytes,
or should odd values of len cause an error EINVAL.

 From what I read in the coding one source of the value of len is 
tuner_attach(), which is called from outside the dib9000 driver.

Heinrich

>
> -Kees
>
>>
>>          dib9000_mbx_send_attr(state, OUT_MSG_BRIDGE_APB_W, mb, 1 + len / 2, attribute);
>> --
>> 2.0.0
>>
>
>
>


  reply	other threads:[~2014-06-19  1:41 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-06-18 22:02 [PATCH 1/1] media: dib9000: avoid out of bound access Heinrich Schuchardt
2014-06-18 23:50 ` Kees Cook
2014-06-19  1:41   ` Heinrich Schuchardt [this message]
2014-06-19  2:26     ` Kees Cook
2014-06-19 14:49       ` [PATCH 1/1 v2] " Heinrich Schuchardt
2014-06-19 16:34         ` Kees Cook

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=53A23FC4.5010302@gmx.de \
    --to=xypron.glpk@gmx.de \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-media@vger.kernel.org \
    --cc=m.chehab@samsung.com \
    --cc=mkrufky@linuxtv.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.