Skip to content

Commit

Permalink
Fix data race on reader disconnect
Browse files Browse the repository at this point in the history
The field .vHandle is used to check the validity of the reader.

It is accessed in write mode in RFUnloadReader() from a thread A while
it is also accessed in read mode in RFWaitForReaderInit() from thread B.

==================
WARNING: ThreadSanitizer: data race (pid=23997)
  Write of size 8 at 0x7b4c000002d8 by thread T5:
    #0 RFUnloadReader PCSC/src/readerfactory.c:1005:20 (pcscd+0xda017) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #1 RFUnInitializeReader PCSC/src/readerfactory.c:1151:8 (pcscd+0xda017)
    #2 removeReader PCSC/src/readerfactory.c:645:2 (pcscd+0xda017)
    #3 _UnrefReader PCSC/src/readerfactory.c:120:3 (pcscd+0xda017)
    #4 RFRemoveReader PCSC/src/readerfactory.c:624:5 (pcscd+0xdd11b) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #5 RFRemoveReader PCSC/src/readerfactory.c:624:5 (pcscd+0xdd11b) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #6 HPRemoveDevice PCSC/src/hotplug_libudev.c:348:4 (pcscd+0xe35af) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #7 HPEstablishUSBNotifications PCSC/src/hotplug_libudev.c:640:6 (pcscd+0xe35af)

  Previous read of size 8 at 0x7b4c000002d8 by main thread:
    #0 RFWaitForReaderInit PCSC/src/readerfactory.c:1426:29 (pcscd+0xddabe) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #1 main PCSC/src/pcscdaemon.c:773:2 (pcscd+0xd8864) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)

  Location is heap block of size 400 at 0x7b4c000001c0 allocated by main thread:
    #0 malloc <null> (pcscd+0x52691) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #1 RFAllocateReaderSpace PCSC/src/readerfactory.c:135:25 (pcscd+0xda3b9) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #2 main PCSC/src/pcscdaemon.c:643:7 (pcscd+0xd85a5) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)

  Thread T5 (tid=24004, running) created by main thread at:
    #0 pthread_create <null> (pcscd+0x53dfd) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #1 ThreadCreate PCSC/src/utils.c:184:8 (pcscd+0xe39bb) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #2 HPRegisterForHotplugEvents PCSC/src/hotplug_libudev.c:763:6 (pcscd+0xe2768) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)
    #3 main PCSC/src/pcscdaemon.c:766:7 (pcscd+0xd8857) (BuildId: db0b27e1c3b409153327b14d9e501205ed34fb6e)

SUMMARY: ThreadSanitizer: data race PCSC/src/readerfactory.c:1005:20 in RFUnloadReader
==================
  • Loading branch information
LudovicRousseau committed Nov 19, 2023
1 parent b680db2 commit 07ce6b4
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion src/readerfactory.h
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,7 @@ THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
FCT_MAP_V3 psFunctions_v3; /**< API V3.0 */
} psFunctions; /**< driver functions */

LPVOID vHandle; /**< Dlopen handle */
_Atomic LPVOID vHandle; /**< Dlopen handle */
int version; /**< IFD Handler version number */
int port; /**< Port ID */
int slot; /**< Current Reader Slot */
Expand Down

0 comments on commit 07ce6b4

Please sign in to comment.