On my system, libusb_hotplug_register_callback fails, resulting in long
open and closed DB tasks when my YubiKey is involved.

I have not found out why libusb_hotplug_register_callback fails which is
clear the root cause. However, I had to realize that keepassxc uses
"handle" even if it is not valid.

This means that everything works as usual for me.

gonzalo@ also reported the issue and tested the diff below with success.

I don't want to wait for upstream. OK to commit?

Rafeal

Index: Makefile
===================================================================
RCS file: /cvs/ports/security/keepassxc/Makefile,v
diff -u -p -r1.62 Makefile
--- Makefile    12 May 2024 12:09:16 -0000      1.62
+++ Makefile    9 Jun 2024 06:45:13 -0000
@@ -2,6 +2,7 @@ COMMENT =       management tool for passwords 
 
 V =            2.7.8
 DISTNAME =     keepassxc-${V}
+REVISION =     0
 
 CATEGORIES =   security
 
Index: patches/patch-src_gui_osutils_nixutils_DeviceListenerLibUsb_cpp
===================================================================
RCS file: patches/patch-src_gui_osutils_nixutils_DeviceListenerLibUsb_cpp
diff -N patches/patch-src_gui_osutils_nixutils_DeviceListenerLibUsb_cpp
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ patches/patch-src_gui_osutils_nixutils_DeviceListenerLibUsb_cpp     9 Jun 
2024 06:45:13 -0000
@@ -0,0 +1,20 @@
+https://github.com/keepassxreboot/keepassxc/pull/10872
+
+Index: src/gui/osutils/nixutils/DeviceListenerLibUsb.cpp
+--- src/gui/osutils/nixutils/DeviceListenerLibUsb.cpp.orig
++++ src/gui/osutils/nixutils/DeviceListenerLibUsb.cpp
+@@ -94,11 +94,12 @@ int DeviceListenerLibUsb::registerHotplugCallback(bool
+         // Avoid race conditions
+         m_usbEvents.waitForFinished();
+     }
+-    if (!m_usbEvents.isRunning()) {
++    if (handle > 0 && !m_usbEvents.isRunning()) {
+         m_completed = false;
+         m_usbEvents = QtConcurrent::run(handleUsbEvents, 
static_cast<libusb_context*>(m_ctx), &m_completed);
+     }
+-    m_callbackHandles.insert(handle);
++    if (handle > 0)
++        m_callbackHandles.insert(handle);
+     return handle;
+ }
+ 

Reply via email to