scd: Fix a race condition for new_reader_slot.
authorNIIBE Yutaka <gniibe@fsij.org>
Thu, 29 Dec 2016 01:07:43 +0000 (10:07 +0900)
committerNIIBE Yutaka <gniibe@fsij.org>
Thu, 29 Dec 2016 01:07:43 +0000 (10:07 +0900)
commitc48cf7e32ffa02ebdf00265543344c611bef0431
tree3c019efcce4b10bdb9077a76e7fd6bbfde683581
parent4cc9fc5eb9bd91d943c185d59da4a2b4cb885ee6
scd: Fix a race condition for new_reader_slot.

* scd/apdu.c (reader_table_lock, apdu_init): New.
(new_reader_slot): Serialize by reader_table_lock.
* scd/app.c (lock_app, unlock_app, app_new_register): Fix error code
usage.
(initialize_module_command): Call apdu_init.
* scd/scdaemon.c (main): Handle error for initialize_module_command.

--

This is a long standing bug.  There are two different things; The
serialization of allocating a new SLOT, and the serialization of using
the SLOT.  The latter was implemented in new_reader_slot by lock_slot.
However, the former was not done.  Thus, there was a possible race where
a same SLOT is allocated to multiple threads.

Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
scd/apdu.c
scd/apdu.h
scd/app.c
scd/scdaemon.c
scd/scdaemon.h