lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20091226081635.GA2506@psychotron.redhat.com>
Date:	Sat, 26 Dec 2009 09:16:35 +0100
From:	Jiri Pirko <jpirko@...hat.com>
To:	Daniel Drake <dsd@...top.org>
Cc:	davem@...emloft.net, netdev@...r.kernel.org, pcnet32@...izon.net,
	dcbw@...hat.com
Subject: Re: [PATCH] Fix MAC address access in 3c507, ibmlana, pcnet32 and
 libertas

Thu, Dec 24, 2009 at 07:11:24PM CET, dsd@...top.org wrote:
>Commit f001fde5eadd915f4858d22ed70d7040f48767cf changed
>net_device.dev_addr from a 32-byte array to a pointer.
>
>I found 4 ethernet drivers which rely on sizeof(dev_addr), which are now
>only copying 4 bytes of the address information on 32bit systems.
>
>Fix them to use ETH_ALEN.
>
>Signed-off-by: Daniel Drake <dsd@...top.org>
>---
>
>Fix tested and confirmed on libertas, review of the other 3 drivers
>would be appreciated.
>
> drivers/net/3c507.c                  |    4 ++--
> drivers/net/ibmlana.c                |    3 ++-
> drivers/net/pcnet32.c                |    3 ++-
> drivers/net/wireless/libertas/mesh.c |    4 ++--
> 4 files changed, 8 insertions(+), 6 deletions(-)
>
>diff --git a/drivers/net/3c507.c b/drivers/net/3c507.c
>index fbc2311..77cf090 100644
>--- a/drivers/net/3c507.c
>+++ b/drivers/net/3c507.c
>@@ -56,6 +56,7 @@ static const char version[] =
> #include <linux/errno.h>
> #include <linux/netdevice.h>
> #include <linux/etherdevice.h>
>+#include <linux/if_ether.h>
> #include <linux/skbuff.h>
> #include <linux/slab.h>
> #include <linux/init.h>
>@@ -734,8 +735,7 @@ static void init_82586_mem(struct net_device *dev)
> 	memcpy_toio(lp->base, init_words + 5, sizeof(init_words) - 10);
> 
> 	/* Fill in the station address. */
>-	memcpy_toio(lp->base+SA_OFFSET, dev->dev_addr,
>-		   sizeof(dev->dev_addr));
>+	memcpy_toio(lp->base+SA_OFFSET, dev->dev_addr, ETH_ALEN);
> 
> 	/* The Tx-block list is written as needed.  We just set up the values. */
> 	lp->tx_cmd_link = IDLELOOP + 4;
>diff --git a/drivers/net/ibmlana.c b/drivers/net/ibmlana.c
>index 090a6d3..052c740 100644
>--- a/drivers/net/ibmlana.c
>+++ b/drivers/net/ibmlana.c
>@@ -87,6 +87,7 @@ History:
> #include <linux/module.h>
> #include <linux/netdevice.h>
> #include <linux/etherdevice.h>
>+#include <linux/if_ether.h>
> #include <linux/skbuff.h>
> #include <linux/bitops.h>
> 
>@@ -988,7 +989,7 @@ static int __devinit ibmlana_init_one(struct device *kdev)
> 
> 	/* copy out MAC address */
> 
>-	for (z = 0; z < sizeof(dev->dev_addr); z++)
>+	for (z = 0; z < ETH_ALEN; z++)
> 		dev->dev_addr[z] = inb(dev->base_addr + MACADDRPROM + z);
> 
> 	/* print config */
>diff --git a/drivers/net/pcnet32.c b/drivers/net/pcnet32.c
>index dcc67a3..e154677 100644
>--- a/drivers/net/pcnet32.c
>+++ b/drivers/net/pcnet32.c
>@@ -45,6 +45,7 @@ static const char *const version =
> #include <linux/crc32.h>
> #include <linux/netdevice.h>
> #include <linux/etherdevice.h>
>+#include <linux/if_ether.h>
> #include <linux/skbuff.h>
> #include <linux/spinlock.h>
> #include <linux/moduleparam.h>
>@@ -1765,7 +1766,7 @@ pcnet32_probe1(unsigned long ioaddr, int shared, struct pci_dev *pdev)
> 
> 	/* if the ethernet address is not valid, force to 00:00:00:00:00:00 */
> 	if (!is_valid_ether_addr(dev->perm_addr))
>-		memset(dev->dev_addr, 0, sizeof(dev->dev_addr));
>+		memset(dev->dev_addr, 0, ETH_ALEN);
> 
> 	if (pcnet32_debug & NETIF_MSG_PROBE) {
> 		printk(" %pM", dev->dev_addr);
>diff --git a/drivers/net/wireless/libertas/mesh.c b/drivers/net/wireless/libertas/mesh.c
>index 2f91c9b..92b7a35 100644
>--- a/drivers/net/wireless/libertas/mesh.c
>+++ b/drivers/net/wireless/libertas/mesh.c
>@@ -2,6 +2,7 @@
> #include <linux/delay.h>
> #include <linux/etherdevice.h>
> #include <linux/netdevice.h>
>+#include <linux/if_ether.h>
> #include <linux/if_arp.h>
> #include <linux/kthread.h>
> #include <linux/kfifo.h>
>@@ -351,8 +352,7 @@ int lbs_add_mesh(struct lbs_private *priv)
> 
> 	mesh_dev->netdev_ops = &mesh_netdev_ops;
> 	mesh_dev->ethtool_ops = &lbs_ethtool_ops;
>-	memcpy(mesh_dev->dev_addr, priv->dev->dev_addr,
>-			sizeof(priv->dev->dev_addr));
>+	memcpy(mesh_dev->dev_addr, priv->dev->dev_addr, ETH_ALEN);
> 
> 	SET_NETDEV_DEV(priv->mesh_dev, priv->dev->dev.parent);
> 
>-- 
>1.6.2.5
>

Looks good to me.

Reviewed-by: Jiri Pirko <jpirko@...hat.com>

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ