Bryan Call created TS-3920:
------------------------------
Summary: MIMEHdr heap-use-after-free
Key: TS-3920
URL: https://issues.apache.org/jira/browse/TS-3920
Project: Traffic Server
Issue Type: Bug
Components: HTTP
Reporter: Bryan Call
{code}
==24576==ERROR: AddressSanitizer: heap-use-after-free on address 0x62501880600c
at pc 0x81aaea bp 0x2abfc0de7300 sp 0x2abfc0de72f8
READ of size 10 at 0x62501880600c thread T19 ([ET_NET 18])
#0 0x81aae9 in HdrHeap::duplicate_str(char const*, int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/HdrHeap.cc:320
#1 0x82faf7 in mime_field_value_set(HdrHeap*, MIMEHdrImpl*, MIMEField*,
char const*, int, bool)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/MIME.cc:2076
#2 0x5c2933 in MIMEField::value_set(HdrHeap*, MIMEHdrImpl*, char const*,
int) /home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/MIME.h:810
#3 0x7138b5 in MIMEHdr::field_value_set(MIMEField*, char const*, int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/MIME.h:1296
#4 0x6c74fb in HttpTransact::ModifyRequest(HttpTransact::State*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpTransact.cc:1151
#5 0x69e65f in HttpSM::call_transact_and_set_next_state(void
(*)(HttpTransact::State*))
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpSM.cc:6881
#6 0x66bb6c in HttpSM::state_read_client_request_header(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpSM.cc:766
#7 0x679549 in HttpSM::main_handler(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpSM.cc:2542
#8 0x531046 in Continuation::handleEvent(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/I_Continuation.h:146
#9 0x5a7f22 in PluginVC::process_read_side(bool)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/PluginVC.cc:663
#10 0x5a6d02 in PluginVC::process_write_side(bool)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/PluginVC.cc:555
#11 0x5a401d in PluginVC::main_handler(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/PluginVC.cc:208
#12 0x531046 in Continuation::handleEvent(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/I_Continuation.h:146
#13 0xa40450 in EThread::process_event(Event*, int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/UnixEThread.cc:128
#14 0xa40903 in EThread::execute()
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/UnixEThread.cc:179
#15 0xa3ea29 in spawn_thread_internal
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/Thread.cc:86
#16 0x2abfb58f0df4 in start_thread (/lib64/libpthread.so.0+0x7df4)
#17 0x2abfb66811ac in __clone (/lib64/libc.so.6+0xf61ac)
0x62501880600c is located 12 bytes inside of 4096-byte region
[0x625018806000,0x625018807000)
freed by thread T19 ([ET_NET 18]) here:
#0 0x2abfb2c0b1d7 in __interceptor_free
../../.././libsanitizer/asan/asan_malloc_linux.cc:62
#1 0x2abfb3b063b2 in ats_memalign_free
/home/bcall/ytrafficserver-6.0.x/trafficserver/lib/ts/ink_memory.cc:139
#2 0x2abfb3b06f60 in ink_freelist_free
/home/bcall/ytrafficserver-6.0.x/trafficserver/lib/ts/ink_queue.cc:292
#3 0x4fae6e in Allocator::free_void(void*) ../../lib/ts/Allocator.h:68
#4 0x4fb85f in IOBufferData::dealloc()
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/P_IOBuffer.h:310
#5 0x4fb98b in IOBufferData::free()
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/P_IOBuffer.h:323
#6 0x742f42 in Ptr<RefCountObj>::operator=(RefCountObj*)
../../lib/ts/Ptr.h:366
#7 0x81b07c in HdrHeap::coalesce_str_heaps(int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/HdrHeap.cc:384
#8 0x81a900 in HdrHeap::allocate_str(int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/HdrHeap.cc:288
#9 0x81aa5f in HdrHeap::duplicate_str(char const*, int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/HdrHeap.cc:318
#10 0x834534 in mime_str_u16_set(HdrHeap*, char const*, int, char const**,
unsigned short*, bool)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/MIME.cc:2808
#11 0x82ce4d in mime_field_name_set(HdrHeap*, MIMEHdrImpl*, MIMEField*,
short, char const*, int, bool)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/MIME.cc:1712
#12 0x5c2aa3 in MIMEHdr::field_create(char const*, int)
../../proxy/hdrs/MIME.h:1083
#13 0x6c7491 in HttpTransact::ModifyRequest(HttpTransact::State*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpTransact.cc:1148
#14 0x69e65f in HttpSM::call_transact_and_set_next_state(void
(*)(HttpTransact::State*))
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpSM.cc:6881
#15 0x66bb6c in HttpSM::state_read_client_request_header(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpSM.cc:766
#16 0x679549 in HttpSM::main_handler(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/http/HttpSM.cc:2542
#17 0x531046 in Continuation::handleEvent(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/I_Continuation.h:146
#18 0x5a7f22 in PluginVC::process_read_side(bool)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/PluginVC.cc:663
#19 0x5a6d02 in PluginVC::process_write_side(bool)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/PluginVC.cc:555
#20 0x5a401d in PluginVC::main_handler(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/PluginVC.cc:208
#21 0x531046 in Continuation::handleEvent(int, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/I_Continuation.h:146
#22 0xa40450 in EThread::process_event(Event*, int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/UnixEThread.cc:128
#23 0xa40903 in EThread::execute()
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/UnixEThread.cc:179
#24 0xa3ea29 in spawn_thread_internal
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/Thread.cc:86
#25 0x2abfb58f0df4 in start_thread (/lib64/libpthread.so.0+0x7df4)
previously allocated by thread T19 ([ET_NET 18]) here:
#0 0x2abfb2c0b94b in __interceptor_posix_memalign
../../.././libsanitizer/asan/asan_malloc_linux.cc:130
#1 0x2abfb3b06233 in ats_memalign
/home/bcall/ytrafficserver-6.0.x/trafficserver/lib/ts/ink_memory.cc:100
#2 0x2abfb3b06e0d in ink_freelist_new
/home/bcall/ytrafficserver-6.0.x/trafficserver/lib/ts/ink_queue.cc:239
#3 0x530647 in Allocator::alloc_void() ../../lib/ts/Allocator.h:61
#4 0x531420 in IOBufferData::alloc(long, AllocType)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/P_IOBuffer.h:284
#5 0x53123c in new_IOBufferData_internal(char const*, long, AllocType)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/P_IOBuffer.h:255
#6 0x53162e in IOBufferBlock::alloc(long)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/P_IOBuffer.h:399
#7 0x531e6d in MIOBuffer::alloc(long)
../iocore/eventsystem/P_IOBuffer.h:1096
#8 0x531c8c in new_MIOBuffer_internal(char const*, long)
../iocore/eventsystem/P_IOBuffer.h:763
#9 0x530a54 in MIOBuffer_tracker::operator()(long)
../iocore/eventsystem/I_IOBuffer.h:1253
#10 0x532da5 in FetchSM::init_comm() FetchSM.h:62
#11 0x52efd3 in FetchSM::ext_init(Continuation*, char const*, char const*,
char const*, sockaddr const*, int)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/FetchSM.cc:536
#12 0x57c48a in TSFetchCreate
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/InkAPI.cc:7365
#13 0x762626 in spdy_fetcher_launch
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/spdy/SpdyCallbacks.cc:190
#14 0x7631e4 in spdy_process_syn_stream_frame
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/spdy/SpdyCallbacks.cc:297
#15 0x7634ac in spdy_on_ctrl_recv_callback(spdylay_session*,
spdylay_frame_type, spdylay_frame*, void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/spdy/SpdyCallbacks.cc:317
#16 0xa463df in spdylay_session_call_on_ctrl_frame_received
/home/bcall/ytrafficserver-6.0.x/spdylay-1.2.3/lib/spdylay_session.c:1634
#17 0xa463df in spdylay_session_on_syn_stream_received
/home/bcall/ytrafficserver-6.0.x/spdylay-1.2.3/lib/spdylay_session.c:1782
#18 0x100002117 (+0x7000b117)
Thread T19 ([ET_NET 18]) created by T0 ([ET_NET 0]) here:
#0 0x2abfb2bda87a in __interceptor_pthread_create
../../.././libsanitizer/asan/asan_interceptors.cc:183
#1 0xa3e556 in ink_thread_create ../../lib/ts/ink_thread.h:150
#2 0xa3ebb3 in Thread::start(char const*, unsigned long, void* (*)(void*),
void*)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/Thread.cc:101
#3 0xa43c19 in EventProcessor::start(int, unsigned long)
/home/bcall/ytrafficserver-6.0.x/trafficserver/iocore/eventsystem/UnixEventProcessor.cc:140
#4 0x59180f in main
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/Main.cc:1624
#5 0x2abfb65acaf4 in __libc_start_main (/lib64/libc.so.6+0x21af4)
SUMMARY: AddressSanitizer: heap-use-after-free
/home/bcall/ytrafficserver-6.0.x/trafficserver/proxy/hdrs/HdrHeap.cc:320
HdrHeap::duplicate_str(char const*, int)
Shadow bytes around the buggy address:
0x0c4a830f8bb0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4a830f8bc0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4a830f8bd0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4a830f8be0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x0c4a830f8bf0: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x0c4a830f8c00: fd[fd]fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4a830f8c10: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4a830f8c20: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4a830f8c30: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4a830f8c40: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
0x0c4a830f8c50: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
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
Heap right redzone: fb
Freed heap region: fd
Stack left redzone: f1
Stack mid redzone: f2
Stack right redzone: f3
Stack partial redzone: f4
Stack after return: f5
Stack use after scope: f8
Global redzone: f9
Global init order: f6
Poisoned by user: f7
Contiguous container OOB:fc
ASan internal: fe
==24576==ABORTING
{code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)