• M
    dm integrity: fix data corruption due to improper use of bvec_kmap_local · 1cef171a
    Mike Snitzer 提交于
    Commit 25058d1c ("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: 25058d1c ("dm integrity: use bvec_kmap_local in __journal_read_write")
    Reported-by: NTony Asleson <tasleson@redhat.com>
    Reviewed-by: NHeinz Mauelshagen <heinzm@redhat.com>
    Signed-off-by: NMike Snitzer <snitzer@redhat.com>
    1cef171a
dm-integrity.c 134.4 KB