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; }