aboutsummaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorGravatar Mikulas Patocka <mpatocka@redhat.com> 2024-03-18 18:35:06 +0100
committerGravatar Mike Snitzer <snitzer@kernel.org> 2024-03-19 11:51:37 -0400
commit55e565c42dce81a4e49c13262d5bc4eb4c2e588a (patch)
treebfc466ffe2607664d9fe2a18e7334587091bf61d /drivers
parentMerge tag 'block-6.9-20240315' of git://git.kernel.dk/linux (diff)
downloadlinux-55e565c42dce81a4e49c13262d5bc4eb4c2e588a.tar.gz
linux-55e565c42dce81a4e49c13262d5bc4eb4c2e588a.tar.bz2
linux-55e565c42dce81a4e49c13262d5bc4eb4c2e588a.zip
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: c88f5e553fe3 ("dm-integrity: recheck the integrity tag after a failure") Signed-off-by: Mikulas Patocka <mpatocka@redhat.com> Signed-off-by: Mike Snitzer <snitzer@kernel.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/md/dm-integrity.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/md/dm-integrity.c b/drivers/md/dm-integrity.c
index d822ab2f739b..3329e1e93524 100644
--- a/drivers/md/dm-integrity.c
+++ b/drivers/md/dm-integrity.c
@@ -1848,12 +1848,12 @@ again:
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);
if (unlikely(r)) {
+ if (likely(checksums != checksums_onstack))
+ kfree(checksums);
if (r > 0) {
- integrity_recheck(dio, checksums);
+ integrity_recheck(dio, checksums_onstack);
goto skip_io;
}
- if (likely(checksums != checksums_onstack))
- kfree(checksums);
goto error;
}