From 3e08ccc4c5bca26df1c3b7542868cf2a457fa6ec Mon Sep 17 00:00:00 2001 From: shenxiangwei Date: Tue, 16 Aug 2022 08:34:37 +0800 Subject: [PATCH 2/2] fix file resource leakage and memory leakage Signed-off-by: shenxiangwei --- 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