diff --git a/glibc-RHEL-119392-1.patch b/glibc-RHEL-119392-1.patch new file mode 100644 index 0000000..8d32df9 --- /dev/null +++ b/glibc-RHEL-119392-1.patch @@ -0,0 +1,84 @@ +commit f745d78e2628cd5b13ca119ae0c0e21d08ad1906 +Author: Joseph Myers +Date: Fri Nov 8 01:53:48 2024 +0000 + + Avoid uninitialized result in sem_open when file does not exist + + A static analyzer apparently reported an uninitialized use of the + variable result in sem_open in the case where the file is required to + exist but does not exist. + + The report appears to be correct; set result to SEM_FAILED in that + case, and add a test for it. + + Note: the test passes for me even without the sem_open fix, I guess + because result happens to get value SEM_FAILED (i.e. 0) when + uninitialized. + + Tested for x86_64. + +diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile +index 0d9e232acec2ed39..449478a847ad2292 100644 +--- a/sysdeps/pthread/Makefile ++++ b/sysdeps/pthread/Makefile +@@ -256,6 +256,7 @@ tests += \ + tst-sem14 \ + tst-sem15 \ + tst-sem16 \ ++ tst-sem17 \ + tst-setuid3 \ + tst-signal1 \ + tst-signal2 \ +diff --git a/sysdeps/pthread/sem_open.c b/sysdeps/pthread/sem_open.c +index e41236157a5d1b0a..dab734191a8ca208 100644 +--- a/sysdeps/pthread/sem_open.c ++++ b/sysdeps/pthread/sem_open.c +@@ -76,6 +76,7 @@ __sem_open (const char *name, int oflag, ...) + goto try_create; + + /* Return. errno is already set. */ ++ result = SEM_FAILED; + } + else + /* Check whether we already have this semaphore mapped and +diff --git a/sysdeps/pthread/tst-sem17.c b/sysdeps/pthread/tst-sem17.c +new file mode 100644 +index 0000000000000000..c3f05d196f4ef17a +--- /dev/null ++++ b/sysdeps/pthread/tst-sem17.c +@@ -0,0 +1,35 @@ ++/* Test sem_open with missing file. ++ Copyright (C) 2024 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++ ++#include ++ ++int ++do_test (void) ++{ ++ sem_unlink ("/glibc-tst-sem17"); ++ errno = 0; ++ sem_t *s = sem_open ("/glibc-tst-sem17", 0); ++ TEST_VERIFY (s == SEM_FAILED); ++ TEST_COMPARE (errno, ENOENT); ++ return 0; ++} ++ ++#include diff --git a/glibc-RHEL-119392-2.patch b/glibc-RHEL-119392-2.patch new file mode 100644 index 0000000..d72cb62 --- /dev/null +++ b/glibc-RHEL-119392-2.patch @@ -0,0 +1,42 @@ +commit c7dcf594f4c52fa7e2cc76918c8aa9abb98e9625 +Author: Joseph Myers +Date: Fri Nov 8 17:08:09 2024 +0000 + + Rename new tst-sem17 test to tst-sem18 + + As noted by Adhemerval, we already have a tst-sem17 in nptl. + + Tested for x86_64. + +diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile +index 449478a847ad2292..aef323296d7926f6 100644 +--- a/sysdeps/pthread/Makefile ++++ b/sysdeps/pthread/Makefile +@@ -256,7 +256,7 @@ tests += \ + tst-sem14 \ + tst-sem15 \ + tst-sem16 \ +- tst-sem17 \ ++ tst-sem18 \ + tst-setuid3 \ + tst-signal1 \ + tst-signal2 \ +diff --git a/sysdeps/pthread/tst-sem17.c b/sysdeps/pthread/tst-sem18.c +similarity index 92% +rename from sysdeps/pthread/tst-sem17.c +rename to sysdeps/pthread/tst-sem18.c +index c3f05d196f4ef17a..1be207bcbeeb56f1 100644 +--- a/sysdeps/pthread/tst-sem17.c ++++ b/sysdeps/pthread/tst-sem18.c +@@ -24,9 +24,9 @@ + int + do_test (void) + { +- sem_unlink ("/glibc-tst-sem17"); ++ sem_unlink ("/glibc-tst-sem18"); + errno = 0; +- sem_t *s = sem_open ("/glibc-tst-sem17", 0); ++ sem_t *s = sem_open ("/glibc-tst-sem18", 0); + TEST_VERIFY (s == SEM_FAILED); + TEST_COMPARE (errno, ENOENT); + return 0; diff --git a/glibc-RHEL-119403.patch b/glibc-RHEL-119403.patch new file mode 100644 index 0000000..3633ba3 --- /dev/null +++ b/glibc-RHEL-119403.patch @@ -0,0 +1,106 @@ +commit 3c2b9dc41cd05da055fae6f793a355063156bdf3 +Author: Joseph Myers +Date: Fri Nov 29 20:25:04 2024 +0000 + + Add threaded test of sem_trywait + + All the existing glibc tests of sem_trywait are single-threaded. Add + one that calls sem_trywait and sem_post in separate threads. + + Tested for x86_64. + +diff --git a/sysdeps/pthread/Makefile b/sysdeps/pthread/Makefile +index aef323296d7926f6..93a8534cbf814f27 100644 +--- a/sysdeps/pthread/Makefile ++++ b/sysdeps/pthread/Makefile +@@ -257,6 +257,7 @@ tests += \ + tst-sem15 \ + tst-sem16 \ + tst-sem18 \ ++ tst-sem19 \ + tst-setuid3 \ + tst-signal1 \ + tst-signal2 \ +diff --git a/sysdeps/pthread/tst-sem19.c b/sysdeps/pthread/tst-sem19.c +new file mode 100644 +index 0000000000000000..9ef461e008ab9eab +--- /dev/null ++++ b/sysdeps/pthread/tst-sem19.c +@@ -0,0 +1,77 @@ ++/* Test sem_trywait with threads. ++ Copyright (C) 2024 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ . */ ++ ++#include ++#include ++#include ++#include ++#include ++ ++/* The test uses two threads, the main thread and a newly created ++ thread to test the operation of sem_trywait in a threaded scenario. ++ The intent is to test sem_trywait when it would return EAGAIN, and ++ then again after the critical section in the new thread has posted ++ to the semaphore and the main thread succeeds in calling ++ sem_trywait. It is possible this test fails with a timeout if the ++ second thread takes longer than the test timeout to acquire the ++ lock, and post. */ ++ ++static pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; ++static sem_t sem; ++ ++static void * ++tf (void *arg) ++{ ++ xpthread_mutex_lock (&lock); ++ sem_post (&sem); ++ xpthread_mutex_unlock (&lock); ++ return NULL; ++} ++ ++static int ++do_test (void) ++{ ++ int ret; ++ ++ ret = sem_init (&sem, 0, 0); ++ TEST_VERIFY_EXIT (ret == 0); ++ xpthread_mutex_lock (&lock); ++ pthread_t th = xpthread_create (NULL, tf, NULL); ++ errno = 0; ++ /* The other thread is waiting on the lock before it calls sem_post, ++ so sem_trywait should fail. */ ++ ret = sem_trywait (&sem); ++ TEST_COMPARE (ret, -1); ++ TEST_COMPARE (errno, EAGAIN); ++ xpthread_mutex_unlock (&lock); ++ /* The other thread now takes the lock, calls sem_post and releases ++ the lock. */ ++ for (;;) ++ { ++ errno = 0; ++ ret = sem_trywait (&sem); ++ if (ret == 0) ++ break; ++ TEST_COMPARE (errno, EAGAIN); ++ } ++ xpthread_join (th); ++ ++ return 0; ++} ++ ++#include diff --git a/glibc.spec b/glibc.spec index 04b55bc..7a7c2fc 100644 --- a/glibc.spec +++ b/glibc.spec @@ -2348,7 +2348,7 @@ update_gconv_modules_cache () %endif %changelog -* Wed Oct 08 2025 Eduard Abdullin - 2.39-73.alma.1 +* Thu Oct 09 2025 Eduard Abdullin - 2.39-75.alma.1 - Overwrite target for x86_64_v2 - Update patch-git.lua to handle AlmaLinux branches correctly