staging: wlan-ng: Fix restricted __be16 degrades to integer
authorEbru Akagunduz <ebru.akagunduz@gmail.com>
Mon, 20 Oct 2014 23:47:29 +0000 (02:47 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 23 Oct 2014 06:10:49 +0000 (14:10 +0800)
skb->protocol variable type is __be16 and in if condition
it is comparing with ETH_P_80211_RAW constant variable
which is not __be16 type. Using be16_to_cpu() function,
value of skb->protocol converted native processor format.
This bug was found by sparse.

Signed-off-by: Ebru Akagunduz <ebru.akagunduz@gmail.com>
Acked-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/wlan-ng/p80211netdev.c

index 2dd9bf8..a9c1e0b 100644 (file)
@@ -358,7 +358,7 @@ static int p80211knetdev_hard_start_xmit(struct sk_buff *skb,
                 * and return success .
                 * TODO: we need a saner way to handle this
                 */
-               if (skb->protocol != ETH_P_80211_RAW) {
+               if (be16_to_cpu(skb->protocol) != ETH_P_80211_RAW) {
                        netif_start_queue(wlandev->netdev);
                        netdev_notice(netdev, "Tx attempt prior to association, frame dropped.\n");
                        netdev->stats.tx_dropped++;
@@ -369,7 +369,7 @@ static int p80211knetdev_hard_start_xmit(struct sk_buff *skb,
        }
 
        /* Check for raw transmits */
-       if (skb->protocol == ETH_P_80211_RAW) {
+       if (be16_to_cpu(skb->protocol) == ETH_P_80211_RAW) {
                if (!capable(CAP_NET_ADMIN)) {
                        result = 1;
                        goto failed;