This is the mail archive of the gdb-prs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug gdb/20716] AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator delete)


https://sourceware.org/bugzilla/show_bug.cgi?id=20716

--- Comment #2 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot gnu.org> ---
The master branch has been updated by Yao Qi <qiyao@sourceware.org>:

https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=3ef9d661f45abfaca5d0c0bb2ea9ab60470f1bb7

commit 3ef9d661f45abfaca5d0c0bb2ea9ab60470f1bb7
Author: Yao Qi <yao.qi@linaro.org>
Date:   Tue Oct 25 11:13:00 2016 +0100

    Don't override operator new if GDB is built with -fsanitize=address

    Nowadays, if we build GDB with -fsanitize=address, we can get the asan
    error below,

    (gdb) quit
    =================================================================
    ==9723==ERROR: AddressSanitizer: alloc-dealloc-mismatch (malloc vs operator
delete) on 0x60200003bf70
        #0 0x7f88f3837527 in operator delete(void*)
(/usr/lib/x86_64-linux-gnu/libasan.so.1+0x55527)
        #1 0xac8e13 in __gnu_cxx::new_allocator<void (*)()>::deallocate(void
(**)(), unsigned long) /usr/include/c++/4.9/ext/new_allocator.h:110
        #2 0xac8cc2 in __gnu_cxx::__alloc_traits<std::allocator<void (*)()>
>::deallocate(std::allocator<void (*)()>&, void (**)(), unsigned long)
/usr/include/c++/4.9/ext/alloc_traits.h:185
    ....
    0x60200003bf70 is located 0 bytes inside of 8-byte region
[0x60200003bf70,0x60200003bf78)
    allocated by thread T0 here:
        #0 0x7f88f38367ef in __interceptor_malloc
(/usr/lib/x86_64-linux-gnu/libasan.so.1+0x547ef)
        #1 0xbd2762 in operator new(unsigned long)
/home/yao/SourceCode/gnu/gdb/git/gdb/common/new-op.c:42
        #2 0xac8edc in __gnu_cxx::new_allocator<void (*)()>::allocate(unsigned
long, void const*) /usr/include/c++/4.9/ext/new_allocator.h:104
        #3 0xac8d81 in __gnu_cxx::__alloc_traits<std::allocator<void (*)()>
>::allocate(std::allocator<void (*)()>&, unsigned long)
/usr/include/c++/4.9/ext/alloc_traits.h:182

    The reason for this is that we override operator new but don't override
    operator delete.  This patch does the override if the code is NOT
    compiled with asan.

    gdb:

    2016-10-25  Yao Qi  <yao.qi@linaro.org>

        PR gdb/20716
        * common/new-op.c (__has_feature): New macro.
        Don't override operator new if asan is used.

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]