Skip to content

Crash related to aligned_alloc and free in context #200

Closed
@yanglong1010

Description

@yanglong1010

Hi,

I encountered a crash today, from the hs_err log I see the last java frame is getContextPageOffset0.

I then used the debug jar and enabled core dump, the stack trace is bellow:

#0  0x00007fc775409387 in raise () from /lib64/libc.so.6
#1  0x00007fc77540aa78 in abort () from /lib64/libc.so.6
#2  0x00007fc776008a66 in tcmalloc::Log(tcmalloc::LogMode, char const*, int, tcmalloc::LogItem, tcmalloc::LogItem, tcmalloc::LogItem, tcmalloc::LogItem) () from /usr/lib64/libtcmalloc.so
#3  0x00007fc775ffd644 in (anonymous namespace)::InvalidFree(void*) () from /usr/lib64/libtcmalloc.so
#4  0x00007fc74eb9f701 in Contexts::getPage(int) ()

The reason is, if libtcmalloc.so.4.4.5 is PR_LOADEDed, the aligned_alloc is from libc (because libtcmalloc.so.4.4.5 does not have aligned_alloc), while free is from tcmalloc, then tcmalloc complains about pointer is not allocated by it.

readelf -s -W /usr/lib64/libc-2.26.so|grep aligned_alloc
  1261: 000000000007f0e0     9 FUNC    WEAK   DEFAULT   12 aligned_alloc@@GLIBC_2.16
  6011: 000000000007f0e0     9 FUNC    WEAK   DEFAULT   12 aligned_alloc

readelf -s -W /usr/lib64/libtcmalloc.so.4.4.5|grep aligned_alloc|wc -l
0

if (__atomic_load_n(&_pages[pageIndex], __ATOMIC_ACQUIRE) == NULL) {
u32 capacity = DD_CONTEXT_PAGE_SIZE * sizeof(Context);
Context *page = (Context *)aligned_alloc(sizeof(Context), capacity);
// need to zero the storage because there is no aligned_calloc
memset(page, 0, capacity);
if (!__sync_bool_compare_and_swap(&_pages[pageIndex], NULL, page)) {
free(page);
} else {
Counters::increment(CONTEXT_STORAGE_BYTES, capacity);
Counters::increment(CONTEXT_STORAGE_PAGES);
}
}

Consider users are free to use any allocator, it's better not to crash. The simplest fix is to replace aligned_alloc with malloc.
Any thoughts ?

Thanks.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions