Blob Blame History Raw
From 611460349c214d9655a4ee06757fbcb5bdf6e2a3 Mon Sep 17 00:00:00 2001
From: Peter Jones <pjones@redhat.com>
Date: Wed, 10 Sep 2014 15:32:59 -0400
Subject: [PATCH 03/18] Don't leak our socket's fd when determining network
 info.

Covscan again.

Signed-off-by: Peter Jones <pjones@redhat.com>
---
 src/lib/efi.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/lib/efi.c b/src/lib/efi.c
index 6b25dfe..8ba0e54 100644
--- a/src/lib/efi.c
+++ b/src/lib/efi.c
@@ -631,13 +631,16 @@ make_net_load_option(char *iface, uint8_t *buf, size_t size)
 	err = ioctl(fd, SIOCETHTOOL, &ifr);
 	if (err < 0) {
 		perror("Cannot get driver information");
+		close(fd);
 		return -1;
 	}
 
 	if (strncmp(drvinfo.bus_info, "virtio", 6) == 0) {
 		err = get_virt_pci(drvinfo.bus_info, &bus, &slot, &func);
-		if (err < 0)
+		if (err < 0) {
+			close(fd);
 			return err;
+		}
 	} else {
 		/* The domain part was added in 2.6 kernels.
 		 * Test for that first. */
@@ -648,6 +651,7 @@ make_net_load_option(char *iface, uint8_t *buf, size_t size)
 						&bus, &slot, &func);
 			if (err != 3) {
 				perror("Couldn't parse device location string.");
+				close(fd);
 				return -1;
 			}
 		}
@@ -655,9 +659,11 @@ make_net_load_option(char *iface, uint8_t *buf, size_t size)
 
 	err = ioctl(fd, SIOCGIFHWADDR, &ifr);
 	if (err < 0) {
+		close(fd);
 		perror("Cannot get hardware address.");
 		return -1;
 	}
+	close(fd);
 
 	buf_offset = 0;
 	needed = make_acpi_device_path(opts.acpi_hid, opts.acpi_uid, buf,
-- 
1.9.3