mirror of
https://github.com/torvalds/linux.git
synced 2024-10-24 06:01:01 +00:00
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:
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);
|
||||
|
|
Loading…
Reference in New Issue
Block a user