From: Dan Carpenter <dan.carpenter@oracle.com>
To: halli manjunatha <hallimanju@gmail.com>
Cc: linux-media@vger.kernel.org
Subject: Re: [media] drivers:media:radio: wl128x: FM Driver Common sources
Date: Fri, 13 Jul 2012 23:36:05 +0300 [thread overview]
Message-ID: <20120713203605.GR6113@mwanda> (raw)
In-Reply-To: <CAMT6PyccqZ=KJ4+EuPXXaCHZ+YK3+MHWmPVbZEuTOD_e1WTBKA@mail.gmail.com>
On Fri, Jul 13, 2012 at 01:17:11PM -0500, halli manjunatha wrote:
> On Fri, Jul 13, 2012 at 6:51 AM, Dan Carpenter <dan.carpenter@oracle.com> wrote:
> >
> > Hello Manjunatha Halli,
> >
> > The patch e8454ff7b9a4: "[media] drivers:media:radio: wl128x: FM
> > Driver Common sources" from Jan 11, 2011, leads to the following
> > warning:
> > drivers/media/radio/wl128x/fmdrv_common.c:596
> > fm_irq_handle_flag_getcmd_resp()
> > error: untrusted 'fm_evt_hdr->dlen' is not capped properly
> >
> > [ this is on my private Smatch stuff with too many false positives for
> > general release ].
> >
> > 584 static void fm_irq_handle_flag_getcmd_resp(struct fmdev *fmdev)
> > 585 {
> > 586 struct sk_buff *skb;
> > 587 struct fm_event_msg_hdr *fm_evt_hdr;
> > 588
> > 589 if (check_cmdresp_status(fmdev, &skb))
> > 590 return;
> > 591
> > 592 fm_evt_hdr = (void *)skb->data;
> > 593
> > 594 /* Skip header info and copy only response data */
> > 595 skb_pull(skb, sizeof(struct fm_event_msg_hdr));
> > 596 memcpy(&fmdev->irq_info.flag, skb->data,
> > fm_evt_hdr->dlen);
> > ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> >
> > 597
> > 598 fmdev->irq_info.flag = be16_to_cpu(fmdev->irq_info.flag);
> > 599 fmdbg("irq: flag register(0x%x)\n", fmdev->irq_info.flag);
> > 600
> > 601 /* Continue next function in interrupt handler table */
> > 602 fm_irq_call_stage(fmdev, FM_HW_MAL_FUNC_IDX);
> > 603 }
> >
> > What are we copying here? How do we know that ->dlen doesn't overflow
> > the buffer? Why do we memcpy() and the overwrite part of the data on
> > the next line?
>
> Here I am trying to get the current value of the flag register which
> is of maximum 16bit wide.
>
> So ->dlen value never overflow the buffer.
>
> In memcopy() case I am just trying to avoid 1 more variable so first I
> memcopy the skb->data to ->irq_info.flag then I will correct the
> endianness of
>
> ->irq_info.flag in next line.
>
I am sorry but your email makes no sense at all. This is a remote
security hole because ->dlen is a u8 that is chosen from over the
network. The memcpy would let us copy over some function pointers
in fmdev->irq_info->timer and use that to become root.
->dlen is not checked anywhere.
You say it copies 16 bits of data (in other words ->dlen is a
maximum of 2 (2 bytes). fmdev->irq_info.flag is 16 bits. In other
words the memcpy() can be removed.
Then you contradict yourself and say it copies other unspecified
data as well.
Can someone else take a look?
regards,
dan carpenter
next prev parent reply other threads:[~2012-07-13 20:36 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-07-13 11:51 [media] drivers:media:radio: wl128x: FM Driver Common sources Dan Carpenter
2012-07-13 18:17 ` halli manjunatha
2012-07-13 20:36 ` Dan Carpenter [this message]
2012-07-13 21:21 ` halli manjunatha
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=20120713203605.GR6113@mwanda \
--to=dan.carpenter@oracle.com \
--cc=hallimanju@gmail.com \
--cc=linux-media@vger.kernel.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.