Blob Blame History Raw
From b734de6ee0e39176d3f3f63ff20ba70c87d536af Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Fri, 2 Jun 2017 15:26:50 -0400
Subject: [PATCH 14/22] Fix a leaked file handle.

Covscan noticed:

Error: RESOURCE_LEAK (CWE-772): [#def34]
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:260: alloc_fn: Storage is returned from allocation function "open_request_file".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:191:5: alloc_fn: Storage is returned from allocation function "fopen".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:191:5: var_assign: Assigning: "fd" = "fopen(fn, "wb")".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:193:9: noescape: Resource "fd" is not freed or pointed-to in function "fileno".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:195:9: noescape: Resource "fd" is not freed or pointed-to in function "fwrite".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:199:5: return_alloc: Returning allocated memory "fd".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:260: var_assign: Assigning: "fd" = storage returned from "open_request_file()".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:287: noescape: Resource "fd" is not freed or pointed-to in "trigger_smi".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:148:33: noescape: "trigger_smi(FILE *)" does not free or save its parameter "fd".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:294: noescape: Resource "fd" is not freed or pointed-to in "fileno".
libsmbios-2.3.3/src/libsmbios_c/smi/smi_linux.c:316: leaked_storage: Variable "fd" going out of scope leaks the storage it points to.

And right it is, so this patch closes that file at the appropriate time.

Signed-off-by: Peter Jones <pjones@redhat.com>
---
 src/libsmbios_c/smi/smi_linux.c | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/src/libsmbios_c/smi/smi_linux.c b/src/libsmbios_c/smi/smi_linux.c
index f810b43e699..46ad888282d 100644
--- a/src/libsmbios_c/smi/smi_linux.c
+++ b/src/libsmbios_c/smi/smi_linux.c
@@ -90,7 +90,7 @@ out:
 u32 __hidden set_phys_buf_size(u32 newsize)
 {
     char fn[bufsize] = {0,};
-    FILE *fd = 0;
+    FILE *fd = NULL;
     char linebuf[bufsize] = {0,};
     u32 phys_buf_addr=0;
 
@@ -299,6 +299,8 @@ int __hidden LINUX_dell_smi_obj_execute(struct dell_smi_obj *this)
     // update smi buffer
     copy_phys_bufs(this, kernel_buf, physaddr, FROM_KERNEL_BUF);
 
+    fclose(fd);
+
     retval = 0;
     goto out;
 
-- 
2.14.3