From 96f76063a504600c8923739bd179a2ca44741f91 Mon Sep 17 00:00:00 2001 From: liyiming13 Date: Wed, 13 Nov 2024 21:45:00 +0800 Subject: [PATCH] Block sig when call tl_lock Issue:https://gitee.com/openharmony/third_party_musl/issues/IB469M?from=project-issue Test:libc-test Signed-off-by: liyiming13 --- src/linux/syscall_hooks/syscall_hooks.c | 3 +++ src/syscall_hooks/linux/syscall_hooks.c | 3 +++ src/thread/linux/pthread_create.c | 3 +++ 3 files changed, 9 insertions(+) diff --git a/src/linux/syscall_hooks/syscall_hooks.c b/src/linux/syscall_hooks/syscall_hooks.c index 787bdd5bf..0180dc649 100644 --- a/src/linux/syscall_hooks/syscall_hooks.c +++ b/src/linux/syscall_hooks/syscall_hooks.c @@ -54,6 +54,8 @@ int set_syscall_hooks(const char *hooks_table, int table_len, void *hooks_entry, } if (ret == 0) { + sigset_t set; + __block_app_sigs(&set); __tl_lock(); if (get_tl_lock_caller_count()) { get_tl_lock_caller_count()->set_syscall_hooks_tl_lock++; @@ -74,6 +76,7 @@ int set_syscall_hooks(const char *hooks_table, int table_len, void *hooks_entry, get_tl_lock_caller_count()->set_syscall_hooks_tl_lock--; } __tl_unlock(); + __restore_sigs(&set); } return ret; diff --git a/src/syscall_hooks/linux/syscall_hooks.c b/src/syscall_hooks/linux/syscall_hooks.c index a78372997..b570e1e04 100644 --- a/src/syscall_hooks/linux/syscall_hooks.c +++ b/src/syscall_hooks/linux/syscall_hooks.c @@ -54,6 +54,8 @@ int set_syscall_hooks(const char *hooks_table, int table_len, void *hooks_entry, } if (ret == 0) { + sigset_t set; + __block_app_sigs(&set); __tl_lock(); if (get_tl_lock_caller_count()) { @@ -75,6 +77,7 @@ int set_syscall_hooks(const char *hooks_table, int table_len, void *hooks_entry, get_tl_lock_caller_count()->set_syscall_hooks_linux_tl_lock--; } __tl_unlock(); + __restore_sigs(&set); } return ret; diff --git a/src/thread/linux/pthread_create.c b/src/thread/linux/pthread_create.c index 8617cd9b8..c3674d4a8 100644 --- a/src/thread/linux/pthread_create.c +++ b/src/thread/linux/pthread_create.c @@ -687,6 +687,8 @@ struct pthread* __pthread_list_find(pthread_t thread_id, const char* info) pid_t __pthread_gettid_np(pthread_t t) { + sigset_t set; + __block_app_sigs(&set); __tl_lock(); if (get_tl_lock_caller_count()) { get_tl_lock_caller_count()->__pthread_gettid_np_tl_lock++; @@ -696,6 +698,7 @@ pid_t __pthread_gettid_np(pthread_t t) get_tl_lock_caller_count()->__pthread_gettid_np_tl_lock--; } __tl_unlock(); + __restore_sigs(&set); return thread ? thread->tid : -1; } weak_alias(__pthread_gettid_np, pthread_gettid_np); -- Gitee