From: Kent Overstreet Date: Sat, 7 Sep 2019 17:16:41 +0000 (-0400) Subject: bcachefs: Fix a null ptr deref X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=b50dd7920d1cd7b37016929faa175578de12dd27;p=linux.git bcachefs: Fix a null ptr deref rbio->c wasn't being initialized in the move path Signed-off-by: Kent Overstreet --- diff --git a/fs/bcachefs/io.c b/fs/bcachefs/io.c index 844ae46cd7ebb..b0bff54a18e29 100644 --- a/fs/bcachefs/io.c +++ b/fs/bcachefs/io.c @@ -1218,10 +1218,15 @@ static inline struct bch_read_bio *bch2_rbio_free(struct bch_read_bio *rbio) return rbio; } +/* + * Only called on a top level bch_read_bio to complete an entire read request, + * not a split: + */ static void bch2_rbio_done(struct bch_read_bio *rbio) { - bch2_time_stats_update(&rbio->c->times[BCH_TIME_data_read], - rbio->start_time); + if (rbio->start_time) + bch2_time_stats_update(&rbio->c->times[BCH_TIME_data_read], + rbio->start_time); bio_endio(&rbio->bio); } diff --git a/fs/bcachefs/move.c b/fs/bcachefs/move.c index 05bb74a36230b..d01c96ff00d7b 100644 --- a/fs/bcachefs/move.c +++ b/fs/bcachefs/move.c @@ -436,7 +436,8 @@ static int bch2_move_extent(struct bch_fs *c, GFP_KERNEL)) goto err_free; - io->rbio.opts = io_opts; + io->rbio.c = c; + io->rbio.opts = io_opts; bio_init(&io->rbio.bio, NULL, io->bi_inline_vecs, pages, 0); io->rbio.bio.bi_vcnt = pages; bio_set_prio(&io->rbio.bio, IOPRIO_PRIO_VALUE(IOPRIO_CLASS_IDLE, 0));