From f6ecadfee87da7f3cd9c5d334b3183425397a025 Mon Sep 17 00:00:00 2001 From: Sergei Golubchik Date: Mon, 3 Jul 2023 18:18:02 +0200 Subject: [PATCH] fix ASAN+safemalloc builds debug_sync refactoring introduced a statically instantiated object debug_sync_global of the structure st_debug_sync_globals. st_debug_sync_globals includes Hash_set<> which allocates memory in the constructor. sf_malloc() calls _my_thread_var()->dbug_id which is pthread_getspecific(THR_KEY_mysys), and THR_KEY_mysys is 0 before pthread_key_create(). pthread_getspecific(0) returns a valid pointer, not EINVAL. And safemalloc dereferences it. let's statically initialize THR_KEY_mysys to -1, this makes pthread_getspecific(THR_KEY_mysys) to fail before pthread_key_create() is called. followup for 8885225de66 --- mysys/my_thr_init.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mysys/my_thr_init.c b/mysys/my_thr_init.c index fd8a99c2196..2e8decd7d06 100644 --- a/mysys/my_thr_init.c +++ b/mysys/my_thr_init.c @@ -23,7 +23,7 @@ #include #include -pthread_key(struct st_my_thread_var*, THR_KEY_mysys); +pthread_key(struct st_my_thread_var*, THR_KEY_mysys=-1); mysql_mutex_t THR_LOCK_malloc, THR_LOCK_open, THR_LOCK_lock, THR_LOCK_myisam, THR_LOCK_heap, THR_LOCK_net, THR_LOCK_charset, THR_LOCK_threads,