aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKent Overstreet <kent.overstreet@linux.dev>2023-04-16 21:50:37 -0400
committerKent Overstreet <kent.overstreet@linux.dev>2023-04-16 21:50:37 -0400
commit9690f783569ebeb166dfc1745c0ba0f48db523d0 (patch)
tree491bb01f150914cef89334a5313efc04fa996cf2
parent42edda8db68f619aa9b08de10cdda6b752c2f901 (diff)
downloadbcachefs-tools-9690f783569ebeb166dfc1745c0ba0f48db523d0.tar.gz
Update bcachefs sources to fd381c355c bcachefs: Fix a null ptr deref in fsck check_extents()
-rw-r--r--.bcachefs_revision2
-rw-r--r--libbcachefs/error.c4
-rw-r--r--libbcachefs/fsck.c11
3 files changed, 13 insertions, 4 deletions
diff --git a/.bcachefs_revision b/.bcachefs_revision
index 02a83950..70ac7e01 100644
--- a/.bcachefs_revision
+++ b/.bcachefs_revision
@@ -1 +1 @@
-22ccceee1555cd9a66f0b444634a7c0099a73d77
+fd381c355c92ad0e3abfc49c7675893ed355686f
diff --git a/libbcachefs/error.c b/libbcachefs/error.c
index b9076fee..aa640284 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 ed2523ac..6319f2f7 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);