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]
Date:	Thu, 4 Aug 2011 21:36:05 -0700
From:	Stephen Hemminger <shemminger@...tta.com>
To:	Andrei Warkentin <andreiw@...orola.com>
Cc:	netdev@...r.kernel.org
Subject: Re: [PATCHv3] Bridge: Always send NETDEV_CHANGEADDR up on br MAC
 change.

On Thu,  4 Aug 2011 21:17:05 -0500
Andrei Warkentin <andreiw@...orola.com> wrote:

Half ok, half not.

> diff --git a/net/bridge/br_device.c b/net/bridge/br_device.c
> index cf09fe5..ef18070 100644
> --- a/net/bridge/br_device.c
> +++ b/net/bridge/br_device.c
> @@ -162,6 +162,7 @@ static int br_set_mac_address(struct net_device *dev, void *p)
>  	br->flags |= BR_SET_MAC_ADDR;
>  	spin_unlock_bh(&br->lock);
>  
> +	call_netdevice_notifiers(NETDEV_CHANGEADDR, dev);
>  	return 0;
>  }

This is unnecessary since already done by dev_set_mac_address.

> @@ -492,10 +493,13 @@ int br_del_if(struct net_bridge *br, struct net_device *dev)
>  	del_nbp(p);
>  
>  	spin_lock_bh(&br->lock);
> -	br_stp_recalculate_bridge_id(br);
> +	changed_addr = br_stp_recalculate_bridge_id(br);
>  	br_features_recompute(br);
>  	spin_unlock_bh(&br->lock);
>  
> +	if (changed_addr)
> +		call_netdevice_notifiers(NETDEV_CHANGEADDR, br->dev);
> +
>  	return 0;
>  }
>  
Good, I forgot that case.

> diff --git a/net/bridge/br_notify.c b/net/bridge/br_notify.c
> index 404d4e1..651eac3 100644
> --- a/net/bridge/br_notify.c
> +++ b/net/bridge/br_notify.c
> @@ -34,6 +34,7 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
>  	struct net_device *dev = ptr;
>  	struct net_bridge_port *p = br_port_get(dev);
>  	struct net_bridge *br;
> +	bool changed_addr;
>  	int err;
>  
>  	/* not a port of a bridge */
> @@ -51,8 +52,11 @@ static int br_device_event(struct notifier_block *unused, unsigned long event, v
>  	case NETDEV_CHANGEADDR:
>  		spin_lock_bh(&br->lock);
>  		br_fdb_changeaddr(p, dev->dev_addr);
> -		br_stp_recalculate_bridge_id(br);
> +		changed_addr = br_stp_recalculate_bridge_id(br);
>  		spin_unlock_bh(&br->lock);
> +
> +		if (changed_addr)
> +			call_netdevice_notifiers(NETDEV_CHANGEADDR, br->dev);
>  		break;
>  
>  	case NETDEV_CHANGE:

This is also fine.

> iff --git a/net/bridge/br_stp_if.c b/net/bridge/br_stp_if.c
> index c0990ba..4528e9a 100644
> --- a/net/bridge/br_stp_if.c
> +++ b/net/bridge/br_stp_if.c
> @@ -213,7 +213,7 @@ bool br_stp_recalculate_bridge_id(struct net_bridge *br)
>  
>  	/* user has chosen a value so keep it */
>  	if (br->flags & BR_SET_MAC_ADDR)
> -		return;
> +		return false;
>  
>  	list_for_each_entry(p, &br->port_list, list) {
>  		if (addr == br_mac_zero ||

This is already in net-next.




--
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