]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: enetc: fix incorrect mailbox message status returned to VFs
authorWei Fang <wei.fang@nxp.com>
Wed, 20 May 2026 06:44:13 +0000 (14:44 +0800)
committerJakub Kicinski <kuba@kernel.org>
Thu, 21 May 2026 15:48:58 +0000 (08:48 -0700)
There are two cases where VFs receive an incorrect success status from
the PF mailbox message handler, misleading them into believing their
requests have been fulfilled:

In enetc_msg_handle_rxmsg(), *status is pre-initialized to
ENETC_MSG_CMD_STATUS_OK. When an unsupported command type is received,
the default case only logs an error without updating *status, so it
remains as ENETC_MSG_CMD_STATUS_OK.

In enetc_msg_pf_set_vf_primary_mac_addr(), when the PF has already
assigned a MAC address for the VF (ENETC_VF_FLAG_PF_SET_MAC is set),
the function rejects the request but returns ENETC_MSG_CMD_STATUS_OK
instead of ENETC_MSG_CMD_STATUS_FAIL.

Therefore, correct the status value for the two cases mentioned above.

Fixes: beb74ac878c8 ("enetc: Add vf to pf messaging support")
Signed-off-by: Wei Fang <wei.fang@nxp.com>
Reviewed-by: Harshitha Ramamurthy <hramamurthy@google.com>
Link: https://patch.msgid.link/20260520064421.91569-2-wei.fang@nxp.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/freescale/enetc/enetc_pf.c

index a12fd54a475f6cd0516185aa817f2d8c430a0a1d..27d4bb65e017fb1405ba0170d5da3f3740fe2d07 100644 (file)
@@ -493,11 +493,13 @@ static u16 enetc_msg_pf_set_vf_primary_mac_addr(struct enetc_pf *pf,
                return ENETC_MSG_CMD_STATUS_FAIL;
 
        addr = cmd->mac.sa_data;
-       if (vf_state->flags & ENETC_VF_FLAG_PF_SET_MAC)
+       if (vf_state->flags & ENETC_VF_FLAG_PF_SET_MAC) {
                dev_warn(dev, "Attempt to override PF set mac addr for VF%d\n",
                         vf_id);
-       else
-               enetc_pf_set_primary_mac_addr(&pf->si->hw, vf_id + 1, addr);
+               return ENETC_MSG_CMD_STATUS_FAIL;
+       }
+
+       enetc_pf_set_primary_mac_addr(&pf->si->hw, vf_id + 1, addr);
 
        return ENETC_MSG_CMD_STATUS_OK;
 }
@@ -509,7 +511,6 @@ void enetc_msg_handle_rxmsg(struct enetc_pf *pf, int vf_id, u16 *status)
        struct enetc_msg_cmd_header *cmd_hdr;
        u16 cmd_type;
 
-       *status = ENETC_MSG_CMD_STATUS_OK;
        cmd_hdr = (struct enetc_msg_cmd_header *)msg->vaddr;
        cmd_type = cmd_hdr->type;
 
@@ -518,6 +519,7 @@ void enetc_msg_handle_rxmsg(struct enetc_pf *pf, int vf_id, u16 *status)
                *status = enetc_msg_pf_set_vf_primary_mac_addr(pf, vf_id);
                break;
        default:
+               *status = ENETC_MSG_CMD_STATUS_FAIL;
                dev_err(dev, "command not supported (cmd_type: 0x%x)\n",
                        cmd_type);
        }