Skip to content

ASAN heap-use-after-free in HttpVCTable::remove_entry #5807

@zwoop

Description

@zwoop

As of recently I get

==5918==ERROR: AddressSanitizer: heap-use-after-free on address 0x6190000fca50 at pc 0x00000069683d bp 0x2b4311cee210 sp 0x2b4311cee200
READ of size 8 at 0x6190000fca50 thread T6 ([ET_NET 4])
    #0 0x69683c in HttpVCTable::remove_entry(HttpVCTableEntry*) /usr/local/src/trafficserver/proxy/http/HttpSM.cc:197
    #1 0x6de279 in HttpVCTable::cleanup_entry(HttpVCTableEntry*) /usr/local/src/trafficserver/proxy/http/HttpSM.cc:249
    #2 0x6de279 in HttpVCTable::cleanup_all() /usr/local/src/trafficserver/proxy/http/HttpSM.cc:257
    #3 0x6de279 in HttpSM::kill_this() /usr/local/src/trafficserver/proxy/http/HttpSM.cc:6815
    #4 0x6dfa97 in HttpSM::main_handler(int, void*) /usr/local/src/trafficserver/proxy/http/HttpSM.cc:2603
    #5 0x7f97cb in Continuation::handleEvent(int, void*) /usr/local/src/trafficserver/iocore/eventsystem/I_Continuation.h:190
    #6 0x7f97cb in HttpTunnel::main_handler(int, void*) /usr/local/src/trafficserver/proxy/http/HttpTunnel.cc:1575
    #7 0xdfde70 in Continuation::handleEvent(int, void*) /usr/local/src/trafficserver/iocore/eventsystem/I_Continuation.h:190
    #8 0xdfde70 in read_signal_and_update /usr/local/src/trafficserver/iocore/net/UnixNetVConnection.cc:83
    #9 0xdfde70 in read_signal_done /usr/local/src/trafficserver/iocore/net/UnixNetVConnection.cc:144
    #10 0xe10189 in read_from_net /usr/local/src/trafficserver/iocore/net/UnixNetVConnection.cc:279
    #11 0xdc9caa in NetHandler::process_ready_list() /usr/local/src/trafficserver/iocore/net/UnixNet.cc:396
    #12 0xdca8b8 in NetHandler::waitForActivity(long) /usr/local/src/trafficserver/iocore/net/UnixNet.cc:529
    #13 0xf26031 in EThread::execute_regular() /usr/local/src/trafficserver/iocore/eventsystem/UnixEThread.cc:277
    #14 0xf269c1 in EThread::execute() /usr/local/src/trafficserver/iocore/eventsystem/UnixEThread.cc:338
    #15 0xf20c6a in spawn_thread_internal /usr/local/src/trafficserver/iocore/eventsystem/Thread.cc:92
    #16 0x2b430b989dd4 in start_thread (/lib64/libpthread.so.0+0x7dd4)
    #17 0x2b430c6beeac in __clone (/lib64/libc.so.6+0xfdeac)

0x6190000fca50 is located 464 bytes inside of 1104-byte region [0x6190000fc880,0x6190000fccd0)
freed by thread T6 ([ET_NET 4]) here:
    #0 0x2b43090d3508 in __interceptor_free (/lib64/libasan.so.4+0xde508)
    #1 0x2b430a0c85dc in ink_freelist_free /usr/local/src/trafficserver/src/tscore/ink_queue.cc:277
    #2 0xdc938d in NetHandler::free_netvc(UnixNetVConnection*) /usr/local/src/trafficserver/iocore/net/UnixNet.cc:348
    #3 0xd629bd in SSLNetVConnection::do_io_close(int) /usr/local/src/trafficserver/iocore/net/SSLNetVConnection.cc:882
    #4 0x6433d0 in Http1ClientSession::do_io_close(int) /usr/local/src/trafficserver/proxy/http/Http1ClientSession.cc:283
    #5 0x7f05d6 in HttpTunnel::chain_abort_all(HttpTunnelProducer*) /usr/local/src/trafficserver/proxy/http/HttpTunnel.cc:1375
    #6 0x698b02 in HttpSM::tunnel_handler_server(int, HttpTunnelProducer*) /usr/local/src/trafficserver/proxy/http/HttpSM.cc:2954
    #7 0x7efab7 in HttpTunnel::producer_handler(int, HttpTunnelProducer*) /usr/local/src/trafficserver/proxy/http/HttpTunnel.cc:1168
    #8 0x7f9581 in HttpTunnel::main_handler(int, void*) /usr/local/src/trafficserver/proxy/http/HttpTunnel.cc:1556
    #9 0xdfde70 in Continuation::handleEvent(int, void*) /usr/local/src/trafficserver/iocore/eventsystem/I_Continuation.h:190
    #10 0xdfde70 in read_signal_and_update /usr/local/src/trafficserver/iocore/net/UnixNetVConnection.cc:83
    #11 0xdfde70 in read_signal_done /usr/local/src/trafficserver/iocore/net/UnixNetVConnection.cc:144
    #12 0xe10189 in read_from_net /usr/local/src/trafficserver/iocore/net/UnixNetVConnection.cc:279
    #13 0xdc9caa in NetHandler::process_ready_list() /usr/local/src/trafficserver/iocore/net/UnixNet.cc:396
    #14 0xdca8b8 in NetHandler::waitForActivity(long) /usr/local/src/trafficserver/iocore/net/UnixNet.cc:529
    #15 0xf26031 in EThread::execute_regular() /usr/local/src/trafficserver/iocore/eventsystem/UnixEThread.cc:277
    #16 0xf269c1 in EThread::execute() /usr/local/src/trafficserver/iocore/eventsystem/UnixEThread.cc:338
    #17 0xf20c6a in spawn_thread_internal /usr/local/src/trafficserver/iocore/eventsystem/Thread.cc:92
    #18 0x2b430b989dd4 in start_thread (/lib64/libpthread.so.0+0x7dd4)

previously allocated by thread T23 ([ACCEPT 0:443]) here:
    #0 0x2b43090d44f0 in posix_memalign (/lib64/libasan.so.4+0xdf4f0)
    #1 0x2b430a0c64af in ats_memalign /usr/local/src/trafficserver/src/tscore/ink_memory.cc:102
    #2 0x2b430a0c853e in ink_freelist_new /usr/local/src/trafficserver/src/tscore/ink_queue.cc:187
    #3 0xd5317f in ClassAllocator<SSLNetVConnection>::alloc() ../../include/tscore/Allocator.h:131
    #4 0xd5317f in SSLNetProcessor::allocate_vc(EThread*) /usr/local/src/trafficserver/iocore/net/SSLNetProcessor.cc:106
    #5 0xde4580 in NetAccept::do_blocking_accept(EThread*) /usr/local/src/trafficserver/iocore/net/UnixNetAccept.cc:310
    #6 0xde6bca in NetAccept::acceptLoopEvent(int, Event*) /usr/local/src/trafficserver/iocore/net/UnixNetAccept.cc:519
    #7 0xf2661b in Continuation::handleEvent(int, void*) /usr/local/src/trafficserver/iocore/eventsystem/I_Continuation.h:190
    #8 0xf2661b in EThread::execute() /usr/local/src/trafficserver/iocore/eventsystem/UnixEThread.cc:322
    #9 0xf20c6a in spawn_thread_internal /usr/local/src/trafficserver/iocore/eventsystem/Thread.cc:92
    #10 0x2b430b989dd4 in start_thread (/lib64/libpthread.so.0+0x7dd4)

Thread T6 ([ET_NET 4]) created by T0 ([TS_MAIN]) here:
    #0 0x2b430902ca7f in pthread_create (/lib64/libasan.so.4+0x37a7f)
    #1 0xf21ede in ink_thread_create ../../include/tscore/ink_thread.h:159
    #2 0xf21ede in Thread::start(char const*, void*, unsigned long, std::function<void ()> const&) /usr/local/src/trafficserver/iocore/eventsystem/Thread.cc:109
    #3 0xf2fe7f in EventProcessor::spawn_event_threads(int, int, unsigned long) /usr/local/src/trafficserver/iocore/eventsystem/UnixEventProcessor.cc:382
    #4 0xf30f05 in EventProcessor::start(int, unsigned long) /usr/local/src/trafficserver/iocore/eventsystem/UnixEventProcessor.cc:448
    #5 0x4be9b6 in main traffic_server/traffic_server.cc:1838
    #6 0x2b430c5e33d4 in __libc_start_main (/lib64/libc.so.6+0x223d4)

Thread T23 ([ACCEPT 0:443]) created by T0 ([TS_MAIN]) here:
    #0 0x2b430902ca7f in pthread_create (/lib64/libasan.so.4+0x37a7f)
    #1 0xf21ede in ink_thread_create ../../include/tscore/ink_thread.h:159
    #2 0xf21ede in Thread::start(char const*, void*, unsigned long, std::function<void ()> const&) /usr/local/src/trafficserver/iocore/eventsystem/Thread.cc:109
    #3 0xf321bf in EventProcessor::spawn_thread(Continuation*, char const*, unsigned long) /usr/local/src/trafficserver/iocore/eventsystem/UnixEventProcessor.cc:490
    #4 0xdde369 in NetAccept::init_accept_loop() /usr/local/src/trafficserver/iocore/net/UnixNetAccept.cc:170
    #5 0xdef7c2 in UnixNetProcessor::accept_internal(Continuation*, int, NetProcessor::AcceptOptions const&) /usr/local/src/trafficserver/iocore/net/UnixNetProcessor.cc:141
    #6 0xdeb511 in NetProcessor::main_accept(Continuation*, int, NetProcessor::AcceptOptions const&) /usr/local/src/trafficserver/iocore/net/UnixNetProcessor.cc:86
    #7 0x68af0b in start_HttpProxyServer() /usr/local/src/trafficserver/proxy/http/HttpProxyServerMain.cc:338
    #8 0x4c057e in main traffic_server/traffic_server.cc:1969
    #9 0x2b430c5e33d4 in __libc_start_main (/lib64/libc.so.6+0x223d4)

SUMMARY: AddressSanitizer: heap-use-after-free /usr/local/src/trafficserver/proxy/http/HttpSM.cc:197 in HttpVCTable::remove_entry(HttpVCTableEntry*)
Shadow bytes around the buggy address:
  0x0c32800178f0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c3280017900: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c3280017910: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c3280017920: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c3280017930: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x0c3280017940: fd fd fd fd fd fd fd fd fd fd[fd]fd fd fd fd fd
  0x0c3280017950: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c3280017960: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c3280017970: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c3280017980: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x0c3280017990: fd fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==5918==ABORTING

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions