]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Fix mns_assemble() undefined behaviour with clang
authorLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 6 May 2025 16:49:44 +0000 (12:49 -0400)
committerLiam R. Howlett <Liam.Howlett@oracle.com>
Tue, 6 May 2025 16:49:44 +0000 (12:49 -0400)
Signed-off-by: Liam R. Howlett <Liam.Howlett@oracle.com>
lib/maple_tree.c

index 3f4bfefd33768f427daa37374d20c74e60e292fc..f462aa159f9b1c81538066c605dbbd9a8caab87d 100644 (file)
@@ -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));
                }