Blob Blame History Raw
From 5466375683a48bd650091781991d9e4facd06ba6 Mon Sep 17 00:00:00 2001
From: rpm-build <rpm-build>
Date: Fri, 26 Jun 2020 21:35:46 +0300
Subject: [PATCH] Downstream: fix covscan issue: close(fd) called twice

Seems it's already fixed upstream, but by several commits, that
change more things.

This simple patch, just prevents the case of calling close(fd) twice

Warning is:
Error: USE_AFTER_FREE (CWE-416): [#def2]
libusb-1.0.23/libusb/os/linux_usbfs.c:1043: closed_arg: "close(int)" closes "fd".
libusb-1.0.23/libusb/os/linux_usbfs.c:1054: double_close: Calling "close(int)"
closes handle "fd" which has already been closed.
---
 libusb/os/linux_usbfs.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/libusb/os/linux_usbfs.c b/libusb/os/linux_usbfs.c
index 4179b9a..537f0dd 100644
--- a/libusb/os/linux_usbfs.c
+++ b/libusb/os/linux_usbfs.c
@@ -1039,8 +1039,10 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum,
 		priv->descriptors_len += r;
 	} while (priv->descriptors_len == descriptors_size);
 
-	if (fd != wrapped_fd)
+	if (fd != wrapped_fd) {
 		close(fd);
+		fd = -1;
+	}
 
 	if (priv->descriptors_len < DEVICE_DESC_LENGTH) {
 		usbi_err(ctx, "short descriptor read (%d)",
@@ -1050,7 +1052,7 @@ static int initialize_device(struct libusb_device *dev, uint8_t busnum,
 
 	if (sysfs_dir && sysfs_can_relate_devices)
 	{
-		if (fd != wrapped_fd)
+		if ((fd >= 0) && (fd != wrapped_fd))
 			close(fd);
 		return LIBUSB_SUCCESS;
 	}
-- 
2.26.2