digest-list-tools/fix-file-resource-leakage-and-memory-leakage.patch

99 lines
2.3 KiB
Diff

From 3e08ccc4c5bca26df1c3b7542868cf2a457fa6ec Mon Sep 17 00:00:00 2001
From: shenxiangwei <shenxiangwei1@huawei.com>
Date: Tue, 16 Aug 2022 08:34:37 +0800
Subject: [PATCH 2/2] fix file resource leakage and memory leakage
Signed-off-by: shenxiangwei <shenxiangwei1@huawei.com>
---
generators/unknown.c | 2 +-
lib/xattr.c | 14 ++++++++++++++
parsers/rpm.c | 2 +-
src/manage_digest_lists.c | 4 ++--
4 files changed, 18 insertions(+), 4 deletions(-)
diff --git a/generators/unknown.c b/generators/unknown.c
index ad17a23..85f348f 100644
--- a/generators/unknown.c
+++ b/generators/unknown.c
@@ -217,7 +217,7 @@ static int add_file(int dirfd, int fd, char *path, u16 type, u16 modifiers,
if (!ret)
ret = write_check(fd, "\n", 1);
- return ret;
+ goto out;
}
if (!tlv) {
diff --git a/lib/xattr.c b/lib/xattr.c
index 3bfb35c..166aa2e 100644
--- a/lib/xattr.c
+++ b/lib/xattr.c
@@ -129,19 +129,33 @@ int read_ima_xattr(int dirfd, char *path, u8 **buf, size_t *buf_len,
ret = fgetxattr(fd, XATTR_NAME_IMA, NULL, 0);
if (ret < 0)
+ {
+ close(fd);
return -ENODATA;
+ }
*buf_len = ret;
if (*buf_len > 65536)
+ {
+ close(fd);
return -ENOMEM;
+ }
*buf = malloc(*buf_len);
if (!*buf)
+ {
+ close(fd);
return -ENOMEM;
+ }
ret = fgetxattr(fd, XATTR_NAME_IMA, *buf, ret);
if (ret < 0)
+ {
+ free(*buf);
+ *buf = NULL;
+ close(fd);
return -ENODATA;
+ }
ret = parse_ima_xattr(*buf, *buf_len, keyid, keyid_len, sig, sig_len,
algo);
diff --git a/parsers/rpm.c b/parsers/rpm.c
index fc6122e..0f165b6 100644
--- a/parsers/rpm.c
+++ b/parsers/rpm.c
@@ -272,7 +272,7 @@ int parser(int fd, struct list_head *head, loff_t buf_size, void *buf,
}
if (ret < 0)
- return ret;
+ goto out;
}
out:
free(dirnames_ptr);
diff --git a/src/manage_digest_lists.c b/src/manage_digest_lists.c
index 1dc3a43..0eb4233 100644
--- a/src/manage_digest_lists.c
+++ b/src/manage_digest_lists.c
@@ -206,11 +206,11 @@ int main(int argc, char *argv[])
if (op == PARSER_OP_GEN_IMA_LIST) {
ret = ima_copy_boot_aggregate(fd);
if (ret < 0)
- return ret;
+ goto out_close_fd;
ret = ima_generate_entry(-1, fd, "", IMA_KEY_PATH);
if (ret < 0)
- return ret;
+ goto out_close_fd;
}
for (i = 0; i < COMPACT__LAST; i++) {
--
2.27.0