[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1252700442.15292.62.camel@Joe-Laptop.home>
Date: Fri, 11 Sep 2009 13:20:42 -0700
From: Joe Perches <joe@...ches.com>
To: David Miller <davem@...emloft.net>
Cc: shemminger@...tta.com, jeffrey.t.kirsher@...el.com,
netdev@...r.kernel.org, gospo@...hat.com, gregory.v.rose@...el.com,
donald.c.skidmore@...el.com
Subject: [net-next PATCH] etherdevice.h: random_ether_addr update
On Fri, 2009-09-11 at 12:15 -0700, David Miller wrote:
> From: Joe Perches <joe@...ches.com>
> Date: Thu, 10 Sep 2009 20:02:43 -0700
> > On Thu, 2009-09-10 at 19:07 -0700, Stephen Hemminger wrote:
> >> On Thu, 10 Sep 2009 18:48:27 -0700
> >> Jeff Kirsher <jeffrey.t.kirsher@...el.com> wrote:
> >> > From: Gregory Rose <gregory.v.rose@...el.com>
> >> > This patch changes the default VF MAC address generation to use an Intel
> >> > Organizational Unit Identifier (OUI), instead of a fully randomized
> >> > Ethernet address. This is to help prevent accidental MAC address
> >> > collisions.
> > I think this not a very good idea.
> I also completely agree that this patch is not a wise move.
Perhaps this?
random_ether_address should not assign an "0x02" leading octet.
"02" has the local assignment bit set,
but is actually a value assigned via OUI.
Do not use get_random_bytes to avoid drawing down entropy pool.
Signed-off-by: Joe Perches <joe@...ches.com>
diff --git a/include/linux/etherdevice.h b/include/linux/etherdevice.h
index 3d7a668..ae7f261 100644
--- a/include/linux/etherdevice.h
+++ b/include/linux/etherdevice.h
@@ -121,9 +121,17 @@ static inline int is_valid_ether_addr(const u8 *addr)
*/
static inline void random_ether_addr(u8 *addr)
{
- get_random_bytes (addr, ETH_ALEN);
- addr [0] &= 0xfe; /* clear multicast bit */
- addr [0] |= 0x02; /* set local assignment bit (IEEE802) */
+ int i;
+
+ /* not calling get_random_bytes to avoid using entropy */
+ do {
+ addr[0] = random32();
+ } while (addr[0] == 0 || addr[0] == 1);
+ /* get a non-zero, non-one leading octet */
+ addr[0] &= 0xfe; /* clear multicast bit */
+ addr[0] |= 0x02; /* set local assignment bit (IEEE802) */
+ for (i = 1; i < ETH_ALEN; i++)
+ addr[i] = random32();
}
/**
--
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