Commit 2567daad69cd for kernel

commit 2567daad69cd1107fc0ec29b1615f110d7cf7385
Author: Brett Creeley <brett.creeley@amd.com>
Date:   Mon Apr 21 10:46:04 2025 -0700

    pds_core: handle unsupported PDS_CORE_CMD_FW_CONTROL result

    If the FW doesn't support the PDS_CORE_CMD_FW_CONTROL command
    the driver might at the least print garbage and at the worst
    crash when the user runs the "devlink dev info" devlink command.

    This happens because the stack variable fw_list is not 0
    initialized which results in fw_list.num_fw_slots being a
    garbage value from the stack.  Then the driver tries to access
    fw_list.fw_names[i] with i >= ARRAY_SIZE and runs off the end
    of the array.

    Fix this by initializing the fw_list and by not failing
    completely if the devcmd fails because other useful information
    is printed via devlink dev info even if the devcmd fails.

    Fixes: 45d76f492938 ("pds_core: set up device and adminq")
    Signed-off-by: Brett Creeley <brett.creeley@amd.com>
    Reviewed-by: Simon Horman <horms@kernel.org>
    Signed-off-by: Shannon Nelson <shannon.nelson@amd.com>
    Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
    Link: https://patch.msgid.link/20250421174606.3892-3-shannon.nelson@amd.com
    Signed-off-by: Jakub Kicinski <kuba@kernel.org>

diff --git a/drivers/net/ethernet/amd/pds_core/devlink.c b/drivers/net/ethernet/amd/pds_core/devlink.c
index c5c787df61a4..d8dc39da4161 100644
--- a/drivers/net/ethernet/amd/pds_core/devlink.c
+++ b/drivers/net/ethernet/amd/pds_core/devlink.c
@@ -105,7 +105,7 @@ int pdsc_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
 		.fw_control.opcode = PDS_CORE_CMD_FW_CONTROL,
 		.fw_control.oper = PDS_CORE_FW_GET_LIST,
 	};
-	struct pds_core_fw_list_info fw_list;
+	struct pds_core_fw_list_info fw_list = {};
 	struct pdsc *pdsc = devlink_priv(dl);
 	union pds_core_dev_comp comp;
 	char buf[32];
@@ -118,8 +118,6 @@ int pdsc_dl_info_get(struct devlink *dl, struct devlink_info_req *req,
 	if (!err)
 		memcpy_fromio(&fw_list, pdsc->cmd_regs->data, sizeof(fw_list));
 	mutex_unlock(&pdsc->devcmd_lock);
-	if (err && err != -EIO)
-		return err;

 	listlen = min(fw_list.num_fw_slots, ARRAY_SIZE(fw_list.fw_names));
 	for (i = 0; i < listlen; i++) {