Skip to content

Commit 8962d27

Browse files
committed
UCT/IB: Fix RoCE version extraction with traffic class flag
The UCT_IB_ADDRESS_FLAG_TRAFFIC_CLASS at BIT(7) overlaps with the RoCE version bits in the flags byte. The version extraction does flags >> 5, which includes bit 7, corrupting the RoCE version when traffic class is packed. Mask out the traffic class flag before extracting the version. Also initialize traffic_class in test pack_params to avoid reading uninitialized memory when the traffic class flag is set.
1 parent fddaa2b commit 8962d27

2 files changed

Lines changed: 8 additions & 3 deletions

File tree

src/uct/ib/base/ib_iface.c

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,7 +353,11 @@ static inline uct_ib_roce_version_t
353353
uct_ib_address_flags_get_roce_version(uint8_t flags)
354354
{
355355
ucs_assert(flags & UCT_IB_ADDRESS_FLAG_LINK_LAYER_ETH);
356-
return (uct_ib_roce_version_t)(flags >> ucs_ilog2(UCT_IB_ADDRESS_FLAG_ETH_LAST));
356+
/* Mask out the traffic class flag (bit 7) which is above the RoCE version
357+
* bits (5-6) to avoid corrupting the extracted version */
358+
return (uct_ib_roce_version_t)((flags &
359+
~UCT_IB_ADDRESS_FLAG_TRAFFIC_CLASS) >>
360+
ucs_ilog2(UCT_IB_ADDRESS_FLAG_ETH_LAST));
357361
}
358362

359363
static inline sa_family_t

test/gtest/uct/ib/test_ib.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,9 @@ class test_uct_ib_addr : public test_uct_ib {
102102
pack_params.lid = lid_in;
103103
pack_params.roce_info = iface->gid_info.roce_info;
104104
pack_params.path_mtu = iface->config.path_mtu;
105-
pack_params.gid_index = std::numeric_limits<uint8_t>::max();
106-
pack_params.pkey = iface->pkey;
105+
pack_params.gid_index = std::numeric_limits<uint8_t>::max();
106+
pack_params.pkey = iface->pkey;
107+
pack_params.traffic_class = iface->config.traffic_class;
107108
address_size = uct_ib_address_size(&pack_params);
108109
ib_addr = (uct_ib_address_t*)malloc(address_size);
109110
uct_ib_address_pack(&pack_params, ib_addr);

0 commit comments

Comments
 (0)