• Brandon Nesterenko's avatar
    MDEV-34237: On Startup: UBSAN: runtime error: call to function... · bf0aa99a
    Brandon Nesterenko authored
    MDEV-34237: On Startup: UBSAN: runtime error: call to function MDL_lock::lf_hash_initializer lf_hash_insert through pointer to incorrect function type 'void (*)(st_lf_hash *, void *, const void *)'
    
    A few different incorrect function type UBSAN issues have been
    grouped into this patch.
    
    The only real potentially undefined behavior is an error about
    show_func_mutex_instances_lost, which when invoked in
    sql_show.cc::show_status_array(), puts 5 arguments onto the stack;
    however, the implementing function only actually has 3 parameters (so
    only 3 would be popped). This was fixed by adding in the remaining
    parameters to satisfy the type mysql_show_var_func.
    
    The rest of the findings are pointer type mismatches that wouldn't
    lead to actual undefined behavior. The lf_hash_initializer function
    type definition is
    
    typedef void (*lf_hash_initializer)(LF_HASH *hash, void *dst, const void *src);
    
    but the MDL_lock and table cache's implementations of this function
    do not have that signature. The MDL_lock has specific MDL object
    parameters:
    
    static void lf_hash_initializer(LF_HASH *hash __attribute__((unused)),
                                    MDL_lock *lock, MDL_key *key_arg)
    
    and the table cache has specific TDC parameters:
    
    static void tdc_hash_initializer(LF_HASH *,
                                     TDC_element *element, LEX_STRING *key)
    
    leading to UBSAN runtime errors when invoking these functions.
    
    This patch fixes these type mis-matches by changing the
    implementing functions to use void * and const void * for their
    respective parameters, and later casting them to their expected
    type in the function body.
    
    Note too the functions tdc_hash_key and tc_purge_callback had
    a similar problem to tdc_hash_initializer and was fixed
    similarly.
    
    Reviewed By:
    ============
    Sergei Golubchik <serg@mariadb.com>
    bf0aa99a
mdl.cc 102 KB