diff options
author | NIIBE Yutaka <[email protected]> | 2019-08-21 00:57:52 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2019-08-21 03:01:21 +0000 |
commit | 09d000babb71990ef1b3f42017a67516bb994388 (patch) | |
tree | 3614b7dc47f0443c3e2ef036699e6e906e3c8bd1 | |
parent | scd: Fix switching to another APP. (diff) | |
download | gnupg-09d000babb71990ef1b3f42017a67516bb994388.tar.gz gnupg-09d000babb71990ef1b3f42017a67516bb994388.zip |
scd: Fix resetting CARD_CTX.
* scd/app.c (deallocate_card): Don't call scd_clear_current_app.
(card_reset): Reset ctrl->current_apptype.
* scd/command.c (open_card_with_request): Likewise.
(send_client_notifications): Likewise.
(scd_clear_current_app): Remove.
--
It's too late to call scd_clear_current_app from deallocate_card,
because CARD_CTX is already reset.
Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r-- | scd/app.c | 3 | ||||
-rw-r--r-- | scd/command.c | 17 | ||||
-rw-r--r-- | scd/scdaemon.h | 1 |
3 files changed, 4 insertions, 17 deletions
@@ -339,6 +339,7 @@ card_reset (card_t card, ctrl_t ctrl, int send_reset) else { ctrl->card_ctx = NULL; + ctrl->current_apptype = APPTYPE_NONE; card_unref (card); } @@ -814,8 +815,6 @@ deallocate_card (card_t card) xfree (a); } - scd_clear_current_app (card); - xfree (card->serialno); unlock_card (card); xfree (card); diff --git a/scd/command.c b/scd/command.c index 0096ca96d..d6962a946 100644 --- a/scd/command.c +++ b/scd/command.c @@ -249,6 +249,7 @@ open_card_with_request (ctrl_t ctrl, /* Re-scan USB devices. Release CARD, before the scan. */ /* FIXME: Is a card_unref sufficient or do we need to deallocate? */ ctrl->card_ctx = NULL; + ctrl->current_apptype = APPTYPE_NONE; card_unref (card); err = select_application (ctrl, apptypestr, &ctrl->card_ctx, 1, @@ -1661,6 +1662,7 @@ cmd_restart (assuan_context_t ctx, char *line) if (card) { ctrl->card_ctx = NULL; + ctrl->current_apptype = APPTYPE_NONE; card_unref (card); } if (locked_session && ctrl->server_local == locked_session) @@ -2079,20 +2081,6 @@ scd_command_handler (ctrl_t ctrl, int fd) } -/* Clear the current application info for CARD from all sessions. - * This is used while deallocating a card. */ -void -scd_clear_current_app (card_t card) -{ - struct server_local_s *sl; - - for (sl=session_list; sl; sl = sl->next_session) - { - if (sl->ctrl_backlink->card_ctx == card) - sl->ctrl_backlink->current_apptype = APPTYPE_NONE; - } -} - /* Send a line with status information via assuan and escape all given buffers. The variable elements are pairs of (char *, size_t), terminated with a (NULL, 0). */ @@ -2234,6 +2222,7 @@ send_client_notifications (card_t card, int removal) if (removal) { sl->ctrl_backlink->card_ctx = NULL; + sl->ctrl_backlink->current_apptype = APPTYPE_NONE; sl->card_removed = 1; card_unref_locked (card); } diff --git a/scd/scdaemon.h b/scd/scdaemon.h index b709b1cbc..80c6a8cdf 100644 --- a/scd/scdaemon.h +++ b/scd/scdaemon.h @@ -127,7 +127,6 @@ const char *scd_get_socket_name (void); /*-- command.c --*/ gpg_error_t initialize_module_command (void); int scd_command_handler (ctrl_t, int); -void scd_clear_current_app (card_t card); void send_status_info (ctrl_t ctrl, const char *keyword, ...) GPGRT_ATTR_SENTINEL(1); void send_status_direct (ctrl_t ctrl, const char *keyword, const char *args); |