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
| ||
|
Date: Tue, 27 Jul 2010 12:47:30 -0700 From: Brandon Philips <brandon@...p.org> To: stable@...nel.org, Alexander Duyck <alexander.h.duyck@...el.com>, Jeff Kirsher <jeffrey.t.kirsher@...el.com> Cc: netdev@...r.kernel.org Subject: Re: [PATCH][2.6.32.y] igb: change how we handle alternate mac addresses On 09:48 Tue 27 Jul 2010, bphilips@...e.de wrote: > Without this patch bonding with igb doesn't work correctly. Applies to > 2.6.32.y. Sorry, I missed the CCing netdev. -stable patch proposal for 2.6.32.y Thanks, Brandon > From 22896639af98ebc721a94ed71fc3acf2fb4a24dc Mon Sep 17 00:00:00 2001 > From: Alexander Duyck <alexander.h.duyck@...el.com> > Date: Mon, 5 Oct 2009 06:34:25 +0000 > Subject: [PATCH] igb: change how we handle alternate mac addresses > > This patch allows us to treat the alternate mac address as though it is the > physical address on the adapter. This is accomplished by letting the > alt_mac_address function to only fail on an NVM error. If no errors occur > and the alternate mac address is not present then RAR0 is read as the > default mac address. > > Signed-off-by: Alexander Duyck <alexander.h.duyck@...el.com> > Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@...el.com> > Signed-off-by: David S. Miller <davem@...emloft.net> > --- > drivers/net/igb/e1000_82575.c | 13 +++++++++++-- > drivers/net/igb/e1000_hw.h | 2 ++ > drivers/net/igb/e1000_mac.c | 17 +++++++++-------- > 3 files changed, 22 insertions(+), 10 deletions(-) > > diff --git a/drivers/net/igb/e1000_82575.c b/drivers/net/igb/e1000_82575.c > index e07f66c..45063c2 100644 > --- a/drivers/net/igb/e1000_82575.c > +++ b/drivers/net/igb/e1000_82575.c > @@ -1152,9 +1152,18 @@ static s32 igb_read_mac_addr_82575(struct e1000_hw *hw) > { > s32 ret_val = 0; > > - if (igb_check_alt_mac_addr(hw)) > - ret_val = igb_read_mac_addr(hw); > + /* > + * If there's an alternate MAC address place it in RAR0 > + * so that it will override the Si installed default perm > + * address. > + */ > + ret_val = igb_check_alt_mac_addr(hw); > + if (ret_val) > + goto out; > + > + ret_val = igb_read_mac_addr(hw); > > +out: > return ret_val; > } > > diff --git a/drivers/net/igb/e1000_hw.h b/drivers/net/igb/e1000_hw.h > index 4e7850d..fad7cf5 100644 > --- a/drivers/net/igb/e1000_hw.h > +++ b/drivers/net/igb/e1000_hw.h > @@ -54,6 +54,8 @@ struct e1000_hw; > #define E1000_FUNC_0 0 > #define E1000_FUNC_1 1 > > +#define E1000_ALT_MAC_ADDRESS_OFFSET_LAN1 3 > + > enum e1000_mac_type { > e1000_undefined = 0, > e1000_82575, > diff --git a/drivers/net/igb/e1000_mac.c b/drivers/net/igb/e1000_mac.c > index 986aa90..4969a5b 100644 > --- a/drivers/net/igb/e1000_mac.c > +++ b/drivers/net/igb/e1000_mac.c > @@ -185,13 +185,12 @@ s32 igb_check_alt_mac_addr(struct e1000_hw *hw) > } > > if (nvm_alt_mac_addr_offset == 0xFFFF) { > - ret_val = -(E1000_NOT_IMPLEMENTED); > + /* There is no Alternate MAC Address */ > goto out; > } > > if (hw->bus.func == E1000_FUNC_1) > - nvm_alt_mac_addr_offset += ETH_ALEN/sizeof(u16); > - > + nvm_alt_mac_addr_offset += E1000_ALT_MAC_ADDRESS_OFFSET_LAN1; > for (i = 0; i < ETH_ALEN; i += 2) { > offset = nvm_alt_mac_addr_offset + (i >> 1); > ret_val = hw->nvm.ops.read(hw, offset, 1, &nvm_data); > @@ -206,14 +205,16 @@ s32 igb_check_alt_mac_addr(struct e1000_hw *hw) > > /* if multicast bit is set, the alternate address will not be used */ > if (alt_mac_addr[0] & 0x01) { > - ret_val = -(E1000_NOT_IMPLEMENTED); > + hw_dbg("Ignoring Alternate Mac Address with MC bit set\n"); > goto out; > } > > - for (i = 0; i < ETH_ALEN; i++) > - hw->mac.addr[i] = hw->mac.perm_addr[i] = alt_mac_addr[i]; > - > - hw->mac.ops.rar_set(hw, hw->mac.perm_addr, 0); > + /* > + * We have a valid alternate MAC address, and we want to treat it the > + * same as the normal permanent MAC address stored by the HW into the > + * RAR. Do this by mapping this address into RAR0. > + */ > + hw->mac.ops.rar_set(hw, alt_mac_addr, 0); > > out: > return ret_val; > -- > 1.7.1 > -- 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