Uploaded image for project: 'Qpid Dispatch'
  1. Qpid Dispatch
  2. DISPATCH-2320

TSAN: alloc sequence is non-atomic

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Open
    • Major
    • Resolution: Unresolved
    • 1.18.0
    • None
    • Router Node
    • None

    Description

      While the stack below appears to be a double-free of a qd_message_t it is not (see qd_python_send - the message is not shared with a link).  The reason TSAN complains is that the sequence number contained in the memory pool item is not atomic.  In the trace below the message was freed to the pool then reclaimed for use by qd_python_send.  The fact that the sequence # was not synchronized is causing TSAN pain.

      Fix: make the sequence an atomic counter

       

      : WARNING: ThreadSanitizer: data race (pid=1889)                                                                                                                             
      :   Write of size 8 at 0x7b400000af00 by thread T2 (mutexes: write M13):                                                                                                     
      :     #0 qd_dealloc /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/alloc_pool.c:470 (qdrouterd+0x44b652)                                                    
      :     #1 free_qd_message_t /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:93 (qdrouterd+0x46e049)                                                 
      :     #2 qd_message_free /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:1128 (qdrouterd+0x46e049)                                                 
      :     #3 qd_python_send /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/python_embedded.c:798 (qdrouterd+0x4830a0)                                           
      :     #4 method_vectorcall_VARARGS <null> (libpython3.10.so.1.0+0x12ca80)                                                                                                    
      :     #5 qd_router_timer_handler /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_node.c:1622 (qdrouterd+0x4cf2dc)                                     
      :     #6 qd_timer_visit /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/timer.c:320 (qdrouterd+0x4dd7cf)                                                     
      :     #7 handle /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1026 (qdrouterd+0x4d8a96)                                                           
      :     #8 thread_run /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1141 (qdrouterd+0x4daeb7)                                                       
      :     #9 _thread_init /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/posix/threading.c:172 (qdrouterd+0x4812dd)                                             
      :                                                                                                                                                                            
      :   Previous read of size 8 at 0x7b400000af00 by main thread:                                                                                                                
      :     #0 qd_alloc_sequence /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/alloc_pool.c:514 (qdrouterd+0x44bef0)                                             
      :     #1 qd_alloc_deref_safe_ptr /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/include/qpid/dispatch/alloc_pool.h:102 (qdrouterd+0x45c033)                     
      :     #2 cleanup_link /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:350 (qdrouterd+0x45c033)                                                   
      :     #3 qd_link_free /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:997 (qdrouterd+0x45c1c9)                                                   
      :     #4 qd_link_free /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:988 (qdrouterd+0x45dd32)                                                   
      :     #5 AMQP_link_detach_handler /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_node.c:1158 (qdrouterd+0x4d38f1)                                    
      :     #6 AMQP_link_detach_handler /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_node.c:1107 (qdrouterd+0x4d38f1)                                    
      :     #7 close_links /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:328 (qdrouterd+0x45c2b9)                                                    
      :     #8 qd_container_handle_event /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/container.c:525 (qdrouterd+0x45f003)                                      
      :     #9 handle /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1116 (qdrouterd+0x4d8b01)                                                           
      :     #10 thread_run /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1141 (qdrouterd+0x4dadc4)                                                      
      :     #11 qd_server_run /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/server.c:1535 (qdrouterd+0x4dba1c)                                                   
      :     #12 main_process /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/router/src/main.c:115 (qdrouterd+0x426e5c)                                                
      :     #13 main /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/router/src/main.c:369 (qdrouterd+0x42626c)                                                        
      :                                                                                                                                                                            
      :   Location is heap block of size 256 at 0x7b400000af00 allocated by thread T1:                                                                                             
      :     #0 posix_memalign <null> (libtsan.so.0+0x32a23)                                                                                                                        
      :     #1 qd_alloc /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/alloc_pool.c:391 (qdrouterd+0x44ad29)                                                      
      :     #2 new_qd_message_t /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:93 (qdrouterd+0x470e7d)                                                  
      :     #3 qd_message_copy /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/message.c:1136 (qdrouterd+0x470e7d)                                                 
      :     #4 qdr_forward_new_delivery_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/forwarder.c:153 (qdrouterd+0x4a64d7)                        
      :     #5 qdr_forward_multicast_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/forwarder.c:497 (qdrouterd+0x4a9155)                           
      :     #6 qdr_forward_message_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/forwarder.c:1122 (qdrouterd+0x4aab70)                            
      :     #7 qdr_in_process_send_to_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/transfer.c:924 (qdrouterd+0x4bc7dd)                           
      :     #8 qdr_send_to_CT /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/transfer.c:899 (qdrouterd+0x4bc943)                                      
      :     #9 router_core_thread /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/router_core/router_core_thread.c:236 (qdrouterd+0x4b53fa)                        
      :     #10 _thread_init /home/runner/work/qpid-dispatch/qpid-dispatch/qpid-dispatch/src/posix/threading.c:172 (qdrouterd+0x4812dd)

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              kgiusti Ken Giusti
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated: