mirror of
https://github.com/torvalds/linux.git
synced 2025-04-12 06:49:52 +00:00
net: dsa: sja1105: fix kasan out-of-bounds warning in sja1105_table_delete_entry()
There are actually 2 problems: - deleting the last element doesn't require the memmove of elements [i + 1, end) over it. Actually, element i+1 is out of bounds. - The memmove itself should move size - i - 1 elements, because the last element is out of bounds. The out-of-bounds element still remains out of bounds after being accessed, so the problem is only that we touch it, not that it becomes in active use. But I suppose it can lead to issues if the out-of-bounds element is part of an unmapped page. Fixes: 6666cebc5e30 ("net: dsa: sja1105: Add support for VLAN operations") Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Simon Horman <horms@kernel.org> Link: https://patch.msgid.link/20250318115716.2124395-4-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
b6a177b559
commit
5f2b28b79d
@ -1917,8 +1917,10 @@ int sja1105_table_delete_entry(struct sja1105_table *table, int i)
|
||||
if (i > table->entry_count)
|
||||
return -ERANGE;
|
||||
|
||||
memmove(entries + i * entry_size, entries + (i + 1) * entry_size,
|
||||
(table->entry_count - i) * entry_size);
|
||||
if (i + 1 < table->entry_count) {
|
||||
memmove(entries + i * entry_size, entries + (i + 1) * entry_size,
|
||||
(table->entry_count - i - 1) * entry_size);
|
||||
}
|
||||
|
||||
table->entry_count--;
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user