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  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
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