Keep PCSC reader flags when disconnected #2600
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
As discussed in #2415, when
C_GetSlotList()is called beforeC_WaitForSlotEvent(), removing reader is not properly detected. TheC_GetSlotList()callssc_ctx_detect_readers(), which setsreader->flagstoSC_READER_REMOVEDand thereforecard_detect_all()frees some reader resources and setsslot->readerto NULL. However,card_removed()also overwritesreader->flagsfromSC_READER_REMOVEDto 0.OpenSC/src/pkcs11/slot.c
Lines 398 to 411 in ca01aa7
Then,
C_WaitForSlotEvent()callscard_detect_all()again, corresponding slots haveslot->reader = NULLand therefore they are reclaimed viacreate_slot(). The removed reader is set back to the slot, but the event flagsslot->eventsare overwritten with 0, and the event can not be detected fromslot->events(the event flags would be normally changed incard_detect()).OpenSC/src/pkcs11/slot.c
Lines 145 to 161 in ca01aa7
This behaviour can be fixed by keeping reader flags after disconnecting in reader-pcsc.c, then
card_detect_all()does not reclaim the slot with the removed reader and event flags are kept forC_WaitForSlotEvent().Fixes #2415.
Checklist