Re: [PATCH V9 net-next 11/11] net: add ndo_validate_addr check in dev_set_mac_address

From: Jijie Shao
Date: Wed Sep 11 2024 - 09:41:47 EST



on 2024/9/10 16:39, Kalesh Anakkur Purayil wrote:
On Tue, Sep 10, 2024 at 1:36 PM Jijie Shao <shaojijie@xxxxxxxxxx> wrote:
If driver implements ndo_validate_addr,
core should check the mac address before ndo_set_mac_address.

Signed-off-by: Jijie Shao <shaojijie@xxxxxxxxxx>
Reviewed-by: Andrew Lunn <andrew@xxxxxxx>
---
ChangeLog:
v2 -> v3:
- Use ndo_validate_addr() instead of is_valid_ether_addr()
in dev_set_mac_address(), suggested by Jakub and Andrew.
v2: https://lore.kernel.org/all/20240820140154.137876-1-shaojijie@xxxxxxxxxx/
---
net/core/dev.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/net/core/dev.c b/net/core/dev.c
index 22c3f14d9287..00e0f473ed44 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -9087,6 +9087,11 @@ int dev_set_mac_address(struct net_device *dev, struct sockaddr *sa,
return -EOPNOTSUPP;
if (sa->sa_family != dev->type)
return -EINVAL;
+ if (ops->ndo_validate_addr) {
+ err = ops->ndo_validate_addr(dev);
+ if (err)
+ return err;
+ }

This patch may not work as expected.

ndo_validate_addr() has only one parameter.
The sa parameter of the MAC address is not transferred to the function.
So ndo_validate_addr() checks the old MAC address, not the new MAC address.

I haven't found a better way to fix it yet.
This patch may be dropped in v10.

Sorry,
Jijie Shao