diff --git a/0000-Link-with-znodelete-to-disallow-unloading.patch b/0000-Link-with-znodelete-to-disallow-unloading.patch new file mode 100644 index 0000000000000000000000000000000000000000..4534ab749b7c92f9fed2cb7388e9e99dd0b4622d --- /dev/null +++ b/0000-Link-with-znodelete-to-disallow-unloading.patch @@ -0,0 +1,51 @@ +From a9e8373030b39aadfc33af67443085df83e9e344 Mon Sep 17 00:00:00 2001 +From: Daniel Berrange +Date: Wed, 14 Aug 2013 16:00:56 +0200 +Subject: [libusb-compat PATCH] Link with -znodelete to disallow unloading + +Since libusb-0.1 did not have any init / exit function, code using the +libusb-0.1 API will not call libusb_exit. + +Now, libgphoto uses libusb and will dlopen() and dlclose() it. Unfortunately +since there is no way to ensure libusb_close() is called, when libgphoto +dlcloses the libusb.so library, the thread from libusbx.so will not be +stopped. So a thread will remain running, executing code from a memory +region that has now been freed. Crash-tastic results ensue. + +I don't see a good way to fix this from libusb or libusbx, given the need to +preserve the existing API of libusb. + +If, however, we link libusb.so using -znodelete, we will prevent it from +ever being unloaded, despite the dlclose() calls. This is not ideal, but +better than allowing it to be unloaded which is a guaranteed crash. + +Signed-off-by: Hans de Goede +--- + libusb/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/libusb/Makefile.am b/libusb/Makefile.am +index 33a609a..a20fdb5 100644 +--- a/libusb/Makefile.am ++++ b/libusb/Makefile.am +@@ -5,5 +5,5 @@ libusb_la_SOURCES = core.c usbi.h + libusb_la_CFLAGS = -fvisibility=hidden $(AM_CFLAGS) $(LIBUSB_1_0_CFLAGS) + libusb_la_LIBADD = $(LIBUSB_1_0_LIBS) + libusb_la_LDFLAGS = -version-info $(LT_MAJOR):$(LT_REVISION):$(LT_AGE) \ +- -release 0.1 ++ -release 0.1 -Wl,-z -Wl,nodelete + +--- libusb-compat-0.1.5.orig/libusb/Makefile.in 2013-05-21 00:40:35.000000000 +0100 ++++ libusb-compat-0.1.5.orig/libusb/Makefile.in 2013-08-13 22:20:32.831532426 +0100 +@@ -297,7 +297,7 @@ libusb_la_SOURCES = core.c usbi.h + libusb_la_CFLAGS = -fvisibility=hidden $(AM_CFLAGS) $(LIBUSB_1_0_CFLAGS) + libusb_la_LIBADD = $(LIBUSB_1_0_LIBS) + libusb_la_LDFLAGS = -version-info $(LT_MAJOR):$(LT_REVISION):$(LT_AGE) \ +- -release 0.1 ++ -release 0.1 -Wl,-z -Wl,nodelete + + all: all-am + +-- +1.8.3.1 + diff --git a/0001-Revert-use-atexit-to-call-libusb_exit.patch b/0001-Revert-use-atexit-to-call-libusb_exit.patch new file mode 100644 index 0000000000000000000000000000000000000000..65a2b1ba5370dfb8d377e0f596a5db060f0b0797 --- /dev/null +++ b/0001-Revert-use-atexit-to-call-libusb_exit.patch @@ -0,0 +1,55 @@ +From eb590b4dac00a5188b93e1d6ebdd60b06f9ab3d7 Mon Sep 17 00:00:00 2001 +From: Hans de Goede +Date: Thu, 13 Feb 2014 17:25:27 +0100 +Subject: [libusb-compat PATCH 2/2] Revert "use atexit() to call libusb_exit()" + +The use of atexit() breaks various users of libusb-compat, +see ie: https://bugzilla.redhat.com/show_bug.cgi?id=1003193 + +This reverts commit 0be16b8dd25733d242ae32b57823a9513ec21353. + +Closes libusbx/libusb-compat-0.1#2 + +Signed-off-by: Hans de Goede +--- + libusb/core.c | 10 ---------- + 1 file changed, 10 deletions(-) + +diff --git a/libusb/core.c b/libusb/core.c +index c0ccb1f..2dd1b5f 100644 +--- a/libusb/core.c ++++ b/libusb/core.c +@@ -21,7 +21,6 @@ + #include + #include + #include +-#include + #include + #include + +@@ -137,13 +136,6 @@ static void usbi_log(enum usbi_log_level level, const char *function, + fprintf(stream, "\n"); + } + +-static void _usb_finalize(void) { +- if (ctx) { +- libusb_exit(ctx); +- ctx = NULL; +- } +-} +- + API_EXPORTED void usb_init(void) + { + int r; +@@ -159,8 +151,6 @@ API_EXPORTED void usb_init(void) + /* usb_set_debug can be called before usb_init */ + if (usb_debug) + libusb_set_debug(ctx, 3); +- +- atexit(_usb_finalize); + } + } + +-- +1.8.5.3 + diff --git a/libusb-compat-0.1.5.tar.bz2 b/libusb-compat-0.1.5.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..ccdabedb068ce53ff9a7d60d7c62f6c8f0110f99 Binary files /dev/null and b/libusb-compat-0.1.5.tar.bz2 differ diff --git a/libusb.spec b/libusb.spec new file mode 100644 index 0000000000000000000000000000000000000000..3f1fa15ae0d39aa4b411933c53b0ec299c119be2 --- /dev/null +++ b/libusb.spec @@ -0,0 +1,63 @@ +Name: libusb +Epoch: 1 +Version: 0.1.5 +Release: 15 +Summary: USB Library +License: LGPLv2+ +URL: http://sourceforge.net/projects/libusb/ +Source0: http://downloads.sourceforge.net/libusb/libusb-compat-%{version}.tar.bz2 +Patch0: 0000-Link-with-znodelete-to-disallow-unloading.patch +Patch1: 0001-Revert-use-atexit-to-call-libusb_exit.patch +BuildRequires: gcc libusb1-devel git + +%description +This package provides a library that allows userspace access to USB devices. + +%package devel +Summary: USB Library +Requires: %{name}%{?_isa} = %{epoch}:%{version}-%{release} + +%description devel +This package contains the files needed to develop applications that use libusb-0.1. + +%prep +%autosetup -Sgit -n libusb-compat-%{version} + +%build +%configure --disable-static +%make_build + +%install +%make_install + +%post -p /sbin/ldconfig + +%postun -p /sbin/ldconfig + +%files +%doc AUTHORS COPYING ChangeLog NEWS README +%{_libdir}/libusb-0.1.so.* +%{_libdir}/libusb.la + +%files devel +%{_bindir}/* +%{_includedir}/* +%{_libdir}/pkgconfig/* +%{_libdir}/libusb.so + +%changelog +* Tue Sep 3 2019 openEuler Buildteam - 1:0.1.5-15 +- Type:enhancemnet +- ID:NA +- SUG:restart +- DESCi:openEuler Debranding + +* Wed Aug 21 2019 openEuler Buildteam - 1:0.1.5-14 +- Type:other +- ID:NA +- SUG:NA +- DESC:rename patches + +* Mon Apr 15 2019 openEuler Buildteam - 1:0.1.5-13 +- Package Initialization +