diff options
author | NIIBE Yutaka <[email protected]> | 2017-07-21 04:26:53 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2017-07-21 04:26:53 +0000 |
commit | d8a55da715ce8447b0686f321fa43d00be34a467 (patch) | |
tree | 8271ebb1100cca60101b251bda3a73a9fa4e900b | |
parent | g10: Don't limit at the frontend side for card capability. (diff) | |
download | gnupg-d8a55da715ce8447b0686f321fa43d00be34a467.tar.gz gnupg-d8a55da715ce8447b0686f321fa43d00be34a467.zip |
scd: Fix SEGV in CCID driver.
* scd/ccid-driver.c (intr_cb): Only kick the loop for removal.
(bulk_in): Don't set POWERED_OFF when interrupt transfer is enabled.
Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to '')
-rw-r--r-- | scd/ccid-driver.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/scd/ccid-driver.c b/scd/ccid-driver.c index ce6133f80..9c22f5188 100644 --- a/scd/ccid-driver.c +++ b/scd/ccid-driver.c @@ -1487,6 +1487,7 @@ intr_cb (struct libusb_transfer *transfer) { DEBUGOUT ("CCID: card removed\n"); handle->powered_off = 1; + scd_kick_the_loop (); } else { @@ -1501,9 +1502,8 @@ intr_cb (struct libusb_transfer *transfer) device_removed: DEBUGOUT ("CCID: device removed\n"); handle->powered_off = 1; + scd_kick_the_loop (); } - - scd_kick_the_loop (); } static void @@ -2043,8 +2043,11 @@ bulk_in (ccid_driver_t handle, unsigned char *buffer, size_t length, * Possibly, it was forcibly suspended and resumed. */ DEBUGOUT ("CCID: card inactive/removed\n"); - handle->powered_off = 1; - scd_kick_the_loop (); + if (handle->transfer == NULL) + { + handle->powered_off = 1; + scd_kick_the_loop (); + } } return rc; |