From: Yanfei Xu Date: Fri, 12 Mar 2021 04:54:08 +0000 (+0800) Subject: glibc: fix pthread_cond_destroy hangs with process-shared mutex X-Git-Tag: yocto-3.3~171 X-Git-Url: https://code.ossystems.io/gitweb?a=commitdiff_plain;h=7d9c50a12d1b47474536c214f44dc4ff72c54402;p=openembedded-core.git glibc: fix pthread_cond_destroy hangs with process-shared mutex This bug can cause pthread_cond_destroy hang with process-shared mutex. And it is since glibc-2.32, will be fixed in glibc-2.34. Signed-off-by: Yanfei Xu Signed-off-by: Richard Purdie --- diff --git a/meta/recipes-core/glibc/glibc/0001-nptl-Remove-private-futex-optimization-BZ-27304.patch b/meta/recipes-core/glibc/glibc/0001-nptl-Remove-private-futex-optimization-BZ-27304.patch new file mode 100644 index 0000000000..39fde5b785 --- /dev/null +++ b/meta/recipes-core/glibc/glibc/0001-nptl-Remove-private-futex-optimization-BZ-27304.patch @@ -0,0 +1,49 @@ +From c4ad832276f4dadfa40904109b26a521468f66bc Mon Sep 17 00:00:00 2001 +From: Florian Weimer +Date: Thu, 4 Feb 2021 15:00:20 +0100 +Subject: [PATCH] nptl: Remove private futex optimization [BZ #27304] + +It is effectively used, unexcept for pthread_cond_destroy, where we do +not want it; see bug 27304. The internal locks do not support a +process-shared mode. + +This fixes commit dc6cfdc934db9997c33728082d63552b9eee4563 ("nptl: +Move pthread_cond_destroy implementation into libc"). + +Reviewed-by: Adhemerval Zanella + +Upstream-Status: Backport [https://sourceware.org/bugzilla/show_bug.cgi?id=27304] +Signed-off-by: Yanfei Xu +--- + sysdeps/nptl/lowlevellock-futex.h | 14 +------------- + 1 file changed, 1 insertion(+), 13 deletions(-) + +diff --git a/sysdeps/nptl/lowlevellock-futex.h b/sysdeps/nptl/lowlevellock-futex.h +index ecb729da6b..ca96397a4a 100644 +--- a/sysdeps/nptl/lowlevellock-futex.h ++++ b/sysdeps/nptl/lowlevellock-futex.h +@@ -50,20 +50,8 @@ + #define LLL_SHARED FUTEX_PRIVATE_FLAG + + #ifndef __ASSEMBLER__ +- +-# if IS_IN (libc) || IS_IN (rtld) +-/* In libc.so or ld.so all futexes are private. */ +-# define __lll_private_flag(fl, private) \ +- ({ \ +- /* Prevent warnings in callers of this macro. */ \ +- int __lll_private_flag_priv __attribute__ ((unused)); \ +- __lll_private_flag_priv = (private); \ +- ((fl) | FUTEX_PRIVATE_FLAG); \ +- }) +-# else +-# define __lll_private_flag(fl, private) \ ++# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +-# endif + + # define lll_futex_syscall(nargs, futexp, op, ...) \ + ({ \ +-- +2.27.0 + diff --git a/meta/recipes-core/glibc/glibc_2.33.bb b/meta/recipes-core/glibc/glibc_2.33.bb index bb4b875800..5e0baa53e8 100644 --- a/meta/recipes-core/glibc/glibc_2.33.bb +++ b/meta/recipes-core/glibc/glibc_2.33.bb @@ -47,6 +47,7 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ file://0032-string-Work-around-GCC-PR-98512-in-rawmemchr.patch \ file://0033-x86-Handle-_SC_LEVEL1_ICACHE_LINESIZE-BZ-27444.patch \ file://CVE-2021-27645.patch \ + file://0001-nptl-Remove-private-futex-optimization-BZ-27304.patch \ " S = "${WORKDIR}/git" B = "${WORKDIR}/build-${TARGET_SYS}"