From: Arend van Spriel <arend@broadcom.com>
To: Dan Carpenter <dan.carpenter@oracle.com>
Cc: <linux-wireless@vger.kernel.org>, <brcm80211-dev-list@broadcom.com>
Subject: Re: brcm80211: use endian annotation for pmk related structure
Date: Fri, 31 Oct 2014 15:18:27 +0100 [thread overview]
Message-ID: <54539A33.6000001@broadcom.com> (raw)
In-Reply-To: <20141031125136.GA17467@mwanda>
On 10/31/14 13:51, Dan Carpenter wrote:
> Hello Arend van Spriel,
>
> The patch 40c8e95af02d: "brcm80211: use endian annotation for pmk
> related structure" from Oct 12, 2011, leads to the following static
> checker warning:
>
> drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c:2965 brcmf_cfg80211_set_pmksa()
> warn: can 'pmkid_len' be negative?
>
> drivers/net/wireless/brcm80211/brcmfmac/cfg80211.c
> 2950 brcmf_cfg80211_set_pmksa(struct wiphy *wiphy, struct net_device *ndev,
> 2951 struct cfg80211_pmksa *pmksa)
> 2952 {
> 2953 struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
> 2954 struct brcmf_if *ifp = netdev_priv(ndev);
> 2955 struct pmkid_list *pmkids =&cfg->pmk_list->pmkids;
> 2956 s32 err = 0;
> 2957 int i;
> 2958 int pmkid_len;
> 2959
> 2960 brcmf_dbg(TRACE, "Enter\n");
> 2961 if (!check_vif_up(ifp->vif))
> 2962 return -EIO;
> 2963
> 2964 pmkid_len = le32_to_cpu(pmkids->npmkid);
>
> The thinking behind this check is that endian data is less trust worthy
> than cpu data. But probably this comes from the hardware so it's fine?
>
> Anyway, let's assume pmkid_len = -1.
>
> 2965 for (i = 0; i< pmkid_len; i++)
> 2966 if (!memcmp(pmksa->bssid, pmkids->pmkid[i].BSSID, ETH_ALEN))
> 2967 break;
>
> We don't enter this loop.
>
> 2968 if (i< WL_NUM_PMKIDS_MAX) {
>
> Zero is less than WL_NUM_PMKIDS_MAX.
>
> 2969 memcpy(pmkids->pmkid[i].BSSID, pmksa->bssid, ETH_ALEN);
> 2970 memcpy(pmkids->pmkid[i].PMKID, pmksa->pmkid, WLAN_PMKID_LEN);
> 2971 if (i == pmkid_len) {
> ^^^^^^^^^^^^^^
> This is false.
>
> 2972 pmkid_len++;
> 2973 pmkids->npmkid = cpu_to_le32(pmkid_len);
> 2974 }
> 2975 } else
> 2976 err = -EINVAL;
> 2977
> 2978 brcmf_dbg(CONN, "set_pmksa,IW_PMKSA_ADD - PMKID: %pM =\n",
> 2979 pmkids->pmkid[pmkid_len].BSSID);
> ^^^^^^^^^^^^^^^^^^^^^^^
> Underflow.
>
> 2980 for (i = 0; i< WLAN_PMKID_LEN; i++)
> 2981 brcmf_dbg(CONN, "%02x\n", pmkids->pmkid[pmkid_len].PMKID[i]);
> ^^^^^^^^^^^^^^^^^^^^^^^^
> Underflow.
>
> 2982
> 2983 err = brcmf_update_pmklist(ndev, cfg->pmk_list, err);
> 2984
> 2985 brcmf_dbg(TRACE, "Exit\n");
> 2986 return err;
> 2987 }
Hi Dan,
Understood. Not sure what the motivation is to mistrust endian more.
Simply because there could be conversion errors? Anyway, the main
question is whether pmkid_len is always between 0 and WLAN_PMKID_LEN. As
far as I know it is. We could 1) add additional checks here, 2) make
pmkid_len of u32 type, or 3) just mention the (sure) assumption in a
comment. I would prefer option 2) or 3).
Regards,
Arend
next prev parent reply other threads:[~2014-10-31 14:18 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-31 12:51 brcm80211: use endian annotation for pmk related structure Dan Carpenter
2014-10-31 14:18 ` Arend van Spriel [this message]
2014-10-31 14:26 ` Dan Carpenter
2014-10-31 14:37 ` Arend van Spriel
2014-11-03 12:22 ` Dan Carpenter
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=54539A33.6000001@broadcom.com \
--to=arend@broadcom.com \
--cc=brcm80211-dev-list@broadcom.com \
--cc=dan.carpenter@oracle.com \
--cc=linux-wireless@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.