From gavin@rho.york.ac.uk  Tue Mar 31 09:55:17 2009
Return-Path: <gavin@rho.york.ac.uk>
Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34])
	by hub.freebsd.org (Postfix) with ESMTP id 7842A106566C
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 31 Mar 2009 09:55:16 +0000 (UTC)
	(envelope-from gavin@rho.york.ac.uk)
Received: from mail-gw1.york.ac.uk (mail-gw1.york.ac.uk [144.32.128.246])
	by mx1.freebsd.org (Postfix) with ESMTP id 286A18FC12
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 31 Mar 2009 09:55:15 +0000 (UTC)
	(envelope-from gavin@rho.york.ac.uk)
Received: from mail-gw6.york.ac.uk (mail-gw6.york.ac.uk [144.32.129.26])
	by mail-gw1.york.ac.uk (8.13.6/8.13.6) with ESMTP id n2V9tCKA029366
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 31 Mar 2009 10:55:12 +0100 (BST)
Received: from buffy-128.york.ac.uk ([144.32.128.160] helo=buffy.york.ac.uk)
	by mail-gw6.york.ac.uk with esmtps (TLSv1:AES256-SHA:256)
	(Exim 4.68)
	(envelope-from <gavin@rho.york.ac.uk>)
	id 1Loaga-0004qv-OO
	for FreeBSD-gnats-submit@freebsd.org; Tue, 31 Mar 2009 10:55:12 +0100
Received: from rho.york.ac.uk (localhost [127.0.0.1])
	by buffy.york.ac.uk (8.14.3/8.14.3) with ESMTP id n2V9aDSB083792
	for <FreeBSD-gnats-submit@freebsd.org>; Tue, 31 Mar 2009 10:36:13 +0100 (BST)
	(envelope-from gavin@rho.york.ac.uk)
Received: (from gavin@localhost)
	by rho.york.ac.uk (8.14.3/8.14.3/Submit) id n2V9Zuhb002487;
	Tue, 31 Mar 2009 10:35:56 +0100 (BST)
	(envelope-from gavin)
Message-Id: <200903310935.n2V9Zuhb002487@rho.york.ac.uk>
Date: Tue, 31 Mar 2009 10:35:56 +0100 (BST)
From: Gavin Atkinson <gavin@freebsd.org>
Reply-To: Gavin Atkinson <gavin@freebsd.org>
To: FreeBSD-gnats-submit@freebsd.org
Cc:
Subject: [ae] [jme] if_jme can assign duplicate MAC address
X-Send-Pr-Version: 3.113
X-GNATS-Notify:

>Number:         133239
>Category:       kern
>Synopsis:       [ae] [jme] [patch] if_jme can assign duplicate MAC address
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    gavin
>State:          closed
>Quarter:        
>Keywords:       
>Date-Required:  
>Class:          sw-bug
>Submitter-Id:   current-users
>Arrival-Date:   Tue Mar 31 10:00:00 UTC 2009
>Closed-Date:    Fri Jan 08 10:45:22 UTC 2010
>Last-Modified:  Fri Jan 08 10:45:22 UTC 2010
>Originator:     Gavin Atkinson
>Release:        FreeBSD 8.0-CURRENT i386
>Organization:
>Environment:
System: FreeBSD rho.york.ac.uk 8.0-CURRENT FreeBSD 8.0-CURRENT #45: Sun Mar 29 17:36:55 BST 2009 root@rho.york.ac.uk:/usr/obj/usr/src/sys/RHO i386 i386

>Description:
	If jme(4) cannot read the MAC address from the eeprom, it will
generate a fake MAC address using arc4random().  However, when doing this
it uses an OUI that is assigned to ASUSTek, and doesn't set the
"locally-assigned" bit, meaning that this has the potential to clash with
other machines, as well as generally not being a nice thing to do.
	Additionally, ae(4) suffers a similar problem, although at least
that driver does set the "locally-assigned" bit.
>How-To-Repeat:
	N/A
>Fix:

	Fix these drivers in the same way as ate(4) was fixed: use a
locally assigned address rather than stealing one.  The best way this
is currently done in FreeBSD seems to be to set the first three bytes
to 'b', 's', 'd' - so do the same here.  This works as 'b' has the
"llocally-assigned" bit set.

--- ae_jme_macaddress.diff begins here ---
Index: src/sys/dev/ae/if_ae.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/ae/if_ae.c,v
retrieving revision 1.3
diff -u -r1.3 if_ae.c
--- src/sys/dev/ae/if_ae.c	4 Feb 2009 20:35:31 -0000	1.3
+++ src/sys/dev/ae/if_ae.c	31 Mar 2009 09:02:38 -0000
@@ -1072,11 +1072,13 @@
 		eaddr[0] = arc4random();
 
 		/*
-		 * Set OUI to ASUSTek COMPUTER INC.
+		 * Set OUI to convenient locally assigned address.  'b'
+		 * is 0x62, which has the locally assigned bit set, and
+		 * the broadcast/multicast bit clear.
 		 */
-		sc->eaddr[0] = 0x02;	/* U/L bit set. */
-		sc->eaddr[1] = 0x1f;
-		sc->eaddr[2] = 0xc6;
+		sc->eaddr[0] = 'b';
+		sc->eaddr[1] = 's';
+		sc->eaddr[2] = 'd';
 		sc->eaddr[3] = (eaddr[0] >> 16) & 0xff;
 		sc->eaddr[4] = (eaddr[0] >> 8) & 0xff;
 		sc->eaddr[5] = (eaddr[0] >> 0) & 0xff;
Index: src/sys/dev/jme/if_jme.c
===================================================================
RCS file: /home/ncvs/src/sys/dev/jme/if_jme.c,v
retrieving revision 1.10
diff -u -r1.10 if_jme.c
--- src/sys/dev/jme/if_jme.c	4 Dec 2008 02:16:53 -0000	1.10
+++ src/sys/dev/jme/if_jme.c	31 Mar 2009 08:59:13 -0000
@@ -460,10 +460,15 @@
 		device_printf(sc->jme_dev,
 		    "generating fake ethernet address.\n");
 		par0 = arc4random();
-		/* Set OUI to JMicron. */
-		sc->jme_eaddr[0] = 0x00;
-		sc->jme_eaddr[1] = 0x1B;
-		sc->jme_eaddr[2] = 0x8C;
+
+		/*
+		 * Set OUI to convenient locally assigned address.  'b'
+		 * is 0x62, which has the locally assigned bit set, and
+		 * the broadcast/multicast bit clear.
+		 */
+		sc->jme_eaddr[0] = 'b';
+		sc->jme_eaddr[1] = 's';
+		sc->jme_eaddr[2] = 'd';
 		sc->jme_eaddr[3] = (par0 >> 16) & 0xff;
 		sc->jme_eaddr[4] = (par0 >> 8) & 0xff;
 		sc->jme_eaddr[5] = par0 & 0xff;
--- ae_jme_macaddress.diff ends here ---


>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->patched 
State-Changed-By: gavin 
State-Changed-When: Fri Dec 25 20:00:01 UTC 2009 
State-Changed-Why:  
jme(4) fixed in HEAD, ae(4) to be fixed soon 


Responsible-Changed-From-To: freebsd-bugs->gavin 
Responsible-Changed-By: gavin 
Responsible-Changed-When: Fri Dec 25 20:00:01 UTC 2009 
Responsible-Changed-Why:  
Mine 

http://www.freebsd.org/cgi/query-pr.cgi?pr=133239 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/133239: commit references a PR
Date: Fri, 25 Dec 2009 19:57:37 +0000 (UTC)

 Author: gavin
 Date: Fri Dec 25 19:57:28 2009
 New Revision: 200994
 URL: http://svn.freebsd.org/changeset/base/200994
 
 Log:
   Set the locally-assigned bit in the randomly generated Ethernet address
   if we end up having to generate one.
   
   PR:		kern/133239
   Discussed with:	yongari
   Approved by:	ed (mentor)
   MFC after:	2 weeks
 
 Modified:
   head/sys/dev/jme/if_jme.c
 
 Modified: head/sys/dev/jme/if_jme.c
 ==============================================================================
 --- head/sys/dev/jme/if_jme.c	Fri Dec 25 19:38:12 2009	(r200993)
 +++ head/sys/dev/jme/if_jme.c	Fri Dec 25 19:57:28 2009	(r200994)
 @@ -465,7 +465,7 @@ jme_reg_macaddr(struct jme_softc *sc)
  		    "generating fake ethernet address.\n");
  		par0 = arc4random();
  		/* Set OUI to JMicron. */
 -		sc->jme_eaddr[0] = 0x00;
 +		sc->jme_eaddr[0] = 0x02;	/* U/L bit set. */
  		sc->jme_eaddr[1] = 0x1B;
  		sc->jme_eaddr[2] = 0x8C;
  		sc->jme_eaddr[3] = (par0 >> 16) & 0xff;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/133239: commit references a PR
Date: Fri,  8 Jan 2010 10:14:10 +0000 (UTC)

 Author: gavin
 Date: Fri Jan  8 10:13:27 2010
 New Revision: 201778
 URL: http://svn.freebsd.org/changeset/base/201778
 
 Log:
   MFC r200994:
     Set the locally-assigned bit in the randomly generated Ethernet address
     if we end up having to generate one.
   
   PR:		kern/133239
   Discussed with:	yongari
   Approved by:	ed (mentor, implicit)
 
 Modified:
   stable/8/sys/dev/jme/if_jme.c
 Directory Properties:
   stable/8/sys/   (props changed)
   stable/8/sys/amd64/include/xen/   (props changed)
   stable/8/sys/cddl/contrib/opensolaris/   (props changed)
   stable/8/sys/contrib/dev/acpica/   (props changed)
   stable/8/sys/contrib/pf/   (props changed)
   stable/8/sys/dev/xen/xenpci/   (props changed)
 
 Modified: stable/8/sys/dev/jme/if_jme.c
 ==============================================================================
 --- stable/8/sys/dev/jme/if_jme.c	Fri Jan  8 09:59:13 2010	(r201777)
 +++ stable/8/sys/dev/jme/if_jme.c	Fri Jan  8 10:13:27 2010	(r201778)
 @@ -465,7 +465,7 @@ jme_reg_macaddr(struct jme_softc *sc)
  		    "generating fake ethernet address.\n");
  		par0 = arc4random();
  		/* Set OUI to JMicron. */
 -		sc->jme_eaddr[0] = 0x00;
 +		sc->jme_eaddr[0] = 0x02;	/* U/L bit set. */
  		sc->jme_eaddr[1] = 0x1B;
  		sc->jme_eaddr[2] = 0x8C;
  		sc->jme_eaddr[3] = (par0 >> 16) & 0xff;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/133239: commit references a PR
Date: Fri,  8 Jan 2010 10:14:36 +0000 (UTC)

 Author: gavin
 Date: Fri Jan  8 10:14:27 2010
 New Revision: 201779
 URL: http://svn.freebsd.org/changeset/base/201779
 
 Log:
   MFC r200994:
   
     Set the locally-assigned bit in the randomly generated Ethernet address
     if we end up having to generate one.
   
   PR:		kern/133239
   Discussed with:	yongari
   Approved by:	ed (mentor, implicit)
 
 Modified:
   stable/7/sys/dev/jme/if_jme.c
 Directory Properties:
   stable/7/sys/   (props changed)
   stable/7/sys/cddl/contrib/opensolaris/   (props changed)
   stable/7/sys/contrib/dev/acpica/   (props changed)
   stable/7/sys/contrib/pf/   (props changed)
 
 Modified: stable/7/sys/dev/jme/if_jme.c
 ==============================================================================
 --- stable/7/sys/dev/jme/if_jme.c	Fri Jan  8 10:13:27 2010	(r201778)
 +++ stable/7/sys/dev/jme/if_jme.c	Fri Jan  8 10:14:27 2010	(r201779)
 @@ -465,7 +465,7 @@ jme_reg_macaddr(struct jme_softc *sc)
  		    "generating fake ethernet address.\n");
  		par0 = arc4random();
  		/* Set OUI to JMicron. */
 -		sc->jme_eaddr[0] = 0x00;
 +		sc->jme_eaddr[0] = 0x02;	/* U/L bit set. */
  		sc->jme_eaddr[1] = 0x1B;
  		sc->jme_eaddr[2] = 0x8C;
  		sc->jme_eaddr[3] = (par0 >> 16) & 0xff;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 

From: dfilter@FreeBSD.ORG (dfilter service)
To: bug-followup@FreeBSD.org
Cc:  
Subject: Re: kern/133239: commit references a PR
Date: Fri,  8 Jan 2010 10:32:41 +0000 (UTC)

 Author: gavin
 Date: Fri Jan  8 10:32:27 2010
 New Revision: 201781
 URL: http://svn.freebsd.org/changeset/base/201781
 
 Log:
   If we fail to read the Ethernet address from the card, just print an
   warning message and attach without setting the Ethernet address to a
   random address.  It is not believed that this code can actually be
   executed, and if it does, we're better off printing an error message than
   faking up an Ethernet address.
   
   PR:		kern/133239
   Reviewed by:	yongari (earlier version of patch)
   Approved by:	ed (mentor)
 
 Modified:
   head/sys/dev/jme/if_jme.c
 
 Modified: head/sys/dev/jme/if_jme.c
 ==============================================================================
 --- head/sys/dev/jme/if_jme.c	Fri Jan  8 10:15:11 2010	(r201780)
 +++ head/sys/dev/jme/if_jme.c	Fri Jan  8 10:32:27 2010	(r201781)
 @@ -462,15 +462,7 @@ jme_reg_macaddr(struct jme_softc *sc)
  	if ((par0 == 0 && par1 == 0) ||
  	    (par0 == 0xFFFFFFFF && par1 == 0xFFFF)) {
  		device_printf(sc->jme_dev,
 -		    "generating fake ethernet address.\n");
 -		par0 = arc4random();
 -		/* Set OUI to JMicron. */
 -		sc->jme_eaddr[0] = 0x02;	/* U/L bit set. */
 -		sc->jme_eaddr[1] = 0x1B;
 -		sc->jme_eaddr[2] = 0x8C;
 -		sc->jme_eaddr[3] = (par0 >> 16) & 0xff;
 -		sc->jme_eaddr[4] = (par0 >> 8) & 0xff;
 -		sc->jme_eaddr[5] = par0 & 0xff;
 +		    "Failed to retrieve Ethernet address.\n");
  	} else {
  		sc->jme_eaddr[0] = (par0 >> 0) & 0xFF;
  		sc->jme_eaddr[1] = (par0 >> 8) & 0xFF;
 _______________________________________________
 svn-src-all@freebsd.org mailing list
 http://lists.freebsd.org/mailman/listinfo/svn-src-all
 To unsubscribe, send any mail to "svn-src-all-unsubscribe@freebsd.org"
 
State-Changed-From-To: patched->closed 
State-Changed-By: gavin 
State-Changed-When: Fri Jan 8 10:45:01 UTC 2010 
State-Changed-Why:  
Fixed in HEAD, 8 and 7. 

http://www.freebsd.org/cgi/query-pr.cgi?pr=133239 
>Unformatted:
