mlxsw: Warn about invalid accesses to array fields
A forgotten or buggy variable initialization can cause out-of-bounds access to a register or other item array field. For an overflow, such access would mangle adjacent parts of the register payload. For an underflow, due to all variables being unsigned, the access would likely trample unrelated memory. Since neither is correct, replace these accesses with accesses at the index of 0, and warn about the issue. Suggested-by: Ido Schimmel <idosch@nvidia.com> Signed-off-by: Petr Machata <petrm@nvidia.com> Reviewed-by: Ido Schimmel <idosch@nvidia.com> Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Link: https://patch.msgid.link/b988fb265c2f6c1206fe12d5bfdcfa188b7672d1.1720447210.git.petrm@nvidia.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
746d684ea5
commit
b45c76e5f4
@@ -218,6 +218,10 @@ __mlxsw_item_bit_array_offset(const struct mlxsw_item *item,
|
||||
}
|
||||
|
||||
max_index = (item->size.bytes << 3) / item->element_size - 1;
|
||||
if (WARN_ONCE(index > max_index,
|
||||
"name=%s,index=%u,max_index=%u\n", item->name, index,
|
||||
max_index))
|
||||
index = 0;
|
||||
be_index = max_index - index;
|
||||
offset = be_index * item->element_size >> 3;
|
||||
in_byte_index = index % (BITS_PER_BYTE / item->element_size);
|
||||
|
||||
Reference in New Issue
Block a user