Commit 55e565c4 authored by Mikulas Patocka's avatar Mikulas Patocka Committed by Mike Snitzer

dm-integrity: fix a memory leak when rechecking the data

Memory for the "checksums" pointer will leak if the data is rechecked
after checksum failure (because the associated kfree won't happen due
to 'goto skip_io').

Fix this by freeing the checksums memory before recheck, and just use
the "checksum_onstack" memory for storing checksum during recheck.

Fixes: c88f5e55 ("dm-integrity: recheck the integrity tag after a failure")
Signed-off-by: default avatarMikulas Patocka <mpatocka@redhat.com>
Signed-off-by: default avatarMike Snitzer <snitzer@kernel.org>
parent 277100b3
...@@ -1848,12 +1848,12 @@ static void integrity_metadata(struct work_struct *w) ...@@ -1848,12 +1848,12 @@ static void integrity_metadata(struct work_struct *w)
r = dm_integrity_rw_tag(ic, checksums, &dio->metadata_block, &dio->metadata_offset, r = dm_integrity_rw_tag(ic, checksums, &dio->metadata_block, &dio->metadata_offset,
checksums_ptr - checksums, dio->op == REQ_OP_READ ? TAG_CMP : TAG_WRITE); checksums_ptr - checksums, dio->op == REQ_OP_READ ? TAG_CMP : TAG_WRITE);
if (unlikely(r)) { if (unlikely(r)) {
if (likely(checksums != checksums_onstack))
kfree(checksums);
if (r > 0) { if (r > 0) {
integrity_recheck(dio, checksums); integrity_recheck(dio, checksums_onstack);
goto skip_io; goto skip_io;
} }
if (likely(checksums != checksums_onstack))
kfree(checksums);
goto error; goto error;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment