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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <21830693-d8a0-4bbf-ae2f-11f793436895@intel.com>
Date: Tue, 12 Aug 2025 11:04:58 -0700
From: "Tantilov, Emil S" <emil.s.tantilov@...el.com>
To: "Hay, Joshua A" <joshua.a.hay@...el.com>,
	"intel-wired-lan@...ts.osuosl.org" <intel-wired-lan@...ts.osuosl.org>
CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>, "Loktionov, Aleksandr"
	<aleksandr.loktionov@...el.com>, "Kitszel, Przemyslaw"
	<przemyslaw.kitszel@...el.com>, "Nguyen, Anthony L"
	<anthony.l.nguyen@...el.com>, "andrew+netdev@...n.ch"
	<andrew+netdev@...n.ch>, "davem@...emloft.net" <davem@...emloft.net>,
	"edumazet@...gle.com" <edumazet@...gle.com>, "kuba@...nel.org"
	<kuba@...nel.org>, "pabeni@...hat.com" <pabeni@...hat.com>,
	"jianliu@...hat.com" <jianliu@...hat.com>, "Schmidt, Michal"
	<mschmidt@...hat.com>, "decot@...gle.com" <decot@...gle.com>,
	"willemb@...gle.com" <willemb@...gle.com>
Subject: Re: [PATCH iwl-net] idpf: set mac type when adding and removing MAC
 filters



On 8/12/2025 9:20 AM, Hay, Joshua A wrote:
>> On control planes that allow changing the MAC address of the interface,
>> the driver must provide a MAC type to avoid errors such as:
>>
>> idpf 0000:0a:00.0: Transaction failed (op 535)
>> idpf 0000:0a:00.0: Received invalid MAC filter payload (op 535) (len 0)
>>
>> These errors occur during driver load or when changing the MAC via:
>> ip link set <iface> address <mac>
>>
>> Add logic to set the MAC type before performing ADD/DEL operations.
>> Since only one primary MAC is supported per vport, the driver only needs
>> to perform ADD in idpf_set_mac().
>>
>> Fixes: ce1b75d0635c ("idpf: add ptypes and MAC filter support")
>> Reported-by: Jian Liu <jianliu@...hat.com>
>> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@...el.com>
>> Signed-off-by: Emil Tantilov <emil.s.tantilov@...el.com>
>> ---
>>   drivers/net/ethernet/intel/idpf/idpf_lib.c      |  6 ++----
>>   drivers/net/ethernet/intel/idpf/idpf_virtchnl.c | 11 +++++++++++
>>   2 files changed, 13 insertions(+), 4 deletions(-)
>>
>> diff --git a/drivers/net/ethernet/intel/idpf/idpf_lib.c
>> b/drivers/net/ethernet/intel/idpf/idpf_lib.c
>> index 80382ff4a5fa..77d554b0944b 100644
>> --- a/drivers/net/ethernet/intel/idpf/idpf_lib.c
>> +++ b/drivers/net/ethernet/intel/idpf/idpf_lib.c
>> @@ -2284,17 +2284,15 @@ static int idpf_set_mac(struct net_device
>> *netdev, void *p)
>>   	if (ether_addr_equal(netdev->dev_addr, addr->sa_data))
>>   		goto unlock_mutex;
>>
>> +	ether_addr_copy(vport->default_mac_addr, addr->sa_data);
>>   	vport_config = vport->adapter->vport_config[vport->idx];
>>   	err = idpf_add_mac_filter(vport, np, addr->sa_data, false);
>>   	if (err) {
>>   		__idpf_del_mac_filter(vport_config, addr->sa_data);
>> +		ether_addr_copy(vport->default_mac_addr, netdev-
>>> dev_addr);
>>   		goto unlock_mutex;
>>   	}
>>
>> -	if (is_valid_ether_addr(vport->default_mac_addr))
>> -		idpf_del_mac_filter(vport, np, vport->default_mac_addr,
>> false);
> 
> We still need the call to __idpf_del_mac_filter here with the old addr to free it from the filter list.

Yeah, there is no need to send the message, but the filter list needs to 
be updated accordingly. Good catch! Will submit v2 to resolve it.

Thanks,
Emil

> 
> Thanks,
> Josh
> 
>> -
>> -	ether_addr_copy(vport->default_mac_addr, addr->sa_data);
>>   	eth_hw_addr_set(netdev, addr->sa_data);
>>
>>   unlock_mutex:
>> diff --git a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
>> b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
>> index 24febaaa8fbb..7563289dc1e3 100644
>> --- a/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
>> +++ b/drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
>> @@ -3507,6 +3507,15 @@ u32 idpf_get_vport_id(struct idpf_vport *vport)
>>   	return le32_to_cpu(vport_msg->vport_id);
>>   }
>>
>> +static void idpf_set_mac_type(struct idpf_vport *vport,
>> +			      struct virtchnl2_mac_addr *mac_addr)
>> +{
>> +	if (ether_addr_equal(vport->default_mac_addr, mac_addr->addr))
>> +		mac_addr->type = VIRTCHNL2_MAC_ADDR_PRIMARY;
>> +	else
>> +		mac_addr->type = VIRTCHNL2_MAC_ADDR_EXTRA;
>> +}
>> +
>>   /**
>>    * idpf_mac_filter_async_handler - Async callback for mac filters
>>    * @adapter: private data struct
>> @@ -3636,6 +3645,7 @@ int idpf_add_del_mac_filters(struct idpf_vport
>> *vport,
>>   			    list) {
>>   		if (add && f->add) {
>>   			ether_addr_copy(mac_addr[i].addr, f->macaddr);
>> +			idpf_set_mac_type(vport, &mac_addr[i]);
>>   			i++;
>>   			f->add = false;
>>   			if (i == total_filters)
>> @@ -3643,6 +3653,7 @@ int idpf_add_del_mac_filters(struct idpf_vport
>> *vport,
>>   		}
>>   		if (!add && f->remove) {
>>   			ether_addr_copy(mac_addr[i].addr, f->macaddr);
>> +			idpf_set_mac_type(vport, &mac_addr[i]);
>>   			i++;
>>   			f->remove = false;
>>   			if (i == total_filters)
>> --
>> 2.37.3
>>
> 


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ