diff options
author | NIIBE Yutaka <[email protected]> | 2017-11-21 02:52:54 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2017-11-21 03:19:15 +0000 |
commit | 0bb7fd0cab2d53cd0d44b21301b23edfe817e66b (patch) | |
tree | 0ae3b8ebc88c4a790abad40cb0cfcdb14f77b658 /scd/apdu.c | |
parent | Post release updates (diff) | |
download | gnupg-0bb7fd0cab2d53cd0d44b21301b23edfe817e66b.tar.gz gnupg-0bb7fd0cab2d53cd0d44b21301b23edfe817e66b.zip |
scd: Enable card removal check after select_application.
* scd/apdu.c (open_ccid_reader): Fix error handling of ccid_get_atr.
* scd/app.c (select_application): Always kick the loop if new APP.
* scd/ccid-driver.c (ccid_open_usb_reader): Don't setup at open.
(ccid_slot_status): Setup interrupt transfer when !ON_WIRE.
--
We can use the interrupt transfer to be notified about card status
change. In this case, we don't need to issue PC_to_RDR_GetSlotStatus
command. This change improve the setup the notification; it should be
done after registration of APP.
When the setup is done just after opening the USB connection (before
issuing PC_to_RDR_IccPowerOn), a reader might notifies about no card
availability (because of not yet powered on), even though the card is
ready to be powered on.
GnuPG-bug-id: 3508
Signed-off-by: NIIBE Yutaka <[email protected]>
Diffstat (limited to 'scd/apdu.c')
-rw-r--r-- | scd/apdu.c | 9 |
1 files changed, 7 insertions, 2 deletions
diff --git a/scd/apdu.c b/scd/apdu.c index 97624ebad..c50afbde2 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -1497,8 +1497,13 @@ open_ccid_reader (struct dev_list *dl) err = ccid_open_reader (dl->portstr, dl->idx, dl->ccid_table, &slotp->ccid.handle, &slotp->rdrname); if (!err) - err = ccid_get_atr (slotp->ccid.handle, - slotp->atr, sizeof slotp->atr, &slotp->atrlen); + { + err = ccid_get_atr (slotp->ccid.handle, + slotp->atr, sizeof slotp->atr, &slotp->atrlen); + if (err) + ccid_close_reader (slotp->ccid.handle); + } + if (err) { slotp->used = 0; |