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
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20140522155619.GA321@mikrodark.usersys.redhat.com>
Date:	Thu, 22 May 2014 17:56:19 +0200
From:	Veaceslav Falico <vfalico@...il.com>
To:	Vlad Yasevich <vyasevich@...il.com>
Cc:	netdev@...r.kernel.org, Jay Vosburgh <j.vosburgh@...il.com>,
	Andy Gospodarek <andy@...yhouse.net>
Subject: Re: [PATCH net-next 2/2] bonding: remove alb_set_mac_address()

On Thu, May 22, 2014 at 11:28:37AM -0400, Vlad Yasevich wrote:
>On 05/22/2014 09:12 AM, Veaceslav Falico wrote:
>> Currently it's called only from bond_alb_set_mac_address(), which is called
>> only for ALB mode, and it does nothing in case the mode is ALB. So,
>> basically, it's a no-op. All the needed functionality (modifying the active
>> slave's mac address, per example) is handled by the
>> bond_alb_set_mac_address() itself.
>>
>> So remove it, as it's not needed.
>
>>From the comments and code, it seems like it should be called for TLB
>mode as well as it does that weird half-setting of the address that
>TLB seems to want.  Is that not needed any more?

It's still needed, but neither before my patch, nor after it works. The
whole "save src mac address in dev->dev_addr" approach is wrong, and should
be fixed - I'm working on it, and in the meanwhile cleaning the codebase.

Basically, I see no point in fixing this code that never (at least till the
beginning of this git tree) worked considering that we'll go away
from it completely in the nearest future.

OTOH, it'll be a basic fix (and then, anyway, removed ;) ), so I can send a
v2 with it.

>
>-vlad
>
>>
>> CC: Jay Vosburgh <j.vosburgh@...il.com>
>> CC: Andy Gospodarek <andy@...yhouse.net>
>> Signed-off-by: Veaceslav Falico <vfalico@...il.com>
>> ---
>>  drivers/net/bonding/bond_alb.c | 61 ------------------------------------------
>>  1 file changed, 61 deletions(-)
>>
>> diff --git a/drivers/net/bonding/bond_alb.c b/drivers/net/bonding/bond_alb.c
>> index 965518b..1d772b5 100644
>> --- a/drivers/net/bonding/bond_alb.c
>> +++ b/drivers/net/bonding/bond_alb.c
>> @@ -1256,62 +1256,6 @@ static int alb_handle_addr_collision_on_attach(struct bonding *bond, struct slav
>>  	return 0;
>>  }
>>
>> -/**
>> - * alb_set_mac_address
>> - * @bond:
>> - * @addr:
>> - *
>> - * In TLB mode all slaves are configured to the bond's hw address, but set
>> - * their dev_addr field to different addresses (based on their permanent hw
>> - * addresses).
>> - *
>> - * For each slave, this function sets the interface to the new address and then
>> - * changes its dev_addr field to its previous value.
>> - *
>> - * Unwinding assumes bond's mac address has not yet changed.
>> - */
>> -static int alb_set_mac_address(struct bonding *bond, void *addr)
>> -{
>> -	struct slave *slave, *rollback_slave;
>> -	struct list_head *iter;
>> -	struct sockaddr sa;
>> -	char tmp_addr[ETH_ALEN];
>> -	int res;
>> -
>> -	if (BOND_MODE(bond) == BOND_MODE_ALB)
>> -		return 0;
>> -
>> -	bond_for_each_slave(bond, slave, iter) {
>> -		/* save net_device's current hw address */
>> -		ether_addr_copy(tmp_addr, slave->dev->dev_addr);
>> -
>> -		res = dev_set_mac_address(slave->dev, addr);
>> -
>> -		/* restore net_device's hw address */
>> -		ether_addr_copy(slave->dev->dev_addr, tmp_addr);
>> -
>> -		if (res)
>> -			goto unwind;
>> -	}
>> -
>> -	return 0;
>> -
>> -unwind:
>> -	memcpy(sa.sa_data, bond->dev->dev_addr, bond->dev->addr_len);
>> -	sa.sa_family = bond->dev->type;
>> -
>> -	/* unwind from head to the slave that failed */
>> -	bond_for_each_slave(bond, rollback_slave, iter) {
>> -		if (rollback_slave == slave)
>> -			break;
>> -		ether_addr_copy(tmp_addr, rollback_slave->dev->dev_addr);
>> -		dev_set_mac_address(rollback_slave->dev, &sa);
>> -		ether_addr_copy(rollback_slave->dev->dev_addr, tmp_addr);
>> -	}
>> -
>> -	return res;
>> -}
>> -
>>  /************************ exported alb funcions ************************/
>>
>>  int bond_alb_initialize(struct bonding *bond)
>> @@ -1777,15 +1721,10 @@ int bond_alb_set_mac_address(struct net_device *bond_dev, void *addr)
>>  	struct bonding *bond = netdev_priv(bond_dev);
>>  	struct sockaddr *sa = addr;
>>  	struct slave *swap_slave;
>> -	int res;
>>
>>  	if (!is_valid_ether_addr(sa->sa_data))
>>  		return -EADDRNOTAVAIL;
>>
>> -	res = alb_set_mac_address(bond, addr);
>> -	if (res)
>> -		return res;
>> -
>>  	memcpy(bond_dev->dev_addr, sa->sa_data, bond_dev->addr_len);
>>
>>  	/* If there is no curr_active_slave there is nothing else to do.
>>
>
--
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ