diff -Nru ccid-1.4.22/debian/changelog ccid-1.4.22/debian/changelog --- ccid-1.4.22/debian/changelog 2016-01-10 05:49:47.000000000 -0800 +++ ccid-1.4.22/debian/changelog 2016-05-09 13:28:26.000000000 -0700 @@ -1,3 +1,11 @@ +ccid (1.4.22-1ubuntu0.1) xenial-proposed; urgency=low + + * debian/patches/close-libusb-on-failure.patch: Make sure + close_libusb_if_needed is called even if no device was opened, + otherwise it triggers a segfault. + + -- Evan Broder Mon, 09 May 2016 12:28:36 -0700 + ccid (1.4.22-1) unstable; urgency=medium * New upstream release diff -Nru ccid-1.4.22/debian/patches/close-libusb-on-failure.patch ccid-1.4.22/debian/patches/close-libusb-on-failure.patch --- ccid-1.4.22/debian/patches/close-libusb-on-failure.patch 1969-12-31 16:00:00.000000000 -0800 +++ ccid-1.4.22/debian/patches/close-libusb-on-failure.patch 2016-05-09 13:28:05.000000000 -0700 @@ -0,0 +1,60 @@ +From: Ludovic Rousseau +Date: Tue, 19 Apr 2016 18:30:06 +0000 (+0200) +Subject: Fix a busy loop consuming 100% of CPU +Origin: https://alioth.debian.org/plugins/scmgit/cgi-bin/gitweb.cgi?p=pcsclite%2FCCID.git;a=commitdiff_plain;h=3c21f452543983f3625a1965ce234074cbda6865 +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=812087 +Bug-Debian: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=821787 +Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/ccid/+bug/1551897 + + +Fix a busy loop consuming 100% of CPU + +If opening a reader fails then we must call close_libusb_if_needed() to +free any libusb resources and stop the libusb hotplug thread. + +The problem as been detected with the Yubico Yubikey NEO U2F+CCID and +the 2 Boardcom devices. These devices are composite USB devices so +loading the CCID driver for a non-CCID interface was calling +libusb_init() but not libusb_exit(). The libusb hotplug thread and other +libusb allocated resources were not stopped and unallocated. On the next +USB plug (even if not CCID) then an endless busy loop is started inside +libusb hotplug. + +Fixes: +- Debian bug #812087 +"pcscd takes 100 % cpu each time I insert a mass storage USB key" +- Debian bug #821787 +"cleanup libusb when open fails" +- Ubuntu bug #1572004 +"pcscd consumes 100% CPU" +- Ubuntu bug #1551897 +"Excessive CPU utilization" + +Thanks a lot to Stefan Bühler for the analysis and patch +https://bugs.debian.org/821787 +--- + +Index: ccid-1.4.22/src/ccid_usb.c +=================================================================== +--- ccid-1.4.22.orig/src/ccid_usb.c ++++ ccid-1.4.22/src/ccid_usb.c +@@ -724,6 +724,9 @@ end: + goto again_libusb; + } + #endif ++ /* failed */ ++ close_libusb_if_needed(); ++ + if (claim_failed) + return STATUS_COMM_ERROR; + DEBUG_INFO1("Device not found?"); +@@ -742,6 +745,9 @@ end1: + /* free bundle list */ + bundleRelease(&plist); + ++ if (return_value != STATUS_SUCCESS) ++ close_libusb_if_needed(); ++ + return return_value; + } /* OpenUSBByName */ + diff -Nru ccid-1.4.22/debian/patches/series ccid-1.4.22/debian/patches/series --- ccid-1.4.22/debian/patches/series 1969-12-31 16:00:00.000000000 -0800 +++ ccid-1.4.22/debian/patches/series 2016-05-09 12:36:11.000000000 -0700 @@ -0,0 +1 @@ +close-libusb-on-failure.patch diff -Nru ccid-1.4.22/debian/patches/test ccid-1.4.22/debian/patches/test --- ccid-1.4.22/debian/patches/test 1969-12-31 16:00:00.000000000 -0800 +++ ccid-1.4.22/debian/patches/test 2016-05-09 12:34:52.000000000 -0700 @@ -0,0 +1,242 @@ +Description: + TODO: Put a short summary on the line above and replace this paragraph + with a longer explanation of this change. Complete the meta-information + with other relevant fields (see below for details). To make it easier, the + information below has been extracted from the changelog. Adjust it or drop + it. + . + ccid (1.4.22-1+broder1) xenial; urgency=medium + . + * Make sure close_libusb_if_needed is called even if no device was + opened, otherwise it triggers a segfault. +Author: Evan Broder + +--- +The information above should follow the Patch Tagging Guidelines, please +checkout http://dep.debian.net/deps/dep3/ to learn about the format. Here +are templates for supplementary fields that you might want to add: + +Origin: , +Bug: +Bug-Debian: https://bugs.debian.org/ +Bug-Ubuntu: https://launchpad.net/bugs/ +Forwarded: +Reviewed-By: +Last-Update: + +--- /dev/null ++++ ccid-1.4.22/compile_commands.json +@@ -0,0 +1,182 @@ ++[ ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/examples -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o scardcontrol-scardcontrol.o /home/evan/src/ccid/ccid-1.4.22/examples/scardcontrol.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/examples", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/examples/scardcontrol.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/examples -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o scardcontrol-PCSCv2part10.o /home/evan/src/ccid/ccid-1.4.22/examples/PCSCv2part10.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/examples", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/examples/PCSCv2part10.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/contrib/Kobil_mIDentity_switch -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -I/usr/include/libusb-1.0 -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o Kobil_mIDentity_switch-Kobil_mIDentity_switch.o /home/evan/src/ccid/ccid-1.4.22/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/contrib/Kobil_mIDentity_switch", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/contrib/Kobil_mIDentity_switch/Kobil_mIDentity_switch.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/contrib/RSA_SecurID -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o RSA_SecurID_getpasswd-RSA_SecurID_getpasswd.o /home/evan/src/ccid/ccid-1.4.22/contrib/RSA_SecurID/RSA_SecurID_getpasswd.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/contrib/RSA_SecurID", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/contrib/RSA_SecurID/RSA_SecurID_getpasswd.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-ccid.o /home/evan/src/ccid/ccid-1.4.22/src/ccid.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/ccid.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-commands.o /home/evan/src/ccid/ccid-1.4.22/src/commands.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/commands.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-ifdhandler.o /home/evan/src/ccid/ccid-1.4.22/src/ifdhandler.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/ifdhandler.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-utils.o /home/evan/src/ccid/ccid-1.4.22/src/utils.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/utils.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-ccid_usb.o /home/evan/src/ccid/ccid-1.4.22/src/ccid_usb.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/ccid_usb.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-tokenparser.o /home/evan/src/ccid/ccid-1.4.22/src/tokenparser.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/tokenparser.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-strlcpy.o /home/evan/src/ccid/ccid-1.4.22/src/strlcpy.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/strlcpy.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccid_la-simclist.o /home/evan/src/ccid/ccid-1.4.22/src/simclist.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/simclist.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o towitoko/.libs/libccid_la-atr.o /home/evan/src/ccid/ccid-1.4.22/src/towitoko/atr.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/towitoko/atr.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o towitoko/.libs/libccid_la-pps.o /home/evan/src/ccid/ccid-1.4.22/src/towitoko/pps.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/towitoko/pps.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o openct/.libs/libccid_la-buffer.o /home/evan/src/ccid/ccid-1.4.22/src/openct/buffer.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/openct/buffer.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o openct/.libs/libccid_la-checksum.o /home/evan/src/ccid/ccid-1.4.22/src/openct/checksum.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/openct/checksum.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -pthread -fvisibility=hidden -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o openct/.libs/libccid_la-proto-t1.o /home/evan/src/ccid/ccid-1.4.22/src/openct/proto-t1.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/openct/proto-t1.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-ccid.o /home/evan/src/ccid/ccid-1.4.22/src/ccid.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/ccid.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-commands.o /home/evan/src/ccid/ccid-1.4.22/src/commands.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/commands.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-ifdhandler.o /home/evan/src/ccid/ccid-1.4.22/src/ifdhandler.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/ifdhandler.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-utils.o /home/evan/src/ccid/ccid-1.4.22/src/utils.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/utils.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-ccid_serial.o /home/evan/src/ccid/ccid-1.4.22/src/ccid_serial.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/ccid_serial.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-tokenparser.o /home/evan/src/ccid/ccid-1.4.22/src/tokenparser.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/tokenparser.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-strlcpy.o /home/evan/src/ccid/ccid-1.4.22/src/strlcpy.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/strlcpy.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o .libs/libccidtwin_la-simclist.o /home/evan/src/ccid/ccid-1.4.22/src/simclist.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/simclist.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o towitoko/.libs/libccidtwin_la-atr.o /home/evan/src/ccid/ccid-1.4.22/src/towitoko/atr.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/towitoko/atr.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o towitoko/.libs/libccidtwin_la-pps.o /home/evan/src/ccid/ccid-1.4.22/src/towitoko/pps.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/towitoko/pps.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o openct/.libs/libccidtwin_la-buffer.o /home/evan/src/ccid/ccid-1.4.22/src/openct/buffer.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/openct/buffer.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o openct/.libs/libccidtwin_la-checksum.o /home/evan/src/ccid/ccid-1.4.22/src/openct/checksum.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/openct/checksum.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -pthread -fvisibility=hidden -DTWIN_SERIAL -DCCID_VERSION=0x01040016 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPIC -o openct/.libs/libccidtwin_la-proto-t1.o /home/evan/src/ccid/ccid-1.4.22/src/openct/proto-t1.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/openct/proto-t1.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o parse-parse.o /home/evan/src/ccid/ccid-1.4.22/src/parse.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/parse.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o parse-debug.o /home/evan/src/ccid/ccid-1.4.22/src/debug.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/debug.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o parse-ccid_usb.o /home/evan/src/ccid/ccid-1.4.22/src/ccid_usb.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/ccid_usb.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o parse-tokenparser.o /home/evan/src/ccid/ccid-1.4.22/src/tokenparser.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/tokenparser.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o parse-strlcpy.o /home/evan/src/ccid/ccid-1.4.22/src/strlcpy.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/strlcpy.c" ++ }, ++ { ++ "command": "cc -c -DHAVE_CONFIG_H -I/home/evan/src/ccid/ccid-1.4.22/src -I/home/evan/src/ccid/ccid-1.4.22 -Wdate-time -D_FORTIFY_SOURCE=2 -pthread -I/usr/include/PCSC -I/usr/include/libusb-1.0 -DSIMCLIST_NO_DUMPRESTORE -g -O2 -fstack-protector-strong -Wformat -Werror=format-security -o parse-simclist.o /home/evan/src/ccid/ccid-1.4.22/src/simclist.c", ++ "directory": "/home/evan/src/ccid/ccid-1.4.22/src", ++ "file": "/home/evan/src/ccid/ccid-1.4.22/src/simclist.c" ++ } ++] +\ No newline at end of file +--- ccid-1.4.22.orig/src/ccid_usb.c ++++ ccid-1.4.22/src/ccid_usb.c +@@ -847,9 +847,14 @@ read_again: + ****************************************************************************/ + status_t CloseUSB(unsigned int reader_index) + { ++ status_t ret = STATUS_SUCCESS; ++ + /* device not opened */ + if (usbDevice[reader_index].dev_handle == NULL) +- return STATUS_UNSUCCESSFUL; ++ { ++ ret = STATUS_UNSUCCESSFUL; ++ goto end; ++ } + + DEBUG_COMM3("Closing USB device: %d/%d", + usbDevice[reader_index].bus_number, +@@ -911,9 +916,10 @@ status_t CloseUSB(unsigned int reader_in + usbDevice[reader_index].dev_handle = NULL; + usbDevice[reader_index].interface = 0; + ++end: + close_libusb_if_needed(); + +- return STATUS_SUCCESS; ++ return ret; + } /* CloseUSB */ + +