dosfstools: backport patches to fix two memory leak problems
- backport patches to fix two memory leak problems. - rename patches - set release num to 9 for ci. Signed-off-by: Zhiqiang Liu <liuzhiqiang26@huawei.com> Conflicts: dosfstools.spec
This commit is contained in:
parent
b0a422e416
commit
975ac1583a
89
0008-Fix-memory-leaks-in-read_fat-function.patch
Normal file
89
0008-Fix-memory-leaks-in-read_fat-function.patch
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
From 1a1ba0053830b98e99f9b2713f64dbcb36e2a6cd Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali.rohar@gmail.com>
|
||||||
|
Date: Sun, 18 Nov 2018 20:47:29 +0100
|
||||||
|
Subject: [PATCH] Fix memory leaks in read_fat() function
|
||||||
|
|
||||||
|
Function read_fat() allocates memory to the user supplied buffer. Therefore
|
||||||
|
that function needs complement function for releasing allocated memory and
|
||||||
|
user needs to call if after finish its work.
|
||||||
|
|
||||||
|
This patch fixes memory leaks in fsck.fat and fatlabel tools.
|
||||||
|
|
||||||
|
Conflicts:
|
||||||
|
src/fsck.fat.c
|
||||||
|
src/fatlabel.c
|
||||||
|
[Zhiqiang Liu <liuzhiqiang26@huawei.com> modifies context]
|
||||||
|
|
||||||
|
Fixes #13
|
||||||
|
---
|
||||||
|
src/fat.c | 17 +++++++++++------
|
||||||
|
src/fat.h | 5 +++++
|
||||||
|
src/fsck.fat.c | 1 +
|
||||||
|
3 files changed, 17 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/fat.c b/src/fat.c
|
||||||
|
index d994e8e..849c758 100644
|
||||||
|
--- a/src/fat.c
|
||||||
|
+++ b/src/fat.c
|
||||||
|
@@ -75,6 +75,16 @@ void get_fat(FAT_ENTRY * entry, void *fat, uint32_t cluster, DOS_FS * fs)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+void release_fat(DOS_FS * fs)
|
||||||
|
+{
|
||||||
|
+ if (fs->fat)
|
||||||
|
+ free(fs->fat);
|
||||||
|
+ if (fs->cluster_owner)
|
||||||
|
+ free(fs->cluster_owner);
|
||||||
|
+ fs->fat = NULL;
|
||||||
|
+ fs->cluster_owner = NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Build a bookkeeping structure from the partition's FAT table.
|
||||||
|
* If the partition has multiple FATs and they don't agree, try to pick a winner,
|
||||||
|
@@ -92,12 +102,7 @@ void read_fat(DOS_FS * fs)
|
||||||
|
uint32_t total_num_clusters;
|
||||||
|
|
||||||
|
/* Clean up from previous pass */
|
||||||
|
- if (fs->fat)
|
||||||
|
- free(fs->fat);
|
||||||
|
- if (fs->cluster_owner)
|
||||||
|
- free(fs->cluster_owner);
|
||||||
|
- fs->fat = NULL;
|
||||||
|
- fs->cluster_owner = NULL;
|
||||||
|
+ release_fat(fs);
|
||||||
|
|
||||||
|
total_num_clusters = fs->data_clusters + 2;
|
||||||
|
eff_size = (total_num_clusters * fs->fat_bits + 7) / 8ULL;
|
||||||
|
diff --git a/src/fat.h b/src/fat.h
|
||||||
|
index 5c77634..f9b7643 100644
|
||||||
|
--- a/src/fat.h
|
||||||
|
+++ b/src/fat.h
|
||||||
|
@@ -28,6 +28,11 @@ void read_fat(DOS_FS * fs);
|
||||||
|
/* Loads the FAT of the filesystem described by FS. Initializes the FAT,
|
||||||
|
replaces broken FATs and rejects invalid cluster entries. */
|
||||||
|
|
||||||
|
+void release_fat(DOS_FS * fs);
|
||||||
|
+
|
||||||
|
+/* Release the FAT of the filesystem described by FS and free allocated memory.
|
||||||
|
+ Call it after finish work with FAT. */
|
||||||
|
+
|
||||||
|
void get_fat(FAT_ENTRY * entry, void *fat, uint32_t cluster, DOS_FS * fs);
|
||||||
|
|
||||||
|
/* Retrieve the FAT entry (next chained cluster) for CLUSTER. */
|
||||||
|
diff --git a/src/fsck.fat.c b/src/fsck.fat.c
|
||||||
|
index c244aba..b1aafe9 100644
|
||||||
|
--- a/src/fsck.fat.c
|
||||||
|
+++ b/src/fsck.fat.c
|
||||||
|
@@ -203,6 +203,7 @@ int main(int argc, char **argv)
|
||||||
|
reclaim_free(&fs);
|
||||||
|
qfree(&mem_queue);
|
||||||
|
}
|
||||||
|
+ release_fat(&fs);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
if (fs_changed()) {
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -0,0 +1,65 @@
|
|||||||
|
From 08cf67bb19f8b9cce0c2dd03432951ade476dadd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andreas Bombe <aeb@debian.org>
|
||||||
|
Date: Thu, 26 Jan 2017 21:31:03 +0100
|
||||||
|
Subject: [PATCH] Turn label in struct DOS_FS into char array from pointer
|
||||||
|
|
||||||
|
Signed-off-by: Andreas Bombe <aeb@debian.org>
|
||||||
|
---
|
||||||
|
src/boot.c | 6 +-----
|
||||||
|
src/fatlabel.c | 2 +-
|
||||||
|
src/fsck.fat.h | 2 +-
|
||||||
|
3 files changed, 3 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/boot.c b/src/boot.c
|
||||||
|
index 58b4286..b4a3300 100644
|
||||||
|
--- a/src/boot.c
|
||||||
|
+++ b/src/boot.c
|
||||||
|
@@ -435,18 +435,14 @@ void read_boot(DOS_FS * fs)
|
||||||
|
fs->eff_fat_bits = (fs->fat_bits == 32) ? 28 : fs->fat_bits;
|
||||||
|
fs->fat_size = fat_length * logical_sector_size;
|
||||||
|
|
||||||
|
- fs->label = calloc(12, sizeof(uint8_t));
|
||||||
|
+ fs->label[0] = 0;
|
||||||
|
if (fs->fat_bits == 12 || fs->fat_bits == 16) {
|
||||||
|
struct boot_sector_16 *b16 = (struct boot_sector_16 *)&b;
|
||||||
|
if (b16->extended_sig == 0x29)
|
||||||
|
memmove(fs->label, b16->label, 11);
|
||||||
|
- else
|
||||||
|
- fs->label = NULL;
|
||||||
|
} else if (fs->fat_bits == 32) {
|
||||||
|
if (b.extended_sig == 0x29)
|
||||||
|
memmove(fs->label, &b.label, 11);
|
||||||
|
- else
|
||||||
|
- fs->label = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
total_fat_entries = (uint64_t)fs->fat_size * 8 / fs->fat_bits;
|
||||||
|
diff --git a/src/fatlabel.c b/src/fatlabel.c
|
||||||
|
index 9268ddb..cd3d2ee 100644
|
||||||
|
--- a/src/fatlabel.c
|
||||||
|
+++ b/src/fatlabel.c
|
||||||
|
@@ -133,7 +133,7 @@ int main(int argc, char *argv[])
|
||||||
|
if (!rw) {
|
||||||
|
offset = find_volume_de(&fs, &de);
|
||||||
|
if (offset == 0)
|
||||||
|
- fprintf(stdout, "%s\n", fs.label);
|
||||||
|
+ fprintf(stdout, "%11s\n", fs.label);
|
||||||
|
else
|
||||||
|
fprintf(stdout, "%.8s%.3s\n", de.name, de.name + 8);
|
||||||
|
exit(0);
|
||||||
|
diff --git a/src/fsck.fat.h b/src/fsck.fat.h
|
||||||
|
index 5e93178..e91437d 100644
|
||||||
|
--- a/src/fsck.fat.h
|
||||||
|
+++ b/src/fsck.fat.h
|
||||||
|
@@ -164,7 +164,7 @@ typedef struct {
|
||||||
|
off_t backupboot_start; /* 0 if not present */
|
||||||
|
unsigned char *fat;
|
||||||
|
DOS_FILE **cluster_owner;
|
||||||
|
- char *label;
|
||||||
|
+ char label[11];
|
||||||
|
} DOS_FS;
|
||||||
|
|
||||||
|
extern int interactive, rw, list, verbose, test, write_immed;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
Name: dosfstools
|
Name: dosfstools
|
||||||
Version: 4.1
|
Version: 4.1
|
||||||
Release: 10
|
Release: 11
|
||||||
Summary: FAT file system userspace tools
|
Summary: FAT file system userspace tools
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: http://www.github.com/dosfstools/dosfstools
|
URL: http://www.github.com/dosfstools/dosfstools
|
||||||
@ -16,6 +16,8 @@ Patch4: 0004-Fix-gcc-sprintf-length-warnings.patch
|
|||||||
Patch5: 0005-fsck.fat-Fix-Year-2038-Bug.patch
|
Patch5: 0005-fsck.fat-Fix-Year-2038-Bug.patch
|
||||||
Patch6: 0006-mkfs.fat-Fix-parsing-of-block-number.patch
|
Patch6: 0006-mkfs.fat-Fix-parsing-of-block-number.patch
|
||||||
Patch7: 0007-device_info-Fix-parsing-partition-number.patch
|
Patch7: 0007-device_info-Fix-parsing-partition-number.patch
|
||||||
|
Patch8: 0008-Fix-memory-leaks-in-read_fat-function.patch
|
||||||
|
Patch9: 0009-Turn-label-in-struct-DOS_FS-into-char-array-from-poi.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
The dosfstools package contains programs mkfs.fat, fsck.fat and fatlabel to
|
The dosfstools package contains programs mkfs.fat, fsck.fat and fatlabel to
|
||||||
@ -52,9 +54,13 @@ make check
|
|||||||
%{_mandir}/man8/*
|
%{_mandir}/man8/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
* Fri Jul 30 2021 chenyanpanHW <chenyanpan@huawei.com> - 4.1-10
|
* Fri Jul 30 2021 chenyanpanHW <chenyanpan@huawei.com> - 4.1-11
|
||||||
- DESC: delete -S git from %autosetup, and delete BuildRequires git
|
- DESC: delete -S git from %autosetup, and delete BuildRequires git
|
||||||
|
|
||||||
|
* Tue Feb 9 2021 Zhiqiang Liu <liuzhiqiang26@huawei.com> - 4.1-10
|
||||||
|
- backport patches to fix two memory leak problems, rename patch names,
|
||||||
|
and set release num to 9 for CI.
|
||||||
|
|
||||||
* Wed Nov 4 2020 lixiaokeng <lixiaokeng@huawei.com> - 4.1-9
|
* Wed Nov 4 2020 lixiaokeng <lixiaokeng@huawei.com> - 4.1-9
|
||||||
- add make check
|
- add make check
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user