From: Kent Overstreet Date: Mon, 17 Apr 2023 01:50:37 +0000 (-0400) Subject: Update bcachefs sources to fd381c355c bcachefs: Fix a null ptr deref in fsck check_ex... X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=9690f783569ebeb166dfc1745c0ba0f48db523d0;p=bcachefs-tools-debian Update bcachefs sources to fd381c355c bcachefs: Fix a null ptr deref in fsck check_extents() --- diff --git a/.bcachefs_revision b/.bcachefs_revision index 02a8395..70ac7e0 100644 --- a/.bcachefs_revision +++ b/.bcachefs_revision @@ -1 +1 @@ -22ccceee1555cd9a66f0b444634a7c0099a73d77 +fd381c355c92ad0e3abfc49c7675893ed355686f diff --git a/libbcachefs/error.c b/libbcachefs/error.c index b9076fe..aa64028 100644 --- a/libbcachefs/error.c +++ b/libbcachefs/error.c @@ -75,6 +75,9 @@ enum ask_yn { #ifdef __KERNEL__ #define bch2_fsck_ask_yn() YN_NO #else + +#include "tools-util.h" + enum ask_yn bch2_fsck_ask_yn(void) { char *buf = NULL; @@ -106,6 +109,7 @@ enum ask_yn bch2_fsck_ask_yn(void) free(buf); return ret; } + #endif static struct fsck_err_state *fsck_err_get(struct bch_fs *c, const char *fmt) diff --git a/libbcachefs/fsck.c b/libbcachefs/fsck.c index ed2523a..6319f2f 100644 --- a/libbcachefs/fsck.c +++ b/libbcachefs/fsck.c @@ -3,6 +3,7 @@ #include "bcachefs.h" #include "bkey_buf.h" #include "btree_update.h" +#include "buckets.h" #include "darray.h" #include "dirent.h" #include "error.h" @@ -1407,6 +1408,7 @@ static int check_extents(struct bch_fs *c) struct btree_iter iter; struct bkey_s_c k; extent_ends extent_ends = { 0 }; + struct disk_reservation res = { 0 }; int ret = 0; snapshots_seen_init(&s); @@ -1417,10 +1419,13 @@ static int check_extents(struct bch_fs *c) ret = for_each_btree_key_commit(&trans, iter, BTREE_ID_extents, POS(BCACHEFS_ROOT_INO, 0), BTREE_ITER_PREFETCH|BTREE_ITER_ALL_SNAPSHOTS, k, - NULL, NULL, - BTREE_INSERT_LAZY_RW|BTREE_INSERT_NOFAIL, - check_extent(&trans, &iter, k, &w, &s, &extent_ends)); + &res, NULL, + BTREE_INSERT_LAZY_RW|BTREE_INSERT_NOFAIL, ({ + bch2_disk_reservation_put(c, &res); + check_extent(&trans, &iter, k, &w, &s, &extent_ends); + })); + bch2_disk_reservation_put(c, &res); extent_ends_reset(&extent_ends); darray_exit(&extent_ends); inode_walker_exit(&w);