Skip to contentSkip to conversation

net: pxa168_eth: set the mac address on the Ethernet controller

DISCUSSION Dan Carpenter 2 participants 3 messages Oct 1, 2014 – Oct 3, 2014 Kernel janitors

lore
Share & tools
lore
#0 lore raw

Hello Antoine Ténart,

The patch 39830689ef0a: "net: pxa168_eth: set the mac address on the Ethernet controller" from Sep 30, 2014, leads to the following static checker warning:

	drivers/net/ethernet/marvell/pxa168_eth.c:640 pxa168_eth_set_mac_address()
	warn: using signed char for bitops

drivers/net/ethernet/marvell/pxa168_eth.c
625 static int pxa168_eth_set_mac_address(struct net_device *dev, void *addr) 626 {

   627          struct sockaddr *sa = addr;
   628          struct pxa168_eth_private *pep = netdev_priv(dev);
   629          unsigned char oldMac[ETH_ALEN];
   630          u32 mac_h, mac_l;
   631  
   632          if (!is_valid_ether_addr(sa->sa_data))
   633                  return -EADDRNOTAVAIL;
   634          memcpy(oldMac, dev->dev_addr, ETH_ALEN);
   635          memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
   636  
   637          mac_h = sa->sa_data[0] << 24;
   638          mac_h |= sa->sa_data[1] << 16;
   639          mac_h |= sa->sa_data[2] << 8;
   640          mac_h |= sa->sa_data[3];

You may end up with weird signedness bugs doing this (depending of if the highest bit is ever used).

   641          mac_l = sa->sa_data[4] << 8;
   642          mac_l |= sa->sa_data[5];
   643          wrl(pep, MAC_ADDR_HIGH, mac_h);
   644          wrl(pep, MAC_ADDR_LOW, mac_l);
   645  
   646          netif_addr_lock_bh(dev);
   647          update_hash_table_mac_address(pep, oldMac, dev->dev_addr);
   648          netif_addr_unlock_bh(dev);
   649          return 0;

650 }

regards,
dan carpenter
--
To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html

#1 lore raw

Hi Dan,

Quoted 8 lines · Dan Carpenter

Hello Antoine Ténart,

The patch 39830689ef0a: "net: pxa168_eth: set the mac address on the Ethernet controller" from Sep 30, 2014, leads to the following static checker warning:

	drivers/net/ethernet/marvell/pxa168_eth.c:640 pxa168_eth_set_mac_address()
	warn: using signed char for bitops

Thanks for reporting this!

Quoted 19 lines

drivers/net/ethernet/marvell/pxa168_eth.c
625 static int pxa168_eth_set_mac_address(struct net_device *dev, void *addr)

   626  {
   627          struct sockaddr *sa = addr;
   628          struct pxa168_eth_private *pep = netdev_priv(dev);
   629          unsigned char oldMac[ETH_ALEN];
   630          u32 mac_h, mac_l;
   631  
   632          if (!is_valid_ether_addr(sa->sa_data))
   633                  return -EADDRNOTAVAIL;
   634          memcpy(oldMac, dev->dev_addr, ETH_ALEN);
   635          memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
   636  
   637          mac_h = sa->sa_data[0] << 24;
   638          mac_h |= sa->sa_data[1] << 16;
   639          mac_h |= sa->sa_data[2] << 8;
   640          mac_h |= sa->sa_data[3];
Quoted 2 lines

You may end up with weird signedness bugs doing this (depending of if the highest bit is ever used).

Since dev->dev_addr is of type unsigned char *, I could use it instead. That's what most of the other net drivers do, at least.

While having a look on other net drivers, I spotted drivers/net/ethernet/toshiba/spider_net.c which is also using signed char for bitops and may need a fix:

        macu = (addr->sa_data[0]<<24) + (addr->sa_data[1]<<16) +
                (addr->sa_data[2]<<8) + (addr->sa_data[3]);
        macl = (addr->sa_data[4]<<8) + (addr->sa_data[5]);

I'll cook up a fix for both of them if the solution's OK with you.

Antoine

Signature · 7 lines
Antoine Ténart, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe kernel-janitors" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
#2 lore raw
In reply to Dan Carpenter
Quoted 2 lines · Antoine Tenart

I'll cook up a fix for both of them if the solution's OK with you.

Fantastic. Thanks for finding the spider_net issue as well!

regards,
dan carpenter