]> sourceware.org Git - glibc.git/log
glibc.git
12 months agohurd: statfsconv: Add missing f_ffree conversion
Samuel Thibault [Tue, 7 Nov 2023 11:51:25 +0000 (12:51 +0100)]
hurd: statfsconv: Add missing f_ffree conversion

12 months agoUpdate BAD_TYPECHECK to work on x86_64
Flavio Cruz [Mon, 6 Nov 2023 04:13:32 +0000 (23:13 -0500)]
Update BAD_TYPECHECK to work on x86_64

Message-ID: <ZUhn7LOcgLOJjKZr@jupiter.tail36e24.ts.net>

12 months agosysdeps: sem_open: Clear O_CREAT when semaphore file is expected to exist [BZ #30789]
Sergio Durigan Junior [Wed, 1 Nov 2023 22:15:23 +0000 (18:15 -0400)]
sysdeps: sem_open: Clear O_CREAT when semaphore file is expected to exist [BZ #30789]

When invoking sem_open with O_CREAT as one of its flags, we'll end up
in the second part of sem_open's "if ((oflag & O_CREAT) == 0 || (oflag
& O_EXCL) == 0)", which means that we don't expect the semaphore file
to exist.

In that part, open_flags is initialized as "O_RDWR | O_CREAT | O_EXCL
| O_CLOEXEC" and there's an attempt to open(2) the file, which will
likely fail because it won't exist.  After that first (expected)
failure, some cleanup is done and we go back to the label "try_again",
which lives in the first part of the aforementioned "if".

The problem is that, in that part of the code, we expect the semaphore
file to exist, and as such O_CREAT (this time the flag we pass to
open(2)) needs to be cleaned from open_flags, otherwise we'll see
another failure (this time unexpected) when trying to open the file,
which will lead the call to sem_open to fail as well.

This can cause very strange bugs, especially with OpenMPI, which makes
extensive use of semaphores.

Fix the bug by simplifying the logic when choosing open(2) flags and
making sure O_CREAT is not set when the semaphore file is expected to
exist.

A regression test for this issue would require a complex and cpu time
consuming logic, since to trigger the wrong code path is not
straightforward due the racy condition.  There is a somewhat reliable
reproducer in the bug, but it requires using OpenMPI.

This resolves BZ #30789.

See also: https://bugs.launchpad.net/ubuntu/+source/h5py/+bug/2031912

Signed-off-by: Sergio Durigan Junior <sergiodj@sergiodj.net>
Co-Authored-By: Simon Chopin <simon.chopin@canonical.com>
Co-Authored-By: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>
Fixes: 533deafbdf189f5fbb280c28562dd43ace2f4b0f ("Use O_CLOEXEC in more places (BZ #15722)")
12 months agoAdd SEGV_CPERR from Linux 6.6 to bits/siginfo-consts.h
Joseph Myers [Fri, 3 Nov 2023 16:36:35 +0000 (16:36 +0000)]
Add SEGV_CPERR from Linux 6.6 to bits/siginfo-consts.h

Linux 6.6 adds the constant SEGV_CPERR.  Add it to glibc's
bits/siginfo-consts.h.

Tested for x86_64.

12 months agolinux: Sync Linux 6.6 elf.h
Adhemerval Zanella [Tue, 31 Oct 2023 16:32:38 +0000 (13:32 -0300)]
linux: Sync Linux 6.6 elf.h

It adds NT_X86_SHSTK (2fab02b25ae7cf5), NT_RISCV_CSR/NT_RISCV_VECTOR
(9300f00439743c4), and NT_LOONGARCH_HW_BREAK/NT_LOONGARCH_HW_WATCH
(1a69f7a161a78ae).

12 months agolinux: Add HWCAP2_HBC from Linux 6.6 to AArch64 bits/hwcap.h
Adhemerval Zanella [Tue, 31 Oct 2023 16:32:37 +0000 (13:32 -0300)]
linux: Add HWCAP2_HBC from Linux 6.6 to AArch64 bits/hwcap.h

12 months agolinux: Add FSCONFIG_CMD_CREATE_EXCL from Linux 6.6 to sys/mount.h
Adhemerval Zanella [Tue, 31 Oct 2023 16:32:36 +0000 (13:32 -0300)]
linux: Add FSCONFIG_CMD_CREATE_EXCL from Linux 6.6 to sys/mount.h

The tst-mount-consts.py does not need to be updated because kernel
exports it as an enum (compare_macro_consts can not parse it).

12 months agolinux: Add MMAP_ABOVE4G from Linux 6.6 to sys/mman.h
Adhemerval Zanella [Tue, 31 Oct 2023 16:32:35 +0000 (13:32 -0300)]
linux: Add MMAP_ABOVE4G from Linux 6.6 to sys/mman.h

x86 added the flag (29f890d1050fc099f) for CET enabled.

Also update tst-mman-consts.py test.

12 months agoUpdate kernel version to 6.6 in header constant tests
Adhemerval Zanella [Tue, 31 Oct 2023 16:32:34 +0000 (13:32 -0300)]
Update kernel version to 6.6 in header constant tests

There are no new constants covered, the tst-mman-consts.py is
updated separately along with a header constant addition.

12 months agoUpdate syscall lists for Linux 6.6
Adhemerval Zanella [Tue, 31 Oct 2023 16:32:33 +0000 (13:32 -0300)]
Update syscall lists for Linux 6.6

Linux 6.6 has one new syscall for all architectures, fchmodat2, and
the map_shadow_stack on x86_64.

12 months agoFormat test results closer to what DejaGnu does
Maxim Kuvyrkov [Fri, 19 May 2023 08:28:21 +0000 (08:28 +0000)]
Format test results closer to what DejaGnu does

The years of dealing with Binutils, GCC and GDB test results
made the community create good tools for comparison and analysis
of DejaGnu test results.  This change allows to use those tools
for Glibc's test results as well.

The motivation for this change is Linaro's pre-commit testers,
which use a modified version of GCC's validate_failures.py
to create test xfail lists with baseline failures and known
flaky tests.  See below links for an example xfails file (only
one link is supposed to work at any given time):
- https://ci.linaro.org/job/tcwg_glibc_check--master-arm-build/lastSuccessfulBuild/artifact/artifacts/artifacts.precommit/sumfiles/xfails.xfail/*view*/
- https://ci.linaro.org/job/tcwg_glibc_check--master-arm-build/lastSuccessfulBuild/artifact/artifacts/sumfiles/xfails.xfail/*view*/

Specifacally, this patch changes format of glibc's .sum files from ...
<cut>
FAIL: elf/test1
PASS: string/test2
</cut>
... to ...
<cut>
             === glibc tests ===

Running elf ...
FAIL: elf/test1

Running string ...
PASS: string/test2
</cut>.

And output of "make check" from ...
<cut>
FAIL: elf/test1
</cut>
... to ...
<cut>
FAIL: elf/test1
=== Summary of results ===
      1 FAIL
      1 PASS
</cut>.

Signed-off-by: Maxim Kuvyrkov <maxim.kuvyrkov@linaro.org>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoAArch64: Cleanup ifuncs
Wilco Dijkstra [Tue, 24 Oct 2023 12:51:07 +0000 (13:51 +0100)]
AArch64: Cleanup ifuncs

Cleanup ifuncs.  Remove uses of libc_hidden_builtin_def, use ENTRY rather than
ENTRY_ALIGN, remove unnecessary defines and conditional compilation.  Rename
strlen_mte to strlen_generic.  Remove rtld-memset.

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
12 months agoUse correct subdir when building tst-rfc3484* for mach and arm
Arjun Shankar [Tue, 31 Oct 2023 09:44:32 +0000 (10:44 +0100)]
Use correct subdir when building tst-rfc3484* for mach and arm

Commit 7f602256ab5b85db1dbfb5f40bd109c4b37b68c8 moved the tst-rfc3484*
tests from posix/ to nss/, but didn't correct references to point to
their new subdir when building for mach and arm.  This commit fixes
that.

Tested with build-many-glibcs.sh for i686-gnu.

12 months agostdlib: Add more qsort{_r} coverage
Adhemerval Zanella [Tue, 3 Oct 2023 12:22:51 +0000 (09:22 -0300)]
stdlib: Add more qsort{_r} coverage

This patch adds a qsort and qsort_r to trigger the worst case
scenario for the quicksort (which glibc current lacks coverage).
The test is done with random input, dfferent internal types (uint8_t,
uint16_t, uint32_t, uint64_t, large size), and with
different set of element numbers.

Checked on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
12 months agostdlib: Remove use of mergesort on qsort (BZ 21719)
Adhemerval Zanella [Tue, 3 Oct 2023 12:22:50 +0000 (09:22 -0300)]
stdlib: Remove use of mergesort on qsort (BZ 21719)

This patch removes the mergesort optimization on qsort implementation
and uses the introsort instead.  The mergesort implementation has some
issues:

  - It is as-safe only for certain types sizes (if total size is less
    than 1 KB with large element sizes also forcing memory allocation)
    which contradicts the function documentation.  Although not required
    by the C standard, it is preferable and doable to have an O(1) space
    implementation.

  - The malloc for certain element size and element number adds
    arbitrary latency (might even be worse if malloc is interposed).

  - To avoid trigger swap from memory allocation the implementation
    relies on system information that might be virtualized (for instance
    VMs with overcommit memory) which might lead to potentially use of
    swap even if system advertise more memory than actually has.  The
    check also have the downside of issuing syscalls where none is
    expected (although only once per execution).

  - The mergesort is suboptimal on an already sorted array (BZ#21719).

The introsort implementation is already optimized to use constant extra
space (due to the limit of total number of elements from maximum VM
size) and thus can be used to avoid the malloc usage issues.

Resulting performance is slower due the usage of qsort, specially in the
worst-case scenario (partialy or sorted arrays) and due the fact
mergesort uses a slight improved swap operations.

This change also renders the BZ#21719 fix unrequired (since it is meant
to fix the sorted input performance degradation for mergesort).  The
manual is also updated to indicate the function is now async-cancel
safe.

Checked on x86_64-linux-gnu.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
12 months agostdlib: Implement introsort for qsort (BZ 19305)
Adhemerval Zanella [Tue, 3 Oct 2023 12:22:49 +0000 (09:22 -0300)]
stdlib: Implement introsort for qsort (BZ 19305)

This patch makes the quicksort implementation to acts as introsort, to
avoid worse-case performance (and thus making it O(nlog n)).  It switch
to heapsort when the depth level reaches 2*log2(total elements).  The
heapsort is a textbook implementation.

Checked on x86_64-linux-gnu and aarch64-linux-gnu.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
12 months agostdlib: qsort: Move some macros to inline function
Adhemerval Zanella [Tue, 3 Oct 2023 12:22:48 +0000 (09:22 -0300)]
stdlib: qsort: Move some macros to inline function

Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
12 months agostdlib: Move insertion sort out qsort
Adhemerval Zanella [Tue, 3 Oct 2023 12:22:47 +0000 (09:22 -0300)]
stdlib: Move insertion sort out qsort

Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
12 months agostdlib: Optimization qsort{_r} swap implementation
Adhemerval Zanella [Tue, 3 Oct 2023 12:22:46 +0000 (09:22 -0300)]
stdlib: Optimization qsort{_r} swap implementation

The optimization takes in consideration both the most common elements
are either 32 or 64 bit in size and inputs are aligned to the word
boundary.  This is similar to what msort does.

For large buffer the swap operation uses memcpy/mempcpy with a
small fixed size buffer (so compiler might inline the operations).

Checked on x86_64-linux-gnu.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
12 months agostring: Add internal memswap implementation
Adhemerval Zanella [Tue, 3 Oct 2023 12:22:45 +0000 (09:22 -0300)]
string: Add internal memswap implementation

The prototype is:

  void __memswap (void *restrict p1, void *restrict p2, size_t n)

The function swaps the content of two memory blocks P1 and P2 of
len N.  Memory overlap is NOT handled.

It will be used on qsort optimization.

Checked on x86_64-linux-gnu and aarch64-linux-gnu.
Reviewed-by: Noah Goldstein <goldstein.w.n@gmail.com>
12 months agocrypt: Remove manul entry for --enable-crypt
Adhemerval Zanella [Tue, 31 Oct 2023 13:59:04 +0000 (10:59 -0300)]
crypt: Remove manul entry for --enable-crypt

12 months agoUse Linux 6.6 in build-many-glibcs.py
Joseph Myers [Tue, 31 Oct 2023 13:36:51 +0000 (13:36 +0000)]
Use Linux 6.6 in build-many-glibcs.py

This patch makes build-many-glibcs.py use Linux 6.6.

Tested with build-many-glibcs.py (host-libraries, compilers and glibcs
builds).

12 months agocrypt: Remove libcrypt support
Adhemerval Zanella [Mon, 2 Oct 2023 12:11:49 +0000 (09:11 -0300)]
crypt: Remove libcrypt support

All the crypt related functions, cryptographic algorithms, and
make requirements are removed,  with only the exception of md5
implementation which is moved to locale folder since it is
required by localedef for integrity protection (libc's
locale-reading code does not check these, but localedef does
generate them).

Besides thec code itself, both internal documentation and the
manual is also adjusted.  This allows to remove both --enable-crypt
and --enable-nss-crypt configure options.

Checked with a build for all affected ABIs.

Co-authored-by: Zack Weinberg <zack@owlfolio.org>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
12 months agosparc: Remove optimize md5, sha256, and sha512
Adhemerval Zanella [Mon, 2 Oct 2023 12:11:48 +0000 (09:11 -0300)]
sparc: Remove optimize md5, sha256, and sha512

The libcrypt was maked to be phase out on 2.38, and a better project
already exist that provide both compatibility and better API
(libxcrypt).  The sparc optimizations add the burden to extra
build-many-glibcs.py configurations.

Checked on sparc64 and sparcv9.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
12 months agobuild-many-glibcs: Fix traililing whitespace
Adhemerval Zanella [Mon, 30 Oct 2023 16:03:28 +0000 (13:03 -0300)]
build-many-glibcs: Fix traililing whitespace

From commit d846c2838942297c9644f2f38bdad0fb88f42245.

12 months agoLoongArch: Delete excessively allocated memory.
caiyinyu [Thu, 26 Oct 2023 09:27:21 +0000 (17:27 +0800)]
LoongArch: Delete excessively allocated memory.

12 months agoLoongArch: Update hwcap.h to sync with LoongArch kernel.
caiyinyu [Mon, 23 Oct 2023 07:53:38 +0000 (15:53 +0800)]
LoongArch: Update hwcap.h to sync with LoongArch kernel.

12 months agoLoongArch: Unify Register Names.
caiyinyu [Fri, 20 Oct 2023 01:20:02 +0000 (09:20 +0800)]
LoongArch: Unify Register Names.

12 months agoAArch64: Add support for MOPS memcpy/memmove/memset
Wilco Dijkstra [Tue, 17 Oct 2023 15:54:21 +0000 (16:54 +0100)]
AArch64: Add support for MOPS memcpy/memmove/memset

Add support for MOPS in cpu_features and INIT_ARCH.  Add ifuncs using MOPS for
memcpy, memmove and memset (use .inst for now so it works with all binutils
versions without needing complex configure and conditional compilation).

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
12 months agoMove getnameinfo from 'inet' to 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:28 +0000 (14:55 +0200)]
Move getnameinfo from 'inet' to 'nss'

getnameinfo is an entry points for nss functionality.  This commit moves
it from the 'inet' subdirectory to 'nss'.  The corresponding Versions
entry is also moved from 'posix' into 'nss'.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove getaddrinfo from 'posix' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:27 +0000 (14:55 +0200)]
Move getaddrinfo from 'posix' into 'nss'

getaddrinfo is an entry point for nss functionality.  This commit moves
it from 'sysdeps/posix' to 'nss', gets rid of the stub in 'posix', and
moves all associated tests as well.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'services' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:26 +0000 (14:55 +0200)]
Move 'services' routines from 'inet' into 'nss'

The getservby* and getservent* routines are entry points for nss
functionality.  This commit moves them from the 'inet' subdirectory to
'nss'.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'rpc' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:25 +0000 (14:55 +0200)]
Move 'rpc' routines from 'inet' into 'nss'

The getrpcby* and getrpcent* routines are entry points for nss
functionality.  This commit moves them from the 'inet' subdirectory to
'nss'.  The Versions entries for these routines along with a test,
located in the 'sunrpc' subdirectory, are also moved into 'nss'.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'protocols' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:24 +0000 (14:55 +0200)]
Move 'protocols' routines from 'inet' into 'nss'

The getprotoby* and getprotoent* routines are entry points for nss
functionality.  This commit moves them from the 'inet' subdirectory to
'nss'.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'networks' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:23 +0000 (14:55 +0200)]
Move 'networks' routines from 'inet' into 'nss'

The getnetby* and getnetent* routines are entry points for nss
functionality.  This commit moves them from the 'inet' subdirectory to
'nss'.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'netgroup' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:22 +0000 (14:55 +0200)]
Move 'netgroup' routines from 'inet' into 'nss'

These netgroup routines are entry points for nss functionality.
This commit moves them along with netgroup.h from the 'inet'
subdirectory to 'nss', and adjusts any references accordingly.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'hosts' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:21 +0000 (14:55 +0200)]
Move 'hosts' routines from 'inet' into 'nss'

The gethostby* and gethostent* routines are entry points for nss
functionality.  This commit moves them from the 'inet' subdirectory to
'nss'.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'ethers' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:20 +0000 (14:55 +0200)]
Move 'ethers' routines from 'inet' into 'nss'

ether_hostton and ether_ntohost are entry points for nss functionality.
This commit moves them from the 'inet' subdirectory to 'nss', and
adjusts any references accordingly.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoMove 'aliases' routines from 'inet' into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:19 +0000 (14:55 +0200)]
Move 'aliases' routines from 'inet' into 'nss'

The aliases routines are entry points for nss functionality.  This
commit moves aliases.h and the aliases routines from the 'inet'
subdirectory to 'nss', and adjusts any external references.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoRemove 'shadow' and merge into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:18 +0000 (14:55 +0200)]
Remove 'shadow' and merge into 'nss'

The majority of shadow routines are entry points for nss functionality.
This commit removes the 'shadow' subdirectory and moves all
functionality and tests to 'nss'.  References to shadow/ are accordingly
changed.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoRemove 'pwd' and merge into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:17 +0000 (14:55 +0200)]
Remove 'pwd' and merge into 'nss'

The majority of pwd routines are entry points for nss functionality.
This commit removes the 'pwd' subdirectory and moves all functionality
and tests to 'nss'.  References to pwd/ are accordingly changed.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoRemove 'gshadow' and merge into 'nss'
Arjun Shankar [Mon, 2 Oct 2023 12:55:16 +0000 (14:55 +0200)]
Remove 'gshadow' and merge into 'nss'

The majority of gshadow routines are entry points for nss functionality.
This commit removes the 'gshadow' subdirectory and moves all
functionality and tests to 'nss'.  References to gshadow/ are
accordingly changed.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoRemove 'grp' and merge into 'nss' and 'posix'
Arjun Shankar [Mon, 2 Oct 2023 12:55:15 +0000 (14:55 +0200)]
Remove 'grp' and merge into 'nss' and 'posix'

The majority of grp routines are entry points for nss functionality.
This commit removes the 'grp' subdirectory and moves all nss-relevant
functionality and all tests to 'nss', and the 'setgroups' stub into
'posix' (alongside the 'getgroups' stub).  References to grp/ are
accordingly changed.  In addition, compat-initgroups.c, a fallback
implementation of initgroups is renamed to initgroups-fallback.c so that
the build system does not confuse it for nss_compat/compat-initgroups.c.

Build time improves very slightly; e.g. down from an average of 45.5s to
44.5s on an 8-thread mobile x86_64 CPU.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agomalloc: Fix tst-tcfree3 build csky-linux-gnuabiv2 with fortify source
Adhemerval Zanella [Mon, 23 Oct 2023 16:33:47 +0000 (13:33 -0300)]
malloc: Fix tst-tcfree3 build csky-linux-gnuabiv2 with fortify source

With gcc 13.1 with --enable-fortify-source=2, tst-tcfree3 fails to
build on csky-linux-gnuabiv2 with:

../string/bits/string_fortified.h: In function ‘do_test’:
../string/bits/string_fortified.h:26:8: error: inlining failed in call
to ‘always_inline’ ‘memcpy’: target specific option mismatch
   26 | __NTH (memcpy (void *__restrict __dest, const void *__restrict
      __src,
      |        ^~~~~~
../misc/sys/cdefs.h:81:62: note: in definition of macro ‘__NTH’
   81 | #  define __NTH(fct)    __attribute__ ((__nothrow__ __LEAF)) fct
      |                                                              ^~~
tst-tcfree3.c:45:3: note: called from here
   45 |   memcpy (c, a, 32);
      |   ^~~~~~~~~~~~~~~~~

Instead of relying on -O0 to avoid malloc/free to be optimized away,
disable the builtin.

Reviewed-by: DJ Delorie <dj@redhat.com>
12 months agotest-container: disable ld.so system cache on DSO detection
Simon Chopin [Thu, 5 Oct 2023 12:54:31 +0000 (14:54 +0200)]
test-container: disable ld.so system cache on DSO detection

When building the testroot, the script runs the newly built ld.so on a
couple of binaries in order to copy over any additional libraries
needed. However, if the dependencies are found in the system cache, it
will be copied over using that path.

This is problematic if the system ld.so and the one built don't have the
exact same search configuration. We encountered this in Ubuntu, where we
build a variant of libc with -fno-omit-frame-pointer for accurate
performance profiling.

This variant is built using a non-standard slibdir to be able to be
co-installed with the default library (e.g. slibdir = /lib/libc6-prof).
Since we have /lib pointing to /usr/lib, any additional dependency
should still be reachable via /usr. However, resolving via the cache
might result in the additional DSOs being copied into $testroot/lib, out
of the search path in the container.

The problem has been triggered by 1d5024f4f052c12e404d42d3b5bfe9c3e9fd27c4
("support: Build with exceptions and asynchronous unwind tables [BZ #30587]")
which introduced a dependency on libgcc_s.so.1 under some circumstances.

Downstream bug: https://bugs.launchpad.net/ubuntu/+source/glibc/+bug/2031495
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agoaarch64: Add vector implementations of exp10 routines
Joe Ramsay [Thu, 5 Oct 2023 16:10:52 +0000 (17:10 +0100)]
aarch64: Add vector implementations of exp10 routines

Double-precision routines either reuse the exp table (AdvSIMD) or use
SVE FEXPA intruction.

12 months agoaarch64: Add vector implementations of log10 routines
Joe Ramsay [Thu, 5 Oct 2023 16:10:51 +0000 (17:10 +0100)]
aarch64: Add vector implementations of log10 routines

A table is also added, which is shared between AdvSIMD and SVE log10.

12 months agoaarch64: Add vector implementations of log2 routines
Joe Ramsay [Thu, 5 Oct 2023 16:10:50 +0000 (17:10 +0100)]
aarch64: Add vector implementations of log2 routines

A table is also added, which is shared between AdvSIMD and SVE log2.

12 months agoaarch64: Add vector implementations of exp2 routines
Joe Ramsay [Thu, 5 Oct 2023 16:10:49 +0000 (17:10 +0100)]
aarch64: Add vector implementations of exp2 routines

Some routines reuse table from v_exp_data.c

12 months agoaarch64: Add vector implementations of tan routines
Joe Ramsay [Thu, 5 Oct 2023 16:10:48 +0000 (17:10 +0100)]
aarch64: Add vector implementations of tan routines

This includes some utility headers for evaluating polynomials using
various schemes.

12 months agoelf: ldconfig should skip temporary files created by package managers
Florian Weimer [Fri, 20 Oct 2023 12:29:50 +0000 (14:29 +0200)]
elf: ldconfig should skip temporary files created by package managers

This avoids crashes due to partially written files, after a package
update is interrupted.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agotst-spawn-cgroup.c: Fix argument order of UNSUPPORTED message.
Stefan Liebler [Thu, 19 Oct 2023 12:35:59 +0000 (14:35 +0200)]
tst-spawn-cgroup.c: Fix argument order of UNSUPPORTED message.

The arguments for "expected" and "got" are mismatched.  Furthermore
this patch is dumping both values as hex.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
12 months agoAdd NT_PPC_DEXCR and NT_PPC_HASHKEYR from Linux 6.5 to elf.h
Joseph Myers [Thu, 19 Oct 2023 15:12:09 +0000 (15:12 +0000)]
Add NT_PPC_DEXCR and NT_PPC_HASHKEYR from Linux 6.5 to elf.h

Linux 6.5 adds constants NT_PPC_DEXCR and NT_PPC_HASHKEYR.  Add these
to glibc's elf.h.

Tested for x86_64.

12 months agos390: Fix undefined behaviour in feenableexcept, fedisableexcept [BZ #30960]
Stefan Liebler [Wed, 18 Oct 2023 13:08:40 +0000 (15:08 +0200)]
s390: Fix undefined behaviour in feenableexcept, fedisableexcept [BZ #30960]

If feenableexcept or fedisableexcept gets excepts=FE_INVALID=0x80
as input, we have a signed left shift: 0x80 << 24 which is not
representable as int and thus is undefined behaviour according to
C standard.

This patch casts excepts as unsigned int before shifting, which is
defined.

For me, the observed undefined behaviour is that the shift is done
with "unsigned"-instructions, which is exactly what we want.
Furthermore, I don't get any exception-flags.

After the fix, the code is using the same instruction sequence as
before.

12 months agoelf: Do not print the cache entry if --inhibit-cache is used
Adhemerval Zanella [Tue, 17 Oct 2023 14:50:35 +0000 (11:50 -0300)]
elf: Do not print the cache entry if --inhibit-cache is used

So --help informs the correct shared library search path.
Reviewed-by: Florian Weimer <fweimer@redhat.com>
12 months agoRevert "elf: Always call destructors in reverse constructor order (bug 30785)"
Florian Weimer [Wed, 18 Oct 2023 09:30:38 +0000 (11:30 +0200)]
Revert "elf: Always call destructors in reverse constructor order (bug 30785)"

This reverts commit 6985865bc3ad5b23147ee73466583dd7fdf65892.

Reason for revert:

The commit changes the order of ELF destructor calls too much relative
to what applications expect or can handle.  In particular, during
process exit and _dl_fini, after the revert commit, we no longer call
the destructors of the main program first; that only happens after
some dlopen'ed objects have been destructed.  This robs applications
of an opportunity to influence destructor order by calling dlclose
explicitly from the main program's ELF destructors.  A couple of
different approaches involving reverse constructor order were tried,
and none of them worked really well.  It seems we need to keep the
dependency sorting in _dl_fini.

There is also an ambiguity regarding nested dlopen calls from ELF
constructors: Should those destructors run before or after the object
that called dlopen?  Commit 6985865bc3ad5b2314 used reverse order
of the start of ELF constructor calls for destructors, but arguably
using completion of constructors is more correct.  However, that alone
is not sufficient to address application compatibility issues (it
does not change _dl_fini ordering at all).

12 months agoRevert "elf: Fix compile error with -DNDEBUG [BZ #18755]"
Florian Weimer [Wed, 18 Oct 2023 09:30:38 +0000 (11:30 +0200)]
Revert "elf: Fix compile error with -DNDEBUG [BZ #18755]"

This reverts commit 964d15a007d7fb1258f2ad7c8cf4afcfb9a65719.

Reason for revert: Conflicts with revert of commit 6985865bc3ad5b23147.

12 months agoAdd strlcat/wcslcat testcase.
Sunil K Pandey [Thu, 27 Jul 2023 23:20:49 +0000 (16:20 -0700)]
Add strlcat/wcslcat testcase.

This patch implements comprehensive tests for strlcat/wcslcat
functions.  Tests are mostly derived from strncat test suites
and modified to incorporate strlcat/wcslcat specifications.

Reviewed-by: DJ Delorie <dj@redhat.com>
12 months agoAdd strlcpy/wcslcpy testcase
Sunil K Pandey [Thu, 27 Jul 2023 23:20:37 +0000 (16:20 -0700)]
Add strlcpy/wcslcpy testcase

This patch implements comprehensive tests for strlcpy/wcslcpy
functions.  Tests are mostly derived from strncpy test suites
and modified to incorporate strlcpy/wcslcpy specifications.

Reviewed-by: DJ Delorie <dj@redhat.com>
12 months agoAdd LE DSCP code point from RFC-8622.
Bruno Victal [Tue, 17 Oct 2023 17:00:27 +0000 (19:00 +0200)]
Add LE DSCP code point from RFC-8622.

Signed-off-by: Bruno Victal <mirai@makinata.eu>
Reviewed-by: Florian Weimer <fweimer@redhat.com>
12 months agoAdd HWCAP2_MOPS from Linux 6.5 to AArch64 bits/hwcap.h
Joseph Myers [Tue, 17 Oct 2023 13:13:27 +0000 (13:13 +0000)]
Add HWCAP2_MOPS from Linux 6.5 to AArch64 bits/hwcap.h

Linux 6.5 adds a new AArch64 HWCAP2 value, HWCAP2_MOPS.  Add it to
glibc's bits/hwcap.h.

Tested with build-many-glibcs.py for aarch64-linux-gnu.

12 months agoAdd SCM_SECURITY, SCM_PIDFD to bits/socket.h
Joseph Myers [Mon, 16 Oct 2023 13:19:26 +0000 (13:19 +0000)]
Add SCM_SECURITY, SCM_PIDFD to bits/socket.h

Linux 6.5 adds a constant SCM_PIDFD (recall that the non-uapi
linux/socket.h, where this constant is added, is in fact a header
providing many constants that are part of the kernel/userspace
interface).  This shows up that SCM_SECURITY, from the same set of
definitions and added in Linux 2.6.17, is also missing from glibc,
although glibc has the first two constants from this set, SCM_RIGHTS
and SCM_CREDENTIALS; add both missing constants to glibc.

Tested for x86_64.

12 months agoAdd AT_HANDLE_FID from Linux 6.5 to bits/fcntl-linux.h
Joseph Myers [Mon, 16 Oct 2023 13:18:51 +0000 (13:18 +0000)]
Add AT_HANDLE_FID from Linux 6.5 to bits/fcntl-linux.h

Linux 6.5 adds a constant AT_HANDLE_FID; add it to glibc.  Because
this is a flag for the function name_to_handle_at declared in
bits/fcntl-linux.h, put the flag there rather than alongside other
AT_* flags in (OS-independent) fcntl.h.

Tested for x86_64.

12 months agoAvoid maybe-uninitialized warning in __kernel_rem_pio2
Andreas Schwab [Sun, 8 Oct 2023 16:23:30 +0000 (18:23 +0200)]
Avoid maybe-uninitialized warning in __kernel_rem_pio2

With GCC 14 on 32-bit x86 the compiler emits a maybe-uninitialized
warning:

../sysdeps/ieee754/dbl-64/k_rem_pio2.c: In function '__kernel_rem_pio2':
../sysdeps/ieee754/dbl-64/k_rem_pio2.c:364:20: error: 'fq' may be used uninitialized [-Werror=maybe-uninitialized]
  364 |           y[0] = fq[0]; y[1] = fq[1]; y[2] = fw;
      |                  ~~^~~

This is similar to the warning that is suppressed in the other branch of
the switch.  Help the compiler knowing that the variable is always
initialized, which also makes the suppression obsolete.

12 months agoFix WAIT_FOR_DEBUGGER for container tests.
Stefan Liebler [Thu, 28 Sep 2023 10:50:40 +0000 (12:50 +0200)]
Fix WAIT_FOR_DEBUGGER for container tests.

For container tests, gdb needs to set the sysroot to the corresponding
testroot.root directory.  The assumption was that PIDs < 3 means that
we are running within a container.

Starting with commit 2fe64148a81f0d78050c302f34a6853d21f7cae4
"Allow for unpriviledged nested containers", the default is to use
the PID namespace of the parent.  Thus support_test_main.c does not
recognize our container anymore.

This patch now assumes that we are running inside a container if
test-container.c has set PID_OUTSIDE_CONTAINER and always uses this
PID independent of having a new PID namespace or not.
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
12 months agostdlib: fix grouping verification with multi-byte thousands separator (bug 30964)
Andreas Schwab [Wed, 11 Oct 2023 14:22:16 +0000 (16:22 +0200)]
stdlib: fix grouping verification with multi-byte thousands separator (bug 30964)

The grouping verification only worked for a single-byte thousands
separator.  With a multi-byte separator it returned as if no separators
were present.  The actual parsing in str_to_mpn will then go wrong when
there are multiple adjacent multi-byte separators in the number.

12 months agobuild-many-glibcs: Check for required system tools
DJ Delorie [Thu, 21 Sep 2023 21:24:05 +0000 (17:24 -0400)]
build-many-glibcs: Check for required system tools

Notes for future devs:

* Add tools as you find they're needed, with version 0,0
* Bump version when you find an old tool that doesn't work
* Don't add a version just because you know it works

Co-authored-by: Lukasz Majewski <lukma@denx.de>
Co-authored-by: Adhemerval Zanella Netto <adhemerval.zanella@linaro.org>
13 months agox86: Prepare `strrchr-evex` and `strrchr-evex512` for AVX10
Noah Goldstein [Thu, 21 Sep 2023 14:38:37 +0000 (09:38 -0500)]
x86: Prepare `strrchr-evex` and `strrchr-evex512` for AVX10

This commit refactors `strrchr-evex` and `strrchr-evex512` to use a
common implementation: `strrchr-evex-base.S`.

The motivation is `strrchr-evex` needed to be refactored to not use
64-bit masked registers in preperation for AVX10.

Once vec-width masked register combining was removed, the EVEX and
EVEX512 implementations can easily be implemented in the same file
without any major overhead.

The net result is performance improvements (measured on TGL) for both
`strrchr-evex` and `strrchr-evex512`. Although, note there are some
regressions in the test suite and it may be many of the cases that
make the total-geomean of improvement/regression across bench-strrchr
are cold. The point of the performance measurement is to show there
are no major regressions, but the primary motivation is preperation
for AVX10.

Benchmarks where taken on TGL:
https://www.intel.com/content/www/us/en/products/sku/213799/intel-core-i711850h-processor-24m-cache-up-to-4-80-ghz/specifications.html

EVEX geometric_mean(N=5) of all benchmarks New / Original   : 0.74
EVEX512 geometric_mean(N=5) of all benchmarks New / Original: 0.87

Full check passes on x86.

13 months agoaarch64: Optimise vecmath logs
Joe Ramsay [Wed, 4 Oct 2023 09:38:57 +0000 (10:38 +0100)]
aarch64: Optimise vecmath logs

* Transpose table layout for improved memory access
* Use half-vector special comparisons for AdvSIMD
* Improve register use near special-case branches
  - Due to the presence of a function call, return value would get
    mov-d out of x0 in order to facilitate PCS. By moving the final
    computation after the branch this can be avoided

Also change SVE routines to use overloaded intrinsics for readability.

13 months agoaarch64: Cosmetic change in SVE exp routines
Joe Ramsay [Wed, 4 Oct 2023 09:40:04 +0000 (10:40 +0100)]
aarch64: Cosmetic change in SVE exp routines

Use overloaded intrinsics for readability. Codegen does not
change, however while we're bringing the routines up-to-date with
recent improvements to other routines in AOR it is worth copying
this change over as well.

13 months agoaarch64: Optimize SVE cos & cosf
Joe Ramsay [Wed, 4 Oct 2023 09:37:50 +0000 (10:37 +0100)]
aarch64: Optimize SVE cos & cosf

Saves a mov by ensuring return value does not need to be moved out of
the way before special-case branch. Also change to use overloaded
intrinsics.

13 months agoaarch64: Improve vecmath sin routines
Joe Ramsay [Thu, 5 Oct 2023 09:31:38 +0000 (10:31 +0100)]
aarch64: Improve vecmath sin routines

* Update ULP comment reflecting a new observed max in [-pi/2, pi/2]
* Use the same polynomial in AdvSIMD and SVE, rather than FTRIG instructions
* Improve register use near special-case branch

Also use overloaded intrinsics for SVE.

13 months agonss: Get rid of alloca usage in makedb's write_output.
Joe Simmons-Talbott [Wed, 4 Oct 2023 18:18:02 +0000 (18:18 +0000)]
nss: Get rid of alloca usage in makedb's write_output.

Replace alloca usage with a scratch_buffer.

Reviewed-by: Arjun Shankar <arjun@redhat.com>
13 months agodebug: Add regression tests for BZ 30932
Adhemerval Zanella [Tue, 3 Oct 2023 18:09:36 +0000 (15:09 -0300)]
debug: Add regression tests for BZ 30932

Checked on x86_64-linux-gnu.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
13 months agoFix FORTIFY_SOURCE false positive
Volker Weißmann [Tue, 3 Oct 2023 17:18:44 +0000 (19:18 +0200)]
Fix FORTIFY_SOURCE false positive

When -D_FORTIFY_SOURCE=2 was given during compilation,
sprintf and similar functions will check if their
first argument is in read-only memory and exit with
*** %n in writable segment detected ***
otherwise. To check if the memory is read-only, glibc
reads frpm the file "/proc/self/maps". If opening this
file fails due to too many open files (EMFILE), glibc
will now ignore this error.

Fixes [BZ #30932]

Signed-off-by: Volker Weißmann <volker.weissmann@gmx.de>
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
13 months agonss: Rearrange and sort Makefile variables
Arjun Shankar [Mon, 2 Oct 2023 12:55:14 +0000 (14:55 +0200)]
nss: Rearrange and sort Makefile variables

Rearrange lists of routines, tests, etc. into one-per-line in
nss/Makefile and sort them using scripts/sort-makefile-lines.py.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
13 months agoinet: Rearrange and sort Makefile variables
Arjun Shankar [Mon, 2 Oct 2023 12:55:13 +0000 (14:55 +0200)]
inet: Rearrange and sort Makefile variables

Rearrange lists of routines, tests, etc. into one-per-line in
inet/Makefile and sort them using scripts/sort-makefile-lines.py.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
13 months agoFix off-by-one OOB write in iconv/tst-iconv-mt
Szabolcs Nagy [Mon, 26 Sep 2022 14:38:19 +0000 (15:38 +0100)]
Fix off-by-one OOB write in iconv/tst-iconv-mt

The iconv buffer sizes must not include the \0 string terminator.
And the output termination with *outbufpos = '\0' was OOB.

Consistently use non-null-terminated buffer sizes.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agotunables: Terminate if end of input is reached (CVE-2023-4911)
Siddhesh Poyarekar [Tue, 19 Sep 2023 22:39:32 +0000 (18:39 -0400)]
tunables: Terminate if end of input is reached (CVE-2023-4911)

The string parsing routine may end up writing beyond bounds of tunestr
if the input tunable string is malformed, of the form name=name=val.
This gets processed twice, first as name=name=val and next as name=val,
resulting in tunestr being name=name=val:name=val, thus overflowing
tunestr.

Terminate the parsing loop at the first instance itself so that tunestr
does not overflow.

This also fixes up tst-env-setuid-tunables to actually handle failures
correct and add new tests to validate the fix for this CVE.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
13 months agoPropagate GLIBC_TUNABLES in setxid binaries
Siddhesh Poyarekar [Tue, 19 Sep 2023 17:25:40 +0000 (13:25 -0400)]
Propagate GLIBC_TUNABLES in setxid binaries

GLIBC_TUNABLES scrubbing happens earlier than envvar scrubbing and some
tunables are required to propagate past setxid boundary, like their
env_alias.  Rely on tunable scrubbing to clean out GLIBC_TUNABLES like
before, restoring behaviour in glibc 2.37 and earlier.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
13 months agoLinux: add ST_NOSYMFOLLOW
Kir Kolyshkin [Wed, 27 Sep 2023 22:37:12 +0000 (15:37 -0700)]
Linux: add ST_NOSYMFOLLOW

Linux v5.10 added a mount option MS_NOSYMFOLLOW, which was added to
glibc in commit 0ca21427d950755b.

Add the corresponding statfs/statvfs flag bit, ST_NOSYMFOLLOW.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agoresolve: Remove __res_context_query alloca usage
Adhemerval Zanella [Wed, 20 Sep 2023 10:16:07 +0000 (10:16 +0000)]
resolve: Remove __res_context_query alloca usage

The bufsize on current Linux build is:

   size_t bufsize = (type == 439963904 ? 2 : 1) * (12 + 4 + 255 + 1);

So with upper bound as 544 (2 * (12 + 4 + 255 + 1)).  However, it might
increase to 2 * PACKETSIZE later with malloc.  The default scratch_buffer
should fullfill the most usual allocation requirement.

Checked on x86_64-linux-gnu and i686-linux-gnu.
Reviewed-by: Joe Simmons-Talbott <josimmon@redhat.com>
13 months agomips: dl-machine-reject-phdr: Get rid of alloca.
Joe Simmons-Talbott [Mon, 2 Oct 2023 12:55:27 +0000 (12:55 +0000)]
mips: dl-machine-reject-phdr: Get rid of alloca.

Read directly into the mips_abiflags struct rather than reading the
entire segment and using alloca when the passed buffer is not big enough.

Checked with build-many-glibcs.py on mips-linux-gnu

Tested-by: Ying Huang <ying.huang@oss.cipunited.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agox86: Add support for AVX10 preset and vec size in cpu-features
Noah Goldstein [Wed, 20 Sep 2023 20:44:50 +0000 (15:44 -0500)]
x86: Add support for AVX10 preset and vec size in cpu-features

This commit add support for the new AVX10 cpu features:
https://cdrdv2-public.intel.com/784267/355989-intel-avx10-spec.pdf

We add checks for:
    - `AVX10`: Check if AVX10 is present.
    - `AVX10_{X,Y,Z}MM`: Check if a given vec class has AVX10 support.

`make check` passes and cpuid output was checked against GNR/DMR on an
emulator.

13 months agoresolv: Fix a comment typo in __resolv_conf_load
Arjun Shankar [Fri, 29 Sep 2023 09:35:03 +0000 (11:35 +0200)]
resolv: Fix a comment typo in __resolv_conf_load

The file being referred to is host.conf, not hosts.conf.

13 months agoRemove unused -DRESOLVER getaddrinfo build flag
Arjun Shankar [Fri, 29 Sep 2023 09:13:19 +0000 (11:13 +0200)]
Remove unused -DRESOLVER getaddrinfo build flag

getaddrinfo doesn't look for any RESOLVER defines for conditional
compilation.  Therefore, remove the unnecessary -DRESOLVER build flag in
getaddrinfo's CFLAGS.

Checked on x86_64 for code generation changes; none found.

13 months agoC2x scanf %wN, %wfN support
Joseph Myers [Thu, 28 Sep 2023 17:27:58 +0000 (17:27 +0000)]
C2x scanf %wN, %wfN support

ISO C2x defines scanf length modifiers wN (for intN_t / int_leastN_t /
uintN_t / uint_leastN_t) and wfN (for int_fastN_t / uint_fastN_t).
Add support for those length modifiers, similar to the printf support
previously added.

Tested for x86_64 and x86.

13 months agotest-container: Use nftw instead of rm -rf
Adhemerval Zanella [Wed, 27 Sep 2023 19:20:13 +0000 (16:20 -0300)]
test-container: Use nftw instead of rm -rf

If the binary to run is 'env', test-containers skips it and adds
any required environment variable on the process envs variables.
This simplifies the required code to spawn new process (no need
to build an env-like program).

However, this is an issue for recursive_remove if there is any
LD_PRELOAD, since test-container will not prepend the loader command
along with required paths.  If the required preloaded library can
not be loaded by the system glibc, the 'post-clean rsync' will
eventually fail.

One example is if system glibc does not support DT_RELR and the
built glibc does, the nss/tst-nss-gai-hv2-canonname test fails
with:

../scripts/evaluate-test.sh nss/tst-nss-gai-hv2-canonname $? false false
86_64-linux-gnu/nss/tst-nss-gai-hv2-canonname.test-result
rm: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_ABI_DT_RELR' not
found (required by x86_64-linux-gnu/malloc/libc_malloc_debug.so)

Instead trying to figure out the required loader arguments on how
to spawn the 'rm -rf', replace the command with a nftw call.

Checked on x86_64-linux-gnu.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed-by: Stefan Liebler <stli@linux.ibm.com>
13 months agohurd: Drop REG_GSFS and REG_ESDS from x86_64's ucontext
Samuel Thibault [Wed, 27 Sep 2023 22:07:18 +0000 (00:07 +0200)]
hurd: Drop REG_GSFS and REG_ESDS from x86_64's ucontext

These are useless on x86_64, and __NGREG was actually wrong with them.

13 months agoelf: Fix compile error with -DNDEBUG [BZ #18755]
Qingqing Li [Thu, 21 Sep 2023 12:11:36 +0000 (20:11 +0800)]
elf: Fix compile error with -DNDEBUG [BZ #18755]

Compilation fails when building with -DNDEBUG after commit a3189f66a5f2fe86568286fa025fa153be04c6c0.
Here is the error:

dl-close.c: In function ‘_dl_close_worker’:
dl-close.c:140:22: error: unused variable ‘nloaded’ [-Werror=unused-variable]
  140 |   const unsigned int nloaded = ns->_ns_nloaded;

Add __attribute_maybe_unused__ for‘nloaded’to fix it.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agoMIPS: Add relocation types
Ying Huang [Thu, 31 Aug 2023 03:22:48 +0000 (23:22 -0400)]
MIPS: Add relocation types

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agoMIPS: Add new section type SHT_MIPS_ABIFLAGS
Ying Huang [Thu, 31 Aug 2023 03:22:47 +0000 (23:22 -0400)]
MIPS: Add new section type SHT_MIPS_ABIFLAGS

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agoMIPS: Add ELF file header flags
Ying Huang [Thu, 31 Aug 2023 03:22:46 +0000 (23:22 -0400)]
MIPS: Add ELF file header flags

Now binutils use some E_MIPS_* macros and EF_MIPS_* macros, it is
difficult to decide which style macro we should use when we want
to add new ELF file header flags.
IRIX used to use EF_MIPS_* macros and in elf/elf.h there also has
comments "The following are unofficial names and should not be used".
So we should use EF_MIPS_* to keep same style with the beginning.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agofegetenv_and_set_rn now uses the builtins provided by GCC.
Manjunath Matti [Sat, 23 Sep 2023 15:49:51 +0000 (10:49 -0500)]
fegetenv_and_set_rn now uses the builtins provided by GCC.

On powerpc, SET_RESTORE_ROUND uses inline assembly to optimize the
prologue get/save/set rounding mode operations for POWER9 and
later by using 'mffscrn' where possible, this was introduced by
commit f1c56cdff09f650ad721fae026eb6a3651631f3d.

GCC version 14 onwards supports builtins as __builtin_set_fpscr_rn
which now returns the FPSCR fields in a double. This feature is
available on Power9 when the __SET_FPSCR_RN_RETURNS_FPSCR__ macro
is defined.
GCC commit ef3bbc69d15707e4db6e2f198c621effb636cc26 adds
this feature.

Changes are done to use __builtin_set_fpscr_rn instead of mffscrn
or mffscrni in __fe_mffscrn(rn).

Suggested-by: Carl Love <cel@us.ibm.com>
Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
13 months agoio: Do not implement fstat with fstatat
Adhemerval Zanella [Mon, 11 Sep 2023 13:25:48 +0000 (10:25 -0300)]
io: Do not implement fstat with fstatat

AT_EMPTY_PATH is a requirement to implement fstat over fstatat,
however it does not prevent the kernel to read the path argument.
It is not an issue, but on x86-64 with SMAP-capable CPUs the kernel is
forced to perform expensive user memory access.  After that regular
lookup is performed which adds even more overhead.

Instead, issue the fstat syscall directly on LFS fstat implementation
(32 bit architectures will still continue to use statx, which is
required to have 64 bit time_t support).  it should be even a
small performance gain on non x86_64, since there is no need
to handle the path argument.

Checked on x86_64-linux-gnu.

13 months agolibio: Add nonnull attribute for most FILE * arguments in stdio.h
Xi Ruoyao [Mon, 25 Sep 2023 11:53:26 +0000 (19:53 +0800)]
libio: Add nonnull attribute for most FILE * arguments in stdio.h

During the review of a GCC analyzer test case, we found most stdio
functions accepting a FILE * argument expect it to be nonnull and just
segfault when the argument is NULL.  Add nonnull attribute for them.

fflush and fflush_unlocked are well defined when __stream is NULL so
they are not touched.

For fputs, fgets, fread, fwrite, fprintf, vfprintf, and their unlocked
version, if __stream is empty but there is nothing to read or write,
they did not segfault.  But the standard disallow __stream to be empty
here, so nonnull attribute is also added for them.  Note that this may
blow up some old code already subtly broken.

Also add __nonnull for _chk variants and __fortify_function versions for
them.

Signed-off-by: Xi Ruoyao <xry111@xry111.site>
Reviewed-by: Alejandro Colomar <alx@kernel.org>
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
13 months agoAArch64: Remove -0.0 check from vector sin
Wilco Dijkstra [Tue, 19 Sep 2023 13:03:48 +0000 (14:03 +0100)]
AArch64: Remove -0.0 check from vector sin

Remove the unnecessary extra checks for sin (-0.0) from vector sin/sinf,
improving performance.  Passes regress.

Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com>
13 months agoDocument CVE-2023-4806 and CVE-2023-5156 in NEWS
Siddhesh Poyarekar [Tue, 26 Sep 2023 11:38:07 +0000 (07:38 -0400)]
Document CVE-2023-4806 and CVE-2023-5156 in NEWS

These are tracked in BZ #30884 and BZ #30843.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
13 months agoelf: Add dummy declaration of _dl_audit_objclose for !SHARED
Florian Weimer [Tue, 26 Sep 2023 09:40:12 +0000 (11:40 +0200)]
elf: Add dummy declaration of _dl_audit_objclose for !SHARED

This allows us to avoid some #ifdef SHARED conditionals.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
13 months agoFix leak in getaddrinfo introduced by the fix for CVE-2023-4806 [BZ #30843]
Romain Geissler [Mon, 25 Sep 2023 00:21:51 +0000 (01:21 +0100)]
Fix leak in getaddrinfo introduced by the fix for CVE-2023-4806 [BZ #30843]

This patch fixes a very recently added leak in getaddrinfo.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
This page took 0.125289 seconds and 5 git commands to generate.