diff options
Diffstat (limited to 'drivers/net/ethernet/sfc/mcdi.c')
-rw-r--r-- | drivers/net/ethernet/sfc/mcdi.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/drivers/net/ethernet/sfc/mcdi.c b/drivers/net/ethernet/sfc/mcdi.c index 578e5f72aabe..e855f4cddb4e 100644 --- a/drivers/net/ethernet/sfc/mcdi.c +++ b/drivers/net/ethernet/sfc/mcdi.c | |||
@@ -683,12 +683,14 @@ int efx_mcdi_get_board_cfg(struct efx_nic *efx, u8 *mac_address, | |||
683 | if (mac_address) | 683 | if (mac_address) |
684 | memcpy(mac_address, outbuf + offset, ETH_ALEN); | 684 | memcpy(mac_address, outbuf + offset, ETH_ALEN); |
685 | if (fw_subtype_list) { | 685 | if (fw_subtype_list) { |
686 | /* Byte-swap and truncate or zero-pad as necessary */ | ||
686 | offset = MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_OFST; | 687 | offset = MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_OFST; |
687 | for (i = 0; | 688 | for (i = 0; |
688 | i < MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_MINNUM; | 689 | i < MC_CMD_GET_BOARD_CFG_OUT_FW_SUBTYPE_LIST_MAXNUM; |
689 | i++) { | 690 | i++) { |
690 | fw_subtype_list[i] = | 691 | fw_subtype_list[i] = |
691 | le16_to_cpup((__le16 *)(outbuf + offset)); | 692 | (offset + 2 <= outlen) ? |
693 | le16_to_cpup((__le16 *)(outbuf + offset)) : 0; | ||
692 | offset += 2; | 694 | offset += 2; |
693 | } | 695 | } |
694 | } | 696 | } |