Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'for-6.8/dm-fix-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm

Pull device mapper fix from Mike Snitzer:

- Fix DM integrity and verity targets to not use excessive stack when
they recheck in the error path.

* tag 'for-6.8/dm-fix-3' of git://git.kernel.org/pub/scm/linux/kernel/git/device-mapper/linux-dm:
dm-integrity, dm-verity: reduce stack usage for recheck

+6 -8
+4 -6
drivers/md/dm-integrity.c
··· 1691 1691 get_random_bytes(result, ic->tag_size); 1692 1692 } 1693 1693 1694 - static void integrity_recheck(struct dm_integrity_io *dio) 1694 + static noinline void integrity_recheck(struct dm_integrity_io *dio, char *checksum) 1695 1695 { 1696 1696 struct bio *bio = dm_bio_from_per_bio_data(dio, sizeof(struct dm_integrity_io)); 1697 1697 struct dm_integrity_c *ic = dio->ic; 1698 1698 struct bvec_iter iter; 1699 1699 struct bio_vec bv; 1700 1700 sector_t sector, logical_sector, area, offset; 1701 - char checksum_onstack[max_t(size_t, HASH_MAX_DIGESTSIZE, MAX_TAG_SIZE)]; 1702 1701 struct page *page; 1703 1702 void *buffer; 1704 1703 ··· 1733 1734 goto free_ret; 1734 1735 } 1735 1736 1736 - integrity_sector_checksum(ic, logical_sector, buffer, 1737 - checksum_onstack); 1738 - r = dm_integrity_rw_tag(ic, checksum_onstack, &dio->metadata_block, 1737 + integrity_sector_checksum(ic, logical_sector, buffer, checksum); 1738 + r = dm_integrity_rw_tag(ic, checksum, &dio->metadata_block, 1739 1739 &dio->metadata_offset, ic->tag_size, TAG_CMP); 1740 1740 if (r) { 1741 1741 if (r > 0) { ··· 1849 1851 checksums_ptr - checksums, dio->op == REQ_OP_READ ? TAG_CMP : TAG_WRITE); 1850 1852 if (unlikely(r)) { 1851 1853 if (r > 0) { 1852 - integrity_recheck(dio); 1854 + integrity_recheck(dio, checksums); 1853 1855 goto skip_io; 1854 1856 } 1855 1857 if (likely(checksums != checksums_onstack))
+2 -2
drivers/md/dm-verity-target.c
··· 491 491 return 0; 492 492 } 493 493 494 - static int verity_recheck(struct dm_verity *v, struct dm_verity_io *io, 495 - struct bvec_iter start, sector_t cur_block) 494 + static noinline int verity_recheck(struct dm_verity *v, struct dm_verity_io *io, 495 + struct bvec_iter start, sector_t cur_block) 496 496 { 497 497 struct page *page; 498 498 void *buffer;