80 lines
2.9 KiB
Diff
80 lines
2.9 KiB
Diff
From f7f44f8d321628d0a9d960d4183d2eba63ed29ed Mon Sep 17 00:00:00 2001
|
|
From: Joachim Metz <joachim.metz@gmail.com>
|
|
Date: Thu, 22 Apr 2021 20:29:46 +0200
|
|
Subject: [PATCH] Fixed leak in error path #1190
|
|
|
|
---
|
|
tsk/fs/ntfs.c | 23 ++++++++++++++++++-----
|
|
1 file changed, 18 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/tsk/fs/ntfs.c b/tsk/fs/ntfs.c
|
|
index f55b849..e82abae 100755
|
|
--- a/tsk/fs/ntfs.c
|
|
+++ b/tsk/fs/ntfs.c
|
|
@@ -592,7 +592,8 @@ ntfs_make_data_run(NTFS_INFO * ntfs, TSK_OFF_T start_vcn,
|
|
int64_t addr_offset = 0;
|
|
|
|
/* allocate a new tsk_fs_attr_run */
|
|
- if ((data_run = tsk_fs_attr_run_alloc()) == NULL) {
|
|
+ data_run = tsk_fs_attr_run_alloc();
|
|
+ if (data_run == NULL) {
|
|
tsk_fs_attr_run_free(*a_data_run_head);
|
|
*a_data_run_head = NULL;
|
|
return TSK_ERR;
|
|
@@ -2015,8 +2016,10 @@ ntfs_proc_attrseq(NTFS_INFO * ntfs,
|
|
tsk_error_set_errno(TSK_ERR_FS_CORRUPT);
|
|
tsk_error_set_errstr("ntfs_proc_attrseq: Compression unit size 2^%d too large",
|
|
tsk_getu16(fs->endian, attr->c.nr.compusize));
|
|
- if (fs_attr_run)
|
|
+ if (fs_attr_run) {
|
|
tsk_fs_attr_run_free(fs_attr_run);
|
|
+ fs_attr_run = NULL;
|
|
+ }
|
|
return TSK_COR;
|
|
}
|
|
|
|
@@ -2056,9 +2059,10 @@ ntfs_proc_attrseq(NTFS_INFO * ntfs,
|
|
TSK_FS_ATTR_RES)) == NULL) {
|
|
tsk_error_errstr2_concat(" - proc_attrseq: getnew");
|
|
// JRB: Coverity found leak.
|
|
- if (fs_attr_run)
|
|
+ if (fs_attr_run) {
|
|
tsk_fs_attr_run_free(fs_attr_run);
|
|
- fs_attr_run = NULL;
|
|
+ fs_attr_run = NULL;
|
|
+ }
|
|
return TSK_ERR;
|
|
}
|
|
|
|
@@ -2098,10 +2102,15 @@ ntfs_proc_attrseq(NTFS_INFO * ntfs,
|
|
tsk_error_errstr2_concat("- proc_attrseq: set run");
|
|
|
|
// If the run wasn't saved to the attribute, free it now
|
|
- if (fs_attr_run && (fs_attr->nrd.run == NULL))
|
|
+ if (fs_attr_run && (fs_attr->nrd.run == NULL)) {
|
|
tsk_fs_attr_run_free(fs_attr_run);
|
|
+ fs_attr_run = NULL;
|
|
+ }
|
|
return TSK_COR;
|
|
}
|
|
+ // fs_file has taken over managerment of fs_attr_run
|
|
+ fs_attr_run = NULL;
|
|
+
|
|
// set the special functions
|
|
if (fs_file->meta->flags & TSK_FS_META_FLAG_COMP) {
|
|
fs_attr->w = ntfs_attr_walk_special;
|
|
@@ -2112,6 +2121,10 @@ ntfs_proc_attrseq(NTFS_INFO * ntfs,
|
|
else {
|
|
if (tsk_fs_attr_add_run(fs, fs_attr, fs_attr_run)) {
|
|
tsk_error_errstr2_concat(" - proc_attrseq: put run");
|
|
+ if (fs_attr_run) {
|
|
+ tsk_fs_attr_run_free(fs_attr_run);
|
|
+ fs_attr_run = NULL;
|
|
+ }
|
|
return TSK_COR;
|
|
}
|
|
}
|
|
--
|
|
2.30.0
|
|
|