• Nisha Gopalakrishnan's avatar
    BUG#22594514: HANDLE_FATAL_SIGNAL (SIG=11) IN · 6608f841
    Nisha Gopalakrishnan authored
                  UNIQUE::~UNIQUE | SQL/UNIQUES.CC:355
    
    Analysis
    ========
    
    Enabling the sort_buffer_size with a large value
    can cause operations utilizing the sort buffer
    like DELETE as mentioned in the bug report to
    fail. 5.5 and 5.6 versions reports OOM error
    while in 5.7+, the server crashes.
    
    While initializing the mem_root for the sort buffer
    tree, the block size for the mem_root is determined
    from the 'sort_buffer_size' value. This unsigned
    long value is typecasted to unsigned int, hence
    it becomes zero. Further block_size computation
    while initializing the mem_root results in a very
    large block_size value. Hence while trying to
    allocate a block during the DELETE operation,
    an OOM error is reported. In case of 5.7+, the PFS
    instrumentation for memory allocation, overshoots
    the unsigned value and allocates a block of just
    one byte. While trying to free the block of the
    mem_root, the original block_size is used. This
    triggers the crash since the server tries to free
    unallocated memory.
    
    Fix:
    ====
    In order to restrict usage of such unreasonable
    sort_buffer_size, the typecast of block size
    to 'unsigned int' is removed and hence reports
    OOM error across all versions for sizes
    exceeding unsigned int range.
    6608f841
my_tree.h 3.45 KB