From: Greg Kroah-Hartman Date: Thu, 13 Feb 2025 11:50:07 +0000 (+0100) Subject: 6.1-stable patches X-Git-Tag: v6.6.78~17 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=13cd043229359d3e8ef8559efe2c06695115aad1;p=thirdparty%2Fkernel%2Fstable-queue.git 6.1-stable patches added patches: net-ncsi-use-dev_set_mac_address-for-get-mc-mac-address-handling.patch --- diff --git a/queue-6.1/net-ncsi-use-dev_set_mac_address-for-get-mc-mac-address-handling.patch b/queue-6.1/net-ncsi-use-dev_set_mac_address-for-get-mc-mac-address-handling.patch new file mode 100644 index 0000000000..ac50e44b29 --- /dev/null +++ b/queue-6.1/net-ncsi-use-dev_set_mac_address-for-get-mc-mac-address-handling.patch @@ -0,0 +1,82 @@ +From 05d91cdb1f9108426b14975ef4eeddf15875ca05 Mon Sep 17 00:00:00 2001 +From: Paul Fertser +Date: Mon, 20 Jan 2025 16:35:36 +0300 +Subject: net/ncsi: use dev_set_mac_address() for Get MC MAC Address handling + +From: Paul Fertser + +commit 05d91cdb1f9108426b14975ef4eeddf15875ca05 upstream. + +Copy of the rationale from 790071347a0a1a89e618eedcd51c687ea783aeb3: + +Change ndo_set_mac_address to dev_set_mac_address because +dev_set_mac_address provides a way to notify network layer about MAC +change. In other case, services may not aware about MAC change and keep +using old one which set from network adapter driver. + +As example, DHCP client from systemd do not update MAC address without +notification from net subsystem which leads to the problem with acquiring +the right address from DHCP server. + +Since dev_set_mac_address requires RTNL lock the operation can not be +performed directly in the response handler, see +9e2bbab94b88295dcc57c7580393c9ee08d7314d. + +The way of selecting the first suitable MAC address from the list is +changed, instead of having the driver check it this patch just assumes +any valid MAC should be good. + +Fixes: b8291cf3d118 ("net/ncsi: Add NC-SI 1.2 Get MC MAC Address command") +Signed-off-by: Paul Fertser +Signed-off-by: David S. Miller +Signed-off-by: Greg Kroah-Hartman +--- + net/ncsi/ncsi-rsp.c | 18 ++++++++---------- + 1 file changed, 8 insertions(+), 10 deletions(-) + +--- a/net/ncsi/ncsi-rsp.c ++++ b/net/ncsi/ncsi-rsp.c +@@ -1089,14 +1089,12 @@ static int ncsi_rsp_handler_netlink(stru + static int ncsi_rsp_handler_gmcma(struct ncsi_request *nr) + { + struct ncsi_dev_priv *ndp = nr->ndp; ++ struct sockaddr *saddr = &ndp->pending_mac; + struct net_device *ndev = ndp->ndev.dev; + struct ncsi_rsp_gmcma_pkt *rsp; +- struct sockaddr saddr; +- int ret = -1; + int i; + + rsp = (struct ncsi_rsp_gmcma_pkt *)skb_network_header(nr->rsp); +- saddr.sa_family = ndev->type; + ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE; + + netdev_info(ndev, "NCSI: Received %d provisioned MAC addresses\n", +@@ -1108,20 +1106,20 @@ static int ncsi_rsp_handler_gmcma(struct + rsp->addresses[i][4], rsp->addresses[i][5]); + } + ++ saddr->sa_family = ndev->type; + for (i = 0; i < rsp->address_count; i++) { +- memcpy(saddr.sa_data, &rsp->addresses[i], ETH_ALEN); +- ret = ndev->netdev_ops->ndo_set_mac_address(ndev, &saddr); +- if (ret < 0) { ++ if (!is_valid_ether_addr(rsp->addresses[i])) { + netdev_warn(ndev, "NCSI: Unable to assign %pM to device\n", +- saddr.sa_data); ++ rsp->addresses[i]); + continue; + } +- netdev_warn(ndev, "NCSI: Set MAC address to %pM\n", saddr.sa_data); ++ memcpy(saddr->sa_data, rsp->addresses[i], ETH_ALEN); ++ netdev_warn(ndev, "NCSI: Will set MAC address to %pM\n", saddr->sa_data); + break; + } + +- ndp->gma_flag = ret == 0; +- return ret; ++ ndp->gma_flag = 1; ++ return 0; + } + + static struct ncsi_rsp_handler { diff --git a/queue-6.1/series b/queue-6.1/series index 1b62815e33..42699c7924 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -450,3 +450,4 @@ io_uring-fix-multishots-with-selected-buffers.patch io_uring-fix-io_req_prep_async-with-provided-buffers.patch io_uring-rw-commit-provided-buffer-state-on-async.patch mips-ftrace-declare-ftrace_get_parent_ra_addr-as-static.patch +net-ncsi-use-dev_set_mac_address-for-get-mc-mac-address-handling.patch