From 1c7bcdff2cc8093d07f6214a24228b42e050aa23 Mon Sep 17 00:00:00 2001 From: Dapeng Gao Date: Sun, 8 Sep 2024 14:50:54 +0800 Subject: [PATCH] c18n: Override libsys's sigaction to directly call RTLD hook Previously libsys's sigaction calls a libc function which in turn calls the RTLD hook. This is broken but was undetected because c18n was accidentally not enabled in the c18n-version of libsys. --- lib/libc/include/libc_private.h | 2 +- lib/libc/sys/sigaction.c | 13 ------------- lib/libsys/interposing_table.c | 2 +- 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/lib/libc/include/libc_private.h b/lib/libc/include/libc_private.h index 6a000c7fa6b9..6d8ed0496c64 100644 --- a/lib/libc/include/libc_private.h +++ b/lib/libc/include/libc_private.h @@ -396,7 +396,7 @@ int __strerror_rl(int errnum, char *strerrbuf, size_t buflen, #ifdef CHERI_LIB_C18N __pid_t __sys_rfork(int); -int sigaction_c18n(int, const struct sigaction *, struct sigaction *); +int _rtld_sigaction(int, const struct sigaction *, struct sigaction *); #endif #endif /* _LIBC_PRIVATE_H_ */ diff --git a/lib/libc/sys/sigaction.c b/lib/libc/sys/sigaction.c index 568dc7dc4526..809881ca4d3f 100644 --- a/lib/libc/sys/sigaction.c +++ b/lib/libc/sys/sigaction.c @@ -35,19 +35,6 @@ __weak_reference(__sys_sigaction, __sigaction); __weak_reference(sigaction, __libc_sigaction); -#ifdef CHERI_LIB_C18N -/* - * This weak symbol will always be resolved at runtime. - */ -#pragma weak _rtld_sigaction -int _rtld_sigaction(int, const struct sigaction *, struct sigaction *); - -int -sigaction_c18n(int sig, const struct sigaction *act, struct sigaction *oact) -{ - return (_rtld_sigaction(sig, act, oact)); -} -#endif #pragma weak sigaction int diff --git a/lib/libsys/interposing_table.c b/lib/libsys/interposing_table.c index 989aa6f75652..1b075d67ff2a 100644 --- a/lib/libsys/interposing_table.c +++ b/lib/libsys/interposing_table.c @@ -57,7 +57,7 @@ static interpos_func_t __libsys_interposing[INTERPOS_MAX] = { SLOT(sendto, __sys_sendto), SLOT(setcontext, __sys_setcontext), #ifdef CHERI_LIB_C18N - SLOT(sigaction, sigaction_c18n), + SLOT(sigaction, _rtld_sigaction), #else SLOT(sigaction, __sys_sigaction), #endif