Bug 1 - Potential data race in link state policy when the IPCP is destroyed
Summary: Potential data race in link state policy when the IPCP is destroyed
Status: CONFIRMED
Alias: None
Product: Ouroboros
Classification: Unclassified
Component: ipcpd-unicast (show other bugs)
Version: 0.15
Hardware: PC All
: --- minor
Assignee: Dimitri Staessens
URL:
Depends on:
Blocks:
 
Reported: 2019-07-26 12:45 CEST by Dimitri Staessens
Modified: 2019-07-26 12:45 CEST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Dimitri Staessens 2019-07-26 12:45:31 CEST
When destroying the IPCP, sometimes there is a data race. Probably there are threads running while the mutexes are destroyed.

WARNING: ThreadSanitizer: data race (pid=1988)
WARNING: ThreadSanitizer: data race (pid=1901)
  Write of size 8 at 0x7b0800006018 by thread T19  Write of size 8 at 0x7b080001a018 by thread T19 (mutexes: (mutexes: read M582793278524728976 read M582793550640842384)):
:
    #0 free /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:706 (libtsan.so.0+0x2c91d)
    #0 free /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:706 (libtsan.so.0+0x2c91d)
    #1 lsdb_del_nb /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:367 (ipcpd-unicast+0x21b52)
    #1 lsdb_del_nb /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:367 (ipcpd-unicast+0x21b52)
    #2 handle_event /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:805 (ipcpd-unicast+0x239a8)
    #2 handle_event /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:805 (ipcpd-unicast+0x239a8)
    #3 notifier_event /home/dstaesse/git/ouroboros/src/lib/notifier.c:83 (libouroboros-common.so+0xd262)
    #3 notifier_event /home/dstaesse/git/ouroboros/src/lib/notifier.c:83 (libouroboros-common.so+0xd262)
    #4 handle_event /home/dstaesse/git/ouroboros/src/ipcpd/unicast/connmgr.c:216 (ipcpd-unicast+0x56b7)
    #4 handle_event /home/dstaesse/git/ouroboros/src/ipcpd/unicast/connmgr.c:216 (ipcpd-unicast+0x56b7)
    #5 notifier_event /home/dstaesse/git/ouroboros/src/lib/notifier.c:83 (libouroboros-common.so+0xd262)
    #5 notifier_event /home/dstaesse/git/ouroboros/src/lib/notifier.c:83 (libouroboros-common.so+0xd262)
    #6 packet_reader /home/dstaesse/git/ouroboros/src/ipcpd/unicast/psched.c:95 (ipcpd-unicast+0x1ef15)
    #6 packet_reader /home/dstaesse/git/ouroboros/src/ipcpd/unicast/psched.c:95 (ipcpd-unicast+0x1ef15)


  Previous read of size 4 at 0x7b080001a018 by thread T17 (mutexes:  Previous read of size 4 at 0x7b0800006018 by thread T17 write M586447685137998024 (mutexes:) write M587573585044840776:
):
    #0 nbr_to_fd /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:387 (ipcpd-unicast+0x21c43)
    #0 nbr_to_fd /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:387 (ipcpd-unicast+0x21c43)
    #1 calculate_pff /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:421 (ipcpd-unicast+0x21dfe)
    #1 calculate_pff /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:421 (ipcpd-unicast+0x21dfe)
    #2 periodic_recalc_pff /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:549 (ipcpd-unicast+0x2266e)
    #2 periodic_recalc_pff /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:549 (ipcpd-unicast+0x2266e)


  Mutex M582793550640842384 is already destroyed.

  Mutex M582793278524728976 is already destroyed.

  Mutex M586447685137998024 is already destroyed.

  Mutex M587573585044840776 is already destroyed.

  Thread T19 (tid=1921, running) created by thread T4  Thread T19 at: (tid=2032, running) created by thread T4
 at:
    #0 pthread_create /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:964 (libtsan.so.0+0x2d683)
    #0 pthread_create /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:964 (libtsan.so.0+0x2d683)
    #1 psched_create /home/dstaesse/git/ouroboros/src/ipcpd/unicast/psched.c:156 (ipcpd-unicast+0x1f324)
    #1 psched_create /home/dstaesse/git/ouroboros/src/ipcpd/unicast/psched.c:156 (ipcpd-unicast+0x1f324)
    #2 dt_start /home/dstaesse/git/ouroboros/src/ipcpd/unicast/dt.c:765 (ipcpd-unicast+0x16eca)
    #2 dt_start /home/dstaesse/git/ouroboros/src/ipcpd/unicast/dt.c:765 (ipcpd-unicast+0x16eca)
    #3 unicast_ipcp_bootstrap /home/dstaesse/git/ouroboros/src/ipcpd/unicast/main.c:255 (ipcpd-unicast+0x1ddc4)
    #3 unicast_ipcp_enroll /home/dstaesse/git/ouroboros/src/ipcpd/unicast/main.c:210 (ipcpd-unicast+0x1d90b)
    #4 mainloop /home/dstaesse/git/ouroboros/src/ipcpd/ipcp.c:298 (ipcpd-unicast+0x2881c)
    #4 mainloop /home/dstaesse/git/ouroboros/src/ipcpd/ipcp.c:320 (ipcpd-unicast+0x28a92)


  Thread T17 (tid=1919, running) created by thread T4  Thread T17 at: (tid=2030, running) created by thread T4
 at:
    #0 pthread_create /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:964 (libtsan.so.0+0x2d683)
    #0 pthread_create /build/gcc/src/gcc/libsanitizer/tsan/tsan_interceptors.cc:964 (libtsan.so.0+0x2d683)
    #1 link_state_routing_i_create /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:855 (ipcpd-unicast+0x23f6b)
    #1 link_state_routing_i_create /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:855 (ipcpd-unicast+0x23f6b)
    #2 routing_i_create /home/dstaesse/git/ouroboros/src/ipcpd/unicast/routing.c:48 (ipcpd-unicast+0x1ec58)
    #2 routing_i_create /home/dstaesse/git/ouroboros/src/ipcpd/unicast/routing.c:48 (ipcpd-unicast+0x1ec58)
    #3 dt_init /home/dstaesse/git/ouroboros/src/ipcpd/unicast/dt.c:678 (ipcpd-unicast+0x16894)
    #3 dt_init /home/dstaesse/git/ouroboros/src/ipcpd/unicast/dt.c:678 (ipcpd-unicast+0x16894)
    #4 initialize_components /home/dstaesse/git/ouroboros/src/ipcpd/unicast/main.c:84 (ipcpd-unicast+0x1d149)
    #4 initialize_components /home/dstaesse/git/ouroboros/src/ipcpd/unicast/main.c:84 (ipcpd-unicast+0x1d149)
    #5 unicast_ipcp_bootstrap /home/dstaesse/git/ouroboros/src/ipcpd/unicast/main.c:250 (ipcpd-unicast+0x1dd30)
    #5 unicast_ipcp_enroll /home/dstaesse/git/ouroboros/src/ipcpd/unicast/main.c:205 (ipcpd-unicast+0x1d877)
    #6 mainloop /home/dstaesse/git/ouroboros/src/ipcpd/ipcp.c:298 (ipcpd-unicast+0x2881c)
    #6 mainloop /home/dstaesse/git/ouroboros/src/ipcpd/ipcp.c:320 (ipcpd-unicast+0x28a92)


SUMMARY: ThreadSanitizer: data race /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:367 in lsdb_del_nb
SUMMARY: ThreadSanitizer: data race /home/dstaesse/git/ouroboros/src/ipcpd/unicast/pol/link_state.c:367 in lsdb_del_nb