]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: dsa: sja1105: fix kasan out-of-bounds warning in sja1105_table_delete_entry()
authorVladimir Oltean <vladimir.oltean@nxp.com>
Thu, 20 Nov 2025 06:12:31 +0000 (14:12 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Nov 2025 09:35:58 +0000 (10:35 +0100)
[ Upstream commit 5f2b28b79d2d1946ee36ad8b3dc0066f73c90481 ]

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>
Signed-off-by: Chen Yu <xnguchen@sina.cn>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/dsa/sja1105/sja1105_static_config.c

index baba204ad62f6b507a6ccf3337248dd02b777249..2ac91fe2a79bc96c7f5931817323e7983b734748 100644 (file)
@@ -1921,8 +1921,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--;