From: Florian Fainelli <f.fainelli@gmail.com>
To: Arend Van Spriel <arend.vanspriel@broadcom.com>,
brcm80211-dev-list.pdl@broadcom.com
Cc: linux-wireless@vger.kernel.org, pieterpg@broadcom.com,
kvalo@codeaurora.org, hante.meuleman@broadcom.com
Subject: Re: [PATCH 0/4] brcm80211: Misc coverity fixes
Date: Tue, 19 Jul 2016 13:09:58 -0700 [thread overview]
Message-ID: <578E8916.6030601@gmail.com> (raw)
In-Reply-To: <9774b991-ef09-66c9-c997-b2d043db5f0f@broadcom.com>
On 07/19/2016 12:36 PM, Arend Van Spriel wrote:
> On 19-7-2016 20:30, Florian Fainelli wrote:
>> On 07/19/2016 11:21 AM, Arend Van Spriel wrote:
>>> On 19-7-2016 18:41, Florian Fainelli wrote:
>>>> On 07/19/2016 02:20 AM, Arend Van Spriel wrote:
>>>>> + Bob
>>>>>
>>>>> On 19-7-2016 1:24, Florian Fainelli wrote:
>>>>>> Hi,
>>>>>>
>>>>>> This patch series addresses several coverity issues, they all seemed relevant
>>>>>> to me.
>>>>>
>>>>> Hi Florian,
>>>>>
>>>>> Been a while so nice to see coverity fixes popping up. Actually
>>>>> something that I have on my todo list to add our brcm80211 to coverity
>>>>> within Broadcom. So being curious as to whether this comes from a public
>>>>> coverity server like scan.coverity.com. Maybe bit redundant to setup
>>>>> internally if there is a good coverity analysis publicly available.
>>>>
>>>> This is coming from the public coverity instance, if you create an
>>>> account there I could transfer to you the other bugs that affect the
>>>> brcm80211 drivers (hint: there is a ton of of them because of
>>>> brcmf_fil_iovar_int_get and friends).
>>>
>>> I did create an account and noticed "Broadcom Linux Kernel Open Source
>>> Repository" project. Anyways, let me have it :-p
>>>
>>>>>
>>>>>> There is also a ton of warnings in Coverity caused by brcmf_fil_iovar_int_get()
>>>>>> and friends because of the initial access:
>>>>>>
>>>>>> __le32 data_le = cpu_to_le32(*data) which can utilize unitialized memory. I am
>>>>>> not sure if we actually care about any kind of initial, value, but if we don't,
>>>>>> then the fix should be fairly obvious.
>>>>>
>>>>> If we are talking only about "get" variant than we mostly don't care.
>>>>> Some getters support filter variables to be passed towards firmware. I
>>>>> have not looked at the analysis to give any judgement here.
>>>>
>>>> Alright, do you have a good way to test a patch that would just zero
>>>> initialize the data variable in brcmf_fil_iovar_int_get()? If so, I will
>>>> submit one with the appropriate CID references.
>>>
>>> But why would we care to zero the data when firmware simply overwrites
>>> it. These control messages are not high-prio so we can burn some cycles
>>> to initialize the variable, but to me this is a false positive.
>>
>> We have something like this all over the place:
>>
>> func() {
>> u32 val;
>>
>> brcmf_fil_iovar_int_get(..., &val, sizeof(val));
>
> If I am not mistaken the iovar_int_get only passes &val.
We pass data and len:
err = brcmf_fil_iovar_data_get(ifp, name, &data_le,
sizeof(data_le));
if (err == 0)
>
>> }
>>
>> brcmf_fil_iovar_int_get(.., const u32 *data, size_t len)
>> {
>> __le32 data_le = cpu_to_le32(*data);
>> ...
>> }
>>
>> So here data_le also has an uninitialized value, and later on, this:
>>
>>
>> buflen = brcmf_create_iovar(name, data, len, drvr->proto_buf,
>> sizeof(drvr->proto_buf));
>
> create_iovar is used for both get and set...
>
>> }
>>
>> And this function does this:
>>
>> static u32
>> brcmf_create_iovar(char *name, const char *data, u32 datalen,
>> char *buf, u32 buflen)
>> {
>> u32 len;
>>
>> len = strlen(name) + 1;
>>
>> if ((len + datalen) > buflen)
>> return 0;
>>
>> memcpy(buf, name, len);
>>
>> /* append data onto the end of the name string */
>> if (data && datalen)
>> memcpy(&buf[len], data, datalen);
>
> but it does not have that info so it does the memcpy. We could add an
> extra parameter to avoid the memcpy for get, but as said there are
> instances where get passes query data to firmware.
OK.
>
>> return len + datalen;
>> }
>>
>>
>> We are essentially copying into buf an uninitialized value coming from
>> the stack, which seems like a problem to me.
>
> Functionally I still don't see the problem. For the instances where this
> is true, the buf will be overwritten with data from firmware. It may be
> a security issue as stack content is passed to an external device.
That's the part that I am mostly concerned with, and the fact that this
is a genuine uninitialized value, not under direct control, but still.
--
Florian
prev parent reply other threads:[~2016-07-19 20:10 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-07-18 23:24 [PATCH 0/4] brcm80211: Misc coverity fixes Florian Fainelli
2016-07-18 23:24 ` [PATCH 1/4] brcmfmac: Fix glob_skb leak in brcmf_sdiod_recv_chain Florian Fainelli
2016-07-19 10:19 ` Arend Van Spriel
2016-07-19 18:14 ` [1/4] " Kalle Valo
2016-07-18 23:24 ` [PATCH 2/4] brcmsmac: Free packet if dma_mapping_error() fails in dma_rxfill Florian Fainelli
2016-07-19 9:25 ` Arend Van Spriel
2016-07-18 23:24 ` [PATCH 3/4] brcmsmac: Fix invalid memcpy() size in brcms_c_d11hdrs_mac80211 Florian Fainelli
2016-07-19 10:38 ` Arend Van Spriel
2016-07-19 12:40 ` Kalle Valo
2016-07-19 16:42 ` Florian Fainelli
2016-07-19 18:26 ` Arend Van Spriel
2016-07-18 23:24 ` [PATCH 4/4] brcmsmac: Initialize power in brcms_c_stf_ss_algo_channel_get() Florian Fainelli
2016-07-19 10:26 ` Arend Van Spriel
2016-07-19 9:20 ` [PATCH 0/4] brcm80211: Misc coverity fixes Arend Van Spriel
2016-07-19 16:41 ` Florian Fainelli
2016-07-19 18:21 ` Arend Van Spriel
2016-07-19 18:30 ` Florian Fainelli
2016-07-19 19:36 ` Arend Van Spriel
2016-07-19 20:09 ` Florian Fainelli [this message]
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=578E8916.6030601@gmail.com \
--to=f.fainelli@gmail.com \
--cc=arend.vanspriel@broadcom.com \
--cc=brcm80211-dev-list.pdl@broadcom.com \
--cc=hante.meuleman@broadcom.com \
--cc=kvalo@codeaurora.org \
--cc=linux-wireless@vger.kernel.org \
--cc=pieterpg@broadcom.com \
/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.