57 lines
1.5 KiB
Diff
57 lines
1.5 KiB
Diff
From fd5a80e5bfb472c31eeab4caa4f4907b803b1b60 Mon Sep 17 00:00:00 2001
|
|
From: Qu Wenruo <wqu@suse.com>
|
|
Date: Fri, 6 Sep 2024 12:30:45 +0800
|
|
Subject: [PATCH] btrfs-progs: corrupt-block: fix memory leak in debug_corrupt_sector().
|
|
|
|
ASAN build (make D=asan) detects a memory leak in
|
|
btrfs-corrupt-block inside debug_corrupt_sector().
|
|
|
|
This can be reproduced by fsck/013 test case.
|
|
|
|
The cause is pretty simple, we just malloc a sector and forgot to free
|
|
it.
|
|
|
|
Issue: #806
|
|
Reviewed-by: Josef Bacik <josef@toxicpanda.com>
|
|
Signed-off-by: Qu Wenruo <wqu@suse.com>
|
|
Signed-off-by: David Sterba <dsterba@suse.com>
|
|
---
|
|
btrfs-corrupt-block.c | 7 ++++---
|
|
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/btrfs-corrupt-block.c b/btrfs-corrupt-block.c
|
|
index 1245973..e883198 100644
|
|
--- a/btrfs-corrupt-block.c
|
|
+++ b/btrfs-corrupt-block.c
|
|
@@ -70,7 +70,7 @@ static int debug_corrupt_sector(struct btrfs_root *root, u64 logical, int mirror
|
|
if (ret < 0) {
|
|
errno = -ret;
|
|
error("cannot read bytenr %llu: %m", logical);
|
|
- return ret;
|
|
+ goto out;
|
|
}
|
|
printf("corrupting %llu copy %d\n", logical, mirror_num);
|
|
memset(buf, 0, sectorsize);
|
|
@@ -78,7 +78,7 @@ static int debug_corrupt_sector(struct btrfs_root *root, u64 logical, int mirror
|
|
if (ret < 0) {
|
|
errno = -ret;
|
|
error("cannot write bytenr %llu: %m", logical);
|
|
- return ret;
|
|
+ goto out;
|
|
}
|
|
}
|
|
|
|
@@ -90,7 +90,8 @@ static int debug_corrupt_sector(struct btrfs_root *root, u64 logical, int mirror
|
|
if (mirror_num > num_copies)
|
|
break;
|
|
}
|
|
-
|
|
+out:
|
|
+ free(buf);
|
|
return 0;
|
|
}
|
|
|
|
--
|
|
2.23.0
|
|
|