bcachefs: Fix stack corruption
authorKent Overstreet <kent.overstreet@gmail.com>
Tue, 27 Oct 2020 18:10:52 +0000 (14:10 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 22 Oct 2023 21:08:45 +0000 (17:08 -0400)
A bkey_on_stack_realloc() call was in the wrong place, and broken for
indirect extents

Signed-off-by: Kent Overstreet <kent.overstreet@gmail.com>
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/fs.c

index 5119266a849301f712685dffad041f53d3be4b94..2ed80ef41d1a0b9d19f39a17dbd57150200434dd 100644 (file)
@@ -921,9 +921,7 @@ retry:
                        bkey_start_offset(k.k);
                sectors                 = k.k->size - offset_into_extent;
 
-               bkey_on_stack_realloc(&cur, c, k.k->u64s);
-               bkey_on_stack_realloc(&prev, c, k.k->u64s);
-               bkey_reassemble(cur.k, k);
+               bkey_on_stack_reassemble(&cur, c, k);
 
                ret = bch2_read_indirect_extent(&trans,
                                        &offset_into_extent, &cur);
@@ -931,6 +929,7 @@ retry:
                        break;
 
                k = bkey_i_to_s_c(cur.k);
+               bkey_on_stack_realloc(&prev, c, k.k->u64s);
 
                sectors = min(sectors, k.k->size - offset_into_extent);