summaryrefslogtreecommitdiff
path: root/tools/perf/scripts/python/stackcollapse.py
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2026-10-11 11:24:04 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2026-10-11 12:42:26 -0700
commit345c38d6caa9c1dd5402f737d30ae9ed253b9025 (patch)
tree0f3d3bbfd5919e3588bb546c138d0690a7a72820 /tools/perf/scripts/python/stackcollapse.py
parent65a9b4df5a2c3e19bacb61c4b5e8ec99dc1fde43 (diff)
downloadlinux-next-345c38d6caa9c1dd5402f737d30ae9ed253b9025.tar.gz
linux-next-345c38d6caa9c1dd5402f737d30ae9ed253b9025.zip
assoc_array: keep gc's cleanup out of the live tree on allocation failure
assoc_array_gc() builds a copy of the tree. Where the copy reaches a shortcut, it allocates the copy of the shortcut with kmalloc_flex(), fills it with memcpy(), links it into the new tree, and only then allocates the copy of the node after it. The memcpy() leaves the new shortcut's next_node pointing at the old tree's node, so if that second allocation fails, the cleanup, assoc_array_destroy_subtree() on the new tree, follows the new shortcut into the old tree, and the BUG_ON() on the old node's back pointer fires. Allocate the node first, and the shortcut once the node exists, freeing the node again if the shortcut cannot be allocated. A copied shortcut is then only linked into the new tree when the copy of its node is there to follow it. Nothing else changes: with no allocation failing, the trees gc builds are the same as before. Found by a userspace test that makes each allocation of each operation fail in turn. Fixes: 3cb989501c26 ("Add a generic associative array implementation.") Assisted-by: LLM Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'tools/perf/scripts/python/stackcollapse.py')
0 files changed, 0 insertions, 0 deletions