From gavin@rho.york.ac.uk Tue Mar 31 09:55:17 2009 Return-Path: Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 7842A106566C for ; 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 ; 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 ; 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 ) 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 ; 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 Reply-To: Gavin Atkinson 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: