]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bcachefs: Fix missing bounds checks in bch2_alloc_read()
authorKent Overstreet <kent.overstreet@linux.dev>
Sat, 12 Oct 2024 19:49:23 +0000 (15:49 -0400)
committerKent Overstreet <kent.overstreet@linux.dev>
Sun, 13 Oct 2024 21:55:33 +0000 (17:55 -0400)
We were checking that the alloc key was for a valid device, but not a
valid bucket.

This is the upgrade path from versions prior to bcachefs being mainlined.

Reported-by: syzbot+a1b59c8e1a3f022fd301@syzkaller.appspotmail.com
Signed-off-by: Kent Overstreet <kent.overstreet@linux.dev>
fs/bcachefs/alloc_background.c

index 4e4a448f693166a1f8675cf663f240072098fdfe..6e161f8ffe8d771b8225c14c20a90f26e06ac0a7 100644 (file)
@@ -639,6 +639,16 @@ int bch2_alloc_read(struct bch_fs *c)
                                continue;
                        }
 
+                       if (k.k->p.offset < ca->mi.first_bucket) {
+                               bch2_btree_iter_set_pos(&iter, POS(k.k->p.inode, ca->mi.first_bucket));
+                               continue;
+                       }
+
+                       if (k.k->p.offset >= ca->mi.nbuckets) {
+                               bch2_btree_iter_set_pos(&iter, POS(k.k->p.inode + 1, 0));
+                               continue;
+                       }
+
                        struct bch_alloc_v4 a;
                        *bucket_gen(ca, k.k->p.offset) = bch2_alloc_to_v4(k, &a)->gen;
                        0;