99 lines
2.3 KiB
Diff
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
|
|
|