diff --git a/patches.suse/dm-verity-fix-error-handling-for-check_at_most_once--e8c5.patch b/patches.suse/dm-verity-fix-error-handling-for-check_at_most_once--e8c5.patch new file mode 100644 index 0000000..ed8baf0 --- /dev/null +++ b/patches.suse/dm-verity-fix-error-handling-for-check_at_most_once--e8c5.patch @@ -0,0 +1,49 @@ +From e8c5d45f82ce0c238a4817739892fe8897a3dcc3 Mon Sep 17 00:00:00 2001 +From: Yeongjin Gil +Date: Mon, 20 Mar 2023 15:59:32 +0900 +Subject: [PATCH] dm verity: fix error handling for check_at_most_once on FEC +Git-commit: e8c5d45f82ce0c238a4817739892fe8897a3dcc3 +Patch-mainline: v6.4-rc1 +References: git-fixes + +In verity_end_io(), if bi_status is not BLK_STS_OK, it can be return +directly. But if FEC configured, it is desired to correct the data page +through verity_verify_io. And the return value will be converted to +blk_status and passed to verity_finish_io(). + +BTW, when a bit is set in v->validated_blocks, verity_verify_io() skips +verification regardless of I/O error for the corresponding bio. In this +case, the I/O error could not be returned properly, and as a result, +there is a problem that abnormal data could be read for the +corresponding block. + +To fix this problem, when an I/O error occurs, do not skip verification +even if the bit related is set in v->validated_blocks. + +Fixes: 843f38d382b1 ("dm verity: add 'check_at_most_once' option to only validate hashes once") +Cc: stable@vger.kernel.org +Reviewed-by: Sungjong Seo +Signed-off-by: Yeongjin Gil +Signed-off-by: Mike Snitzer +Signed-off-by: Coly Li + +--- + drivers/md/dm-verity-target.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/md/dm-verity-target.c b/drivers/md/dm-verity-target.c +index ade83ef3b439..9316399b920e 100644 +--- a/drivers/md/dm-verity-target.c ++++ b/drivers/md/dm-verity-target.c +@@ -523,7 +523,7 @@ static int verity_verify_io(struct dm_verity_io *io) + sector_t cur_block = io->block + b; + struct ahash_request *req = verity_io_hash_req(v, io); + +- if (v->validated_blocks && ++ if (v->validated_blocks && bio->bi_status == BLK_STS_OK && + likely(test_bit(cur_block, v->validated_blocks))) { + verity_bv_skip_block(v, io, iter); + continue; +-- +2.35.3 + diff --git a/series.conf b/series.conf index 8028357..8d3f28a 100644 --- a/series.conf +++ b/series.conf @@ -41458,6 +41458,7 @@ patches.suse/md-raid10-fix-memleak-of-md-thread-f0dd.patch patches.suse/md-raid10-don-t-call-bio_start_io_acct-twice-for-bio-7cdd.patch patches.suse/block-bfq-Fix-division-by-zero-error-on-zero-wsum.patch + patches.suse/dm-verity-fix-error-handling-for-check_at_most_once--e8c5.patch patches.suse/dm-ioctl-fix-nested-locking-in-table_clear-to-remove-deadlock-concern-3b89.patch patches.suse/scsi-lpfc-Prevent-lpfc_debugfs_lockstat_write-buffer.patch patches.suse/scsi-lpfc-Reorder-freeing-of-various-DMA-buffers-and.patch