From d2271ff912b603808df09fa0ae146f4411897367 Mon Sep 17 00:00:00 2001 From: "Liam R. Howlett" Date: Tue, 6 May 2025 12:49:44 -0400 Subject: [PATCH] Fix mns_assemble() undefined behaviour with clang Signed-off-by: Liam R. Howlett --- lib/maple_tree.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/maple_tree.c b/lib/maple_tree.c index 3f4bfefd3376..f462aa159f9b 100644 --- a/lib/maple_tree.c +++ b/lib/maple_tree.c @@ -3551,7 +3551,7 @@ void mns_assemble(struct ma_node_state *states, unsigned char len) if (ns->use_part) { s_slots = ns->part->slots + ns->start; s_piv = ns->part->pivots + ns->start; - s_gap = ns->part->gaps + ns->start; + s_gap = ns->part->gaps; max = s_piv[size - 1]; if (!ns->part->leaf) { int j = 0; @@ -3568,7 +3568,7 @@ void mns_assemble(struct ma_node_state *states, unsigned char len) } else { s_slots = ns->info->slots + ns->start; s_piv = ns->info->pivots + ns->start; - s_gap = ns->info->gaps + ns->start; + s_gap = ns->info->gaps; if (ns->start + size > mt_pivots[ns->info->type]) { piv_overflow = 1; max = ns->info->max; @@ -3580,6 +3580,7 @@ void mns_assemble(struct ma_node_state *states, unsigned char len) memcpy(d_slots, s_slots, size * sizeof(void __rcu *)); if (ns->dst->gaps) { d_gap = ns->dst->gaps + ns->dst->offset; + s_gap += ns->start; memcpy(d_gap, s_gap, size * sizeof(unsigned long)); } -- 2.50.1