On Tue, 21 Nov 2023, Wu Bo wrote: > If BIO error, it may goto verity_finish_io() before > verity_fec_init_io(). Therefor, the fec_io->rs is not initialized and > may crash when doing memory freeing in verity_fec_finish_io(). > > Crash call stack: > die+0x90/0x2b8 > __do_kernel_fault+0x260/0x298 > do_bad_area+0x2c/0xdc > do_translation_fault+0x3c/0x54 > do_mem_abort+0x54/0x118 > el1_abort+0x38/0x5c > el1h_64_sync_handler+0x50/0x90 > el1h_64_sync+0x64/0x6c > free_rs+0x18/0xac > fec_rs_free+0x10/0x24 > mempool_free+0x58/0x148 > verity_fec_finish_io+0x4c/0xb0 > verity_end_io+0xb8/0x150 > > Cc: stable@xxxxxxxxxxxxxxx # v6.0+ > Fixes: 5721d4e5a9cd ("dm verity: Add optional "try_verify_in_tasklet" feature") > Signed-off-by: Wu Bo <bo.wu@xxxxxxxx> > --- > drivers/md/dm-verity-target.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c > index e115fcfe723c..beec14b6b044 100644 > --- a/drivers/md/dm-verity-target.c > +++ b/drivers/md/dm-verity-target.c > @@ -642,7 +642,6 @@ static void verity_work(struct work_struct *w) > > io->in_tasklet = false; > > - verity_fec_init_io(io); > verity_finish_io(io, errno_to_blk_status(verity_verify_io(io))); > } > > @@ -792,6 +791,8 @@ static int verity_map(struct dm_target *ti, struct bio *bio) > bio->bi_private = io; > io->iter = bio->bi_iter; > > + verity_fec_init_io(io); > + > verity_submit_prefetch(v, io); > > submit_bio_noacct(bio); > -- > 2.25.1 Reviewed-by: Mikulas Patocka <mpatocka@xxxxxxxxxx>