From d4e5979c630c2960cf1fd5796f1060419e71cb04 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 26 Mar 2021 11:24:30 +0900 Subject: scd: Fix PC/SC error handling at apdu_dev_list_start. * scd/apdu.c (PCSC_E_NO_READERS_AVAILABLE): Add. (pcsc_error_to_sw): Handle PCSC_E_NO_READERS_AVAILABLE. (apdu_dev_list_start): Return error correctly. -- GnuPG-bug-id: 4864 Signed-off-by: NIIBE Yutaka --- scd/apdu.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scd/apdu.c b/scd/apdu.c index 1ca63e41f..bc34c2048 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -230,6 +230,7 @@ static npth_mutex_t reader_table_lock; #define PCSC_E_READER_UNAVAILABLE 0x80100017 #define PCSC_E_NO_SERVICE 0x8010001D #define PCSC_E_SERVICE_STOPPED 0x8010001E +#define PCSC_E_NO_READERS_AVAILABLE 0x8010002E #define PCSC_W_RESET_CARD 0x80100068 #define PCSC_W_REMOVED_CARD 0x80100069 @@ -646,6 +647,7 @@ pcsc_error_to_sw (long ec) case PCSC_E_NO_SERVICE: case PCSC_E_SERVICE_STOPPED: case PCSC_E_UNKNOWN_READER: rc = SW_HOST_NO_READER; break; + case PCSC_E_NO_READERS_AVAILABLE:rc = SW_HOST_NO_READER; break; case PCSC_E_SHARING_VIOLATION: rc = SW_HOST_LOCKING_FAILED; break; case PCSC_E_NO_SMARTCARD: rc = SW_HOST_NO_CARD; break; case PCSC_W_REMOVED_CARD: rc = SW_HOST_NO_CARD; break; @@ -2034,7 +2036,7 @@ apdu_dev_list_start (const char *portstr, struct dev_list **l_p) xfree (p); close_pcsc_reader (0); npth_mutex_unlock (&reader_table_lock); - return gpg_error (GPG_ERR_NO_SERVICE); + return iso7816_map_sw (pcsc_error_to_sw (r)); } dl->table = p; -- cgit v1.2.3