perfquery: Fix timeout on nodes supporting RS_FEC capability
PATCH 1/1 perfquery: Fix timeout on nodes supporting RS_FEC capability
Quoted 1 line
From
0e8341980ca7133fe0a472fddc1c622f766b8f8eMon Sep 17 00:00:00 2001
From: Dan Ben Yosef <danby-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Mon, 31 Aug 2015 10:49:04 +0300
perfquery -T (print Extended Speed Counters) times out on nodes supporting RS_FEC capability.
Before sending ExtendedSpeedCounters PerfMgt GMP, perfquery sends PortInfoExtended SMP to get CapMask and FECModeActive fields. Upon reception of PortInfoExtended SMP, fec_mode_active field is erroneously decoded to 16 bit buffer instead of 32 bit buffer. As a result, memory corruption occurs and portid.dlid field is set to 0, so that ExtendedSpeedCounters GMP is sent to wrong destination.
--- src/perfquery.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
src/perfquery.c +2 -2
@@ -469,7 +469,7 @@ static uint8_t is_rsfec_mode_active(ib_portid_t * portid, int port, uint16_t cap_mask) {uint8_t data[IB_SMP_DATA_SIZE ] = {0 }; -uint16_t fec_mode_active =0 ; +uint32_t fec_mode_active =0 ;uint32_t pie_capmask =0 ;if (cap_mask &IS_PM_RSFEC_COUNTERS_SUP ) {if (!is_port_info_extended_supported (portid, port, srcport)) {
@@ -486,7 +486,7 @@ static uint8_t is_rsfec_mode_active(ib_portid_t * portid, int port, &fec_mode_active);if ((pie_capmask &CL_NTOH32 (IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED )) && - (CL_NTOH16 (IB_PORT_EXT_RS_FEC_MODE_ACTIVE ) == fec_mode_active)) + (CL_NTOH16 (IB_PORT_EXT_RS_FEC_MODE_ACTIVE ) == (fec_mode_active &0xffff )))return 1 ; }
Signature · 6 lines
1.7.8.2 -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
A message that is not in the archive (sent off-list or not yet received): 55E599F6.2000503-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb@public.gmane.org
ira.weiny
AppliedQuoted 14 lines · Hal Rosenstock
From
0e8341980ca7133fe0a472fddc1c622f766b8f8eMon Sep 17 00:00:00 2001
From: Dan Ben Yosef <danby-VPRAkNaXOzVWk0Htik3J/[email protected]>
Date: Mon, 31 Aug 2015 10:49:04 +0300perfquery -T (print Extended Speed Counters) times out on nodes supporting
RS_FECcapability.Before sending ExtendedSpeedCounters PerfMgt GMP, perfquery sends PortInfoExtended SMP to get CapMask and FECModeActive fields. Upon reception of PortInfoExtended SMP,
fec_mode_activefield is erroneously decoded to 16 bit buffer instead of 32 bit buffer. As a result, memory corruption occurs and portid.dlid field is set to 0, so that ExtendedSpeedCounters GMP is sent to wrong destination.
Quoted 2 lines
Thanks applied,
Ira
Quoted 29 lines
--- src/perfquery.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)src/perfquery.c +2
-2@@ -469,7 +469,7 @@ static uint8_t is_rsfec_mode_active(ib_portid_t * portid, int port, uint16_t cap_mask) {uint8_t data[IB_SMP_DATA_SIZE ] = {0 }; -uint16_t fec_mode_active =0 ; +uint32_t fec_mode_active =0 ;uint32_t pie_capmask =0 ;if (cap_mask &IS_PM_RSFEC_COUNTERS_SUP ) {if (!is_port_info_extended_supported (portid, port, srcport)) {@@ -486,7 +486,7 @@ static uint8_t is_rsfec_mode_active(ib_portid_t * portid, int port, &fec_mode_active);if ((pie_capmask &CL_NTOH32 (IB_PORT_EXT_CAP_IS_FEC_MODE_SUPPORTED )) && - (CL_NTOH16 (IB_PORT_EXT_RS_FEC_MODE_ACTIVE ) == fec_mode_active)) + (CL_NTOH16 (IB_PORT_EXT_RS_FEC_MODE_ACTIVE ) == (fec_mode_active &0xffff )))return 1 ; }Signature · 1 line
1.7.8.2
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html