]> git.baikalelectronics.ru Git - kernel.git/commit
dm integrity: fix data corruption due to improper use of bvec_kmap_local
authorMike Snitzer <snitzer@redhat.com>
Wed, 15 Dec 2021 17:31:51 +0000 (12:31 -0500)
committerMike Snitzer <snitzer@redhat.com>
Wed, 15 Dec 2021 19:16:35 +0000 (14:16 -0500)
commitebeae1a5cb8fe72e57e356c91cc8964484083421
treefc2b6b5387e4db7c4055e81d01e463ab2864d505
parent49c6e656229b6325cee8ee8bb8e48d3a277b23fe
dm integrity: fix data corruption due to improper use of bvec_kmap_local

Commit 9fd3b1ce0d4f ("dm integrity: use bvec_kmap_local in
__journal_read_write") didn't account for __journal_read_write() later
adding the biovec's bv_offset. As such using bvec_kmap_local() caused
the start of the biovec to be skipped.

Trivial test that illustrates data corruption:

  # integritysetup format /dev/pmem0
  # integritysetup open /dev/pmem0 integrityroot
  # mkfs.xfs /dev/mapper/integrityroot
  ...
  bad magic number
  bad magic number
  Metadata corruption detected at xfs_sb block 0x0/0x1000
  libxfs_writebufr: write verifer failed on xfs_sb bno 0x0/0x1000
  releasing dirty buffer (bulk) to free list!

Fix this by using kmap_local_page() instead of bvec_kmap_local() in
__journal_read_write().

Fixes: 9fd3b1ce0d4f ("dm integrity: use bvec_kmap_local in __journal_read_write")
Reported-by: Tony Asleson <tasleson@redhat.com>
Reviewed-by: Heinz Mauelshagen <heinzm@redhat.com>
Signed-off-by: Mike Snitzer <snitzer@redhat.com>
drivers/md/dm-integrity.c