scd: Fix "Conflicting usage" bug.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 3 Dec 2015 02:26:24 +0000 (11:26 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 3 Dec 2015 02:26:24 +0000 (11:26 +0900)
commitf42c50dbf00c2e6298ca6830cbe6d36805fa54a3
tree1526b6169578ab61d7fc6b945cae265b5b51854f
parent11b2691eddc42e91651e4f95dd2731255a3e9211
scd: Fix "Conflicting usage" bug.

* scd/apdu.c (apdu_close_reader): Call CLOSE_READER method even if we
  got an error from apdu_disconnect.
* scd/app-common.h (no_reuse): Remove.
* scd/app.c (application_notify_card_reset): Deallocate APP here.
(select_application, release_application): Don't use NO_REUSE.

--

Reproducible scenario: Invoke gpg --card-edit session from a terminal.
Invoke another gpg --card-edit session from another.  Remove a token.
Insert a token again.  Type RET on both terminals.  One of terminal
answers "Conflicting usage".

Perhaps, having NO_REUSE field was to avoid race conditions.  Now,
APP can be safely deallocated by application_notify_card_reset.

Thanks to the2nd.
scd/apdu.c
scd/app-common.h
scd/app.c