platform/upstream/glibc.git
3 years agoio: Return EBAFD for negative file descriptor on fstat (BZ #27559)
Adhemerval Zanella [Thu, 11 Mar 2021 11:21:06 +0000 (08:21 -0300)]
io: Return EBAFD for negative file descriptor on fstat (BZ #27559)

Now that fstat is implemented on top fstatat we need to handle negative
inputs.  The implementation now rejects AT_FDCWD, which would otherwise
be accepted by the kernel.

Checked on x86_64-linux-gnu and on i686-linux-gnu.

3 years agoAllow gdb version 10 in pretty printer tests.
Stefan Liebler [Thu, 11 Mar 2021 09:45:15 +0000 (10:45 +0100)]
Allow gdb version 10 in pretty printer tests.

With gdb 10, the pretty printer tests are UNSUPPORTED::
The gdb version string (gdb -v) is incorrectly formatted.

This is observable in:
nptl/test-cond-printers, nptl/test-condattr-printers,
nptl/test-mutex-printers, nptl/test-mutexattr-printers,
nptl/test-rwlock-printers, nptl/test-rwlockattr-printers

After updating the regexp and building with debug-info,
all those tests are passing.

3 years agoUpdate kernel version to 5.11 in tst-mman-consts.py.
Joseph Myers [Wed, 10 Mar 2021 14:26:57 +0000 (14:26 +0000)]
Update kernel version to 5.11 in tst-mman-consts.py.

This patch updates the kernel version in the test tst-mman-consts.py
to 5.11.  (There are no new MAP_* constants covered by this test in
5.11 that need any other header changes.)

Tested with build-many-glibcs.py.

3 years agoLinux: misc/tst-ofdlocks-compat can be a regular test
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
Linux: misc/tst-ofdlocks-compat can be a regular test

Now that compat_symbol_reference works in non-internal tests.
Also do not build and run the test at all on architectures which
do not have the pre-2.28 symbol version of fcntl.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoLinux: dirent/tst-readdir64-compat can be a regular test
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
Linux: dirent/tst-readdir64-compat can be a regular test

compat_symbol_reference works in non-internal tests now.  Also
avoid building the test for unsupported configurations at all.
I verified by building with build-many-glibcs.py that GLIBC_2.1.3
works as the predecessor of GLIBC_2.2.  (Symbol versions in
the early days are complex.)

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agosunrpc: tst-svc_register can be a regular test
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
sunrpc: tst-svc_register can be a regular test

Now that compat_symbol_reference is not restricted to internal tests
anymore.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoresolv: tst-p_secstodate can be a regular test
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
resolv: tst-p_secstodate can be a regular test

Now that compat_symbol_reference works for non-internal tests, too.
Also do not build and run the tests on architectures which lack the
__p_secstodate compatibility symbol.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoposix: tst-spawn4-compat can be a regular test
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
posix: tst-spawn4-compat can be a regular test

compat_symbol_reference now works for non-internal tests, too.
Also stop building and running the tests on those architectures
that lack the test symbol versions.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoposix: tst-glob_lstat_compat no longer needs to be an internal test
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
posix: tst-glob_lstat_compat no longer needs to be an internal test

compat_symbol_reference is now available for regular tests as well.
Also avoid building and running the tests in case the pre-2.27
symbol version of glob is not available.  This avoids a spurious
UNSUPPORTED result.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agomath: test-matherr and test-matherr-2 can be regular tests
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
math: test-matherr and test-matherr-2 can be regular tests

compat_symbol_reference is now available without tests-internal.
Do not build the test at all on glibc versions that lack the symbols,
to avoid spurious UNSUPPORTED results.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agomath: $(libm-tests-compat) can be regular tests
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
math: $(libm-tests-compat) can be regular tests

tests-internal is no longer needed because compat_symbol_reference
now works in regular tests.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agomalloc: Turn tst-mallocstate into a non-internal test
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
malloc: Turn tst-mallocstate into a non-internal test

compat_symbol_reference no longer needs tests-internal.  Do not build
the test at all for newer targets, so that no spurious UNSUPPORTED
result is generated.  Use compat_symbol_reference for
__malloc_initialize_hook as well, eliminating the need for -rdynamic.

Reviewed-by: DJ Delorie <dj@redhat.com>
3 years ago<shlib-compat.h>: Support compat_symbol_reference for _ISOMAC
Florian Weimer [Tue, 9 Mar 2021 20:07:24 +0000 (21:07 +0100)]
<shlib-compat.h>: Support compat_symbol_reference for _ISOMAC

This is helpful for testing compat symbols in cases where _ISOMAC
is activated implicitly due to -DMODULE_NAME=testsuite and cannot
be disabled easily.

3 years agonss: fix nss_database_lookup2's alternate handling [BZ #27416]
DJ Delorie [Tue, 16 Feb 2021 02:34:23 +0000 (21:34 -0500)]
nss: fix nss_database_lookup2's alternate handling [BZ #27416]

__nss_database_lookup2's extra arguments were left unused in the
nsswitch reloading patch set; this broke compat (default config
ignored) and shadow files (secondary name ignored) which relies on
these fallbacks.

This patch adds in the previous behavior by correcting the
initialization of the database list to reflect the fallbacks.  This
means that the nss_database_lookup2 interface no longer needs to be
passed the fallback info, so API and callers were adjusted.

Since all callers needed to be edited anyway, the calls were changed
from __nss_database_lookup2 to the faster __nss_database_get.  This
was an intended optimization which was deferred during the initial
lookup changes to avoid touching so many files.

The test case verifies that compat targets work (passwd) and that the
default configuration works (group).  Tested on x86-64.

3 years agoNEWS: Add entry for CVE-2021-27645
DJ Delorie [Wed, 3 Mar 2021 19:52:57 +0000 (14:52 -0500)]
NEWS: Add entry for CVE-2021-27645

3 years agotst: Add test for settimeofday
Lukasz Majewski [Sun, 7 Mar 2021 12:11:55 +0000 (13:11 +0100)]
tst: Add test for settimeofday

This code brings test to check if time on target machine is properly set.
To avoid any issues with altering the time:

- The time, which was set before the test was executed is restored.

- The time is altered only when cross-test-ssh.sh is executed with
  --allow-time-setting flag

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Add test for ntp_adjtime
Lukasz Majewski [Sun, 28 Feb 2021 22:26:21 +0000 (23:26 +0100)]
tst: Add test for ntp_adjtime

This test is a wrapper on tst-clock_adjtime test.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Add test for adjtimex
Lukasz Majewski [Sun, 28 Feb 2021 22:03:48 +0000 (23:03 +0100)]
tst: Add test for adjtimex

This test is a wrapper on tst-clock_adjtime test.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Modify tst-clock_adjtime to allow reuse of its code
Lukasz Majewski [Sun, 28 Feb 2021 22:02:54 +0000 (23:02 +0100)]
tst: Modify tst-clock_adjtime to allow reuse of its code

The tst-clock_adjtime can be adjusted to be reused for also testing
adjtimex.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Add test for clock_adjtime
Lukasz Majewski [Wed, 20 Jan 2021 11:10:42 +0000 (12:10 +0100)]
tst: Add test for clock_adjtime

This code privides test to check if time on target machine is properly
adjusted.
The time is altered only when cross-test-ssh.sh is executed with
--allow-time-setting flag.
As the delta added to CLOCK_REALTIME is only 1 sec the original time is
not restored and further tests are executed with this bias.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Add test for clock_settime
Lukasz Majewski [Mon, 18 Jan 2021 15:59:23 +0000 (16:59 +0100)]
tst: Add test for clock_settime

This code brings test to check if time on target machine is properly set.
To avoid any issues with altering the time:

- The time, which was set before the test was executed is restored.

- The time is altered only when cross-test-ssh.sh is executed with
  --allow-time-setting flag

Reviewed-by: DJ Delorie <dj@redhat.com>
3 years agosupport: Provide xclock_settime test helper function
Lukasz Majewski [Mon, 18 Jan 2021 15:53:26 +0000 (16:53 +0100)]
support: Provide xclock_settime test helper function

The xclock_settime is a wrapper function on the clock_settime syscall
to be used in the test code.

It checks if the GLIBC_TEST_ALLOW_TIME_SETTING env variable is defined
in the environment in which test is executed. If it is not - the test
ends as unsupported. Otherwise, the clock-settime is executed and return
value is assessed.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Extend cross-test-ssh.sh to specify if target date can be altered
Lukasz Majewski [Fri, 15 Jan 2021 15:40:39 +0000 (16:40 +0100)]
tst: Extend cross-test-ssh.sh to specify if target date can be altered

This code adds new flag - '--allow-time-setting' to cross-test-ssh.sh
script to indicate if it is allowed to alter the date on the system
on which tests are executed. This change is supposed to be used with
test systems, which use virtual machines for testing.

The GLIBC_TEST_ALLOW_TIME_SETTING env variable is exported to the
remote environment on which the eligible test is run and brings no
functional change when it is not.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoUpdate hppa libm-test-ulps
John David Anglin [Sun, 7 Mar 2021 17:23:34 +0000 (17:23 +0000)]
Update hppa libm-test-ulps

3 years agox86: Set minimum x86-64 level marker [BZ #27318]
H.J. Lu [Tue, 2 Feb 2021 21:45:58 +0000 (13:45 -0800)]
x86: Set minimum x86-64 level marker [BZ #27318]

Since the full ISA set used in an ELF binary is unknown to compiler,
an x86-64 ISA level marker indicates the minimum, not maximum, ISA set
required to run such an ELF binary.  We never guarantee a library with
an x86-64 ISA level v3 marker doesn't contain other ISAs beyond x86-64
ISA level v3, like AVX VNNI.  We check the x86-64 ISA level marker for
the minimum ISA set.  Since -march=sandybridge enables only some ISAs
in x86-64 ISA level v3, we should set the needed ISA marker to v2.
Otherwise, libc is compiled with -march=sandybridge will fail to run on
Sandy Bridge:

$ ./elf/ld.so ./libc.so
./libc.so: (p) CPU ISA level is lower than required: needed: 7; got: 3

Set the minimum, instead of maximum, x86-64 ISA level marker should have
no impact on the glibc-hwcaps directory assignment logic in ldconfig nor
ld.so.

3 years agoposix: glob, glob64 should not be declared __THROW [BZ #27522]
Florian Weimer [Fri, 5 Mar 2021 11:02:20 +0000 (12:02 +0100)]
posix: glob, glob64 should not be declared __THROW [BZ #27522]

These functions invoke callbacks with GLOB_ALTDIRFUNC, so they
are not leaf functions (as implied by _THROW).  Use __THROWNL
and __REDIRECT_NTHNL to express this.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agonptl: Fix __pthread_clockjoin_np64 __pthread_timedjoin_np64 hidden proto
Adhemerval Zanella [Wed, 17 Feb 2021 14:10:52 +0000 (11:10 -0300)]
nptl: Fix __pthread_clockjoin_np64 __pthread_timedjoin_np64 hidden proto

They are both implemented in libpthread instead of libc.

3 years agolinux: Fix __thrd_sleep64 hidden definition
Adhemerval Zanella [Thu, 25 Feb 2021 23:43:13 +0000 (20:43 -0300)]
linux: Fix __thrd_sleep64 hidden definition

The symbol is exported by libc.

3 years agoUpdate arm libm-test-ulps
Adhemerval Zanella [Thu, 4 Mar 2021 19:12:42 +0000 (19:12 +0000)]
Update arm libm-test-ulps

3 years agoUpdate sparc libm-test-ulps
Adhemerval Zanella [Thu, 4 Mar 2021 20:40:20 +0000 (14:40 -0600)]
Update sparc libm-test-ulps

3 years ago[PATCH] pthread_once hangs when init routine throws an exception [BZ #18435]
Jakub Jelinek [Thu, 4 Mar 2021 14:15:33 +0000 (15:15 +0100)]
[PATCH] pthread_once hangs when init routine throws an exception [BZ #18435]

This is another attempt at making pthread_once handle throwing exceptions
from the init routine callback.  As the new testcases show, just switching
to the cleanup attribute based cleanup does fix the tst-once5 test, but
breaks the new tst-oncey3 test.  That is because when throwing exceptions,
only the unwind info registered cleanups (i.e. C++ destructors or cleanup
attribute), when cancelling threads and there has been unwind info from the
cancellation point up to whatever needs cleanup both unwind info registered
cleanups and THREAD_SETMEM (self, cleanup, ...) registered cleanups are
invoked, but once we hit some frame with no unwind info, only the
THREAD_SETMEM (self, cleanup, ...) registered cleanups are invoked.
So, to stay fully backwards compatible (allow init routines without
unwind info which encounter cancellation points) and handle exception throwing
we actually need to register the pthread_once cleanups in both unwind info
and in the THREAD_SETMEM (self, cleanup, ...) way.
If an exception is thrown, only the former will happen and we in that case
need to also unregister the THREAD_SETMEM (self, cleanup, ...) registered
handler, because otherwise after catching the exception the user code could
call deeper into the stack some cancellation point, get cancelled and then
a stale cleanup handler would clobber stack and probably crash.
If a thread calling init routine is cancelled and unwind info ends before
the pthread_once frame, it will be cleaned up through self->cleanup as
before.  And if unwind info is present, unwind_stop first calls the
self->cleanup registered handler for the frame, then it will call the
unwind info registered handler but that will already see __do_it == 0
and do nothing.

3 years agopowerpc: Regenerate ulps
Florian Weimer [Wed, 3 Mar 2021 17:39:17 +0000 (18:39 +0100)]
powerpc: Regenerate ulps

This time on a POWER8 machine.

3 years agos390x: Regenerate ulps
Arjun Shankar [Wed, 3 Mar 2021 11:22:08 +0000 (12:22 +0100)]
s390x: Regenerate ulps

For new test cases in commit 5a051454a9b5.

3 years agonss: Re-enable NSS module loading after chroot [BZ #27389]
DJ Delorie [Thu, 18 Feb 2021 20:26:30 +0000 (15:26 -0500)]
nss: Re-enable NSS module loading after chroot [BZ #27389]

The glibc 2.33 release enabled /etc/nsswitch.conf reloading,
and to prevent potential security issues like CVE-2019-14271
the re-loading of nsswitch.conf and all mdoules was disabled
when the root filesystem changes (see bug 27077).

Unfortunately php-lpfm and openldap both require the ability
to continue to load NSS modules after chroot. The packages
do not exec after the chroot, and so do not cause the
protections to be reset. The only solution is to re-enable
only NSS module loading (not nsswitch.conf reloading) and so
get back the previous glibc behaviour.

In the future we may introduce a way to harden applications
so they do not reload NSS modules once the root filesystem
changes, or that only files/dns are available pre-loaded
(or builtin).

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agonscd: Fix double free in netgroupcache [BZ #27462]
DJ Delorie [Thu, 25 Feb 2021 21:08:21 +0000 (16:08 -0500)]
nscd: Fix double free in netgroupcache [BZ #27462]

In commit 745664bd798ec8fd50438605948eea594179fba1 a use-after-free
was fixed, but this led to an occasional double-free.  This patch
tracks the "live" allocation better.

Tested manually by a third party.

Related: RHBZ 1927877

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agotst: Fix tst-timerfd test
Lukasz Majewski [Sun, 28 Feb 2021 16:28:48 +0000 (17:28 +0100)]
tst: Fix tst-timerfd test

There were following problems discovered for tst-timerfd test:

1. Do not set the struct itimerspec's it_interval tv_sec to 2 seconds.
After this change the timerfd will trigger only once (the it_value is
only set in this case).

2. The 'val1' variable (including the call to timerfd_gettime) is not
needed anymore, as it is just enough to read the struct itimerspec
after sleep. As a consequence the 'val2' has been renamed to 'val'.

3. After calling timerfd_gettime, the value of struct itimerspec time,
when timer is running, is the remaining time. In the case of this test
it would be less than 1 second.
As a result the TEST_COMPARE macro logic had to be adjusted.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoi386: Regenerate ulps
Florian Weimer [Tue, 2 Mar 2021 14:41:29 +0000 (15:41 +0100)]
i386: Regenerate ulps

3 years agox86: Add CPU-specific diagnostics to ld.so --list-diagnostics
Florian Weimer [Wed, 24 Feb 2021 12:12:04 +0000 (13:12 +0100)]
x86: Add CPU-specific diagnostics to ld.so --list-diagnostics

3 years agox86: Automate generation of PREFERRED_FEATURE_INDEX_1 bitfield
Florian Weimer [Tue, 2 Mar 2021 13:58:05 +0000 (14:58 +0100)]
x86: Automate generation of PREFERRED_FEATURE_INDEX_1 bitfield

Use a .def file to define the bitfield layout, so that it is possible
to iterate over field members using the preprocessor.

3 years agold.so: Implement the --list-diagnostics option
Florian Weimer [Tue, 2 Mar 2021 13:38:42 +0000 (14:38 +0100)]
ld.so: Implement the --list-diagnostics option

3 years agopowerpc: Update libm-test-ulps
Matheus Castanho [Mon, 1 Mar 2021 20:07:27 +0000 (14:07 -0600)]
powerpc: Update libm-test-ulps

Generated with 'make regen-ulps'

Tested on powerpc, powerpc64, and powerpc64le

3 years agotst: Add test for utimes
Lukasz Majewski [Wed, 24 Feb 2021 23:58:56 +0000 (00:58 +0100)]
tst: Add test for utimes

This patch provides test for utimes. It uses wrapper to read
access and modification times to compare them with ones written by
utimes.

Moreover, access and modification times beyond the Y2038 threshold
date (i.e. 32 bit time_t overflow) are also checked.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Add test for utime
Lukasz Majewski [Wed, 24 Feb 2021 21:19:06 +0000 (22:19 +0100)]
tst: Add test for utime

This patch provides test for utime. It uses wrapper to read access
and modification times to compare them with ones written by utime.

Moreover, access and modification times beyond the Y2038 threshold
date (i.e. 32 bit time_t overflow) are also checked.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Add test for futimens
Lukasz Majewski [Mon, 8 Feb 2021 09:58:44 +0000 (10:58 +0100)]
tst: Add test for futimens

This patch provides test for futimens. It uses wrapper, which
reads access and modification time to compare them with ones
written by futimens.

Moreover, access and modification times beyond the Y2038 threshold
date (i.e. 32 bit time_t overflow) are also checked.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agonptl: __libc_cleanup_push/__libc_cleanup_pop require -fexceptions
Florian Weimer [Tue, 2 Mar 2021 09:49:03 +0000 (10:49 +0100)]
nptl: __libc_cleanup_push/__libc_cleanup_pop require -fexceptions

Do not define these macros if they do nothing in a particular
compilation, otherwise they can easily be used accidentally, while
not actually achieving anything.

3 years agoelf: Build __dl_iterate_phdr with unwinding support [BZ #27498]
Florian Weimer [Tue, 2 Mar 2021 09:46:45 +0000 (10:46 +0100)]
elf: Build __dl_iterate_phdr with unwinding support [BZ #27498]

3 years agonptl: Use <unwind-link.h> for accessing the libgcc_s unwinder
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
nptl: Use <unwind-link.h> for accessing the libgcc_s unwinder

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoImplement _Unwind_Resume in libc on top of <unwind-link.h>
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
Implement _Unwind_Resume in libc on top of <unwind-link.h>

Temporarily move the arm _Unwind_Resume implementation to the file
used by libpthread.  It will be ported to <unwind-link.h> along with
the rest of nptl.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoMove sysdeps/gnu/unwind-resume.c to sysdeps/generic/unwind-resume.c
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
Move sysdeps/gnu/unwind-resume.c to sysdeps/generic/unwind-resume.c

This change allows architecture-specific sysdeps directories to override
it.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years ago__frame_state_for: Use <unwind-link.h> for unwinder access
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
__frame_state_for: Use <unwind-link.h> for unwinder access

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agosparc: Implement backtrace on top <unwind-link.h>
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
sparc: Implement backtrace on top <unwind-link.h>

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agom68k: Implement backtrace on top of <unwind-link.h>
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
m68k: Implement backtrace on top of <unwind-link.h>

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoi386: Implement backtrace on top of <unwind-link.h>
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
i386: Implement backtrace on top of <unwind-link.h>

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoarm: Implement backtrace on top of <unwind-link.h>
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
arm: Implement backtrace on top of <unwind-link.h>

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agobacktrace: Implement on top of <unwind-link.h>
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
backtrace: Implement on top of <unwind-link.h>

This reimplements the generic version of backtrace.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoImplement <unwind-link.h> for dynamically loading the libgcc_s unwinder
Florian Weimer [Mon, 1 Mar 2021 14:56:36 +0000 (15:56 +0100)]
Implement <unwind-link.h> for dynamically loading the libgcc_s unwinder

This will be used to consolidate the libgcc_s access for backtrace
and pthread_cancel.

Unlike the existing backtrace implementations, it provides some
hardening based on pointer mangling.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agoCorrect buffer end pointer in IO_wdefault_doallocate (BZ #26874)
Martin Sebor [Mon, 1 Mar 2021 05:05:39 +0000 (10:35 +0530)]
Correct buffer end pointer in IO_wdefault_doallocate (BZ #26874)

An experimental build of GCC 11 with an enhanced -Warray-bounds
reports a bug in IO_wdefault_doallocate where the function forms
an invalid past-the-end pointer to an allocated wchar_t buffer
by failingf to consider the scaling by sizeof (wchar_t).

The fix path below corrects this problem.  It keeps the buffer
size the same as opposed to increasing it according to what other
code like it does.

Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
3 years agoaarch64: update ulps.
Szabolcs Nagy [Mon, 1 Mar 2021 12:29:17 +0000 (12:29 +0000)]
aarch64: update ulps.

For new test cases in
commit 5a051454a9b50c27984bbc499ee1297de48e2dc8

3 years agoAdd inputs that generate larger error bounds
Paul Zimmermann [Fri, 26 Feb 2021 07:00:03 +0000 (08:00 +0100)]
Add inputs that generate larger error bounds

(Using values from https://members.loria.fr/PZimmermann/papers/accuracy.pdf)

3 years agoReduce the statically linked startup code [BZ #23323]
Florian Weimer [Thu, 25 Feb 2021 11:10:57 +0000 (12:10 +0100)]
Reduce the statically linked startup code [BZ #23323]

It turns out the startup code in csu/elf-init.c has a perfect pair of
ROP gadgets (see Marco-Gisbert and Ripoll-Ripoll, "return-to-csu: A
New Method to Bypass 64-bit Linux ASLR").  These functions are not
needed in dynamically-linked binaries because DT_INIT/DT_INIT_ARRAY
are already processed by the dynamic linker.  However, the dynamic
linker skipped the main program for some reason.  For maximum
backwards compatibility, this is not changed, and instead, the main
map is consulted from __libc_start_main if the init function argument
is a NULL pointer.

For statically linked binaries, the old approach based on linker
symbols is still used because there is nothing else available.

A new symbol version __libc_start_main@@GLIBC_2.34 is introduced because
new binaries running on an old libc would not run their ELF
constructors, leading to difficult-to-debug issues.

3 years agoposix: Falling back to non wide mode in case of encoding error [BZ #14185]
Adhemerval Zanella [Mon, 4 Jan 2021 17:26:30 +0000 (14:26 -0300)]
posix: Falling back to non wide mode in case of encoding error [BZ #14185]

Gnulib has added the proposed fix with aed23714d60 (done in 2005), but
recently with a glibc merge with 67306f6 (done in 2020 with sync back)
it has fallback to old semantic to return -1 on in case of failure.

From gnulib developer feedback it was an oversight.  Although the full
fix for BZ #14185 would require to rewrite fnmatch implementation to use
mbrtowc instead of mbsrtowcs on the full input, this mitigate the issue
and it has been used by gnulib for a long time.

This patch also removes the alloca usage on the string convertion to
wide characters before calling the internal function.

Checked on x86_64-linux-gnu.

3 years agonptl: Move elision implementations into libc
Florian Weimer [Tue, 23 Feb 2021 13:59:34 +0000 (14:59 +0100)]
nptl: Move elision implementations into libc

The elision interfaces are closely aligned between the targets that
implement them, so declare them in the generic <lowlevellock.h>
file.

Empty .c stubs are provided, so that fewer makefile updates
under sysdeps are needed.  Also simplify initialization via
__libc_early_init.

The symbols __lll_clocklock_elision, __lll_lock_elision,
__lll_trylock_elision, __lll_unlock_elision, __pthread_force_elision
move into libc.  For the time being, non-hidden references are used
from libpthread to access them, but once that part of libpthread
is moved into libc, hidden symbols will be used again.  (Hidden
references seem desirable to reduce the likelihood of transactions
aborts.)

3 years agoNEWS: Add missing bug closures
Samuel Thibault [Tue, 23 Feb 2021 12:35:34 +0000 (13:35 +0100)]
NEWS: Add missing bug closures

3 years agoadded rt to malloc/Depend [BZ #27132]
Paul Zimmermann [Tue, 23 Feb 2021 08:16:39 +0000 (09:16 +0100)]
added rt to malloc/Depend [BZ #27132]

This avoids a failure when a new glibc version is compiled with an older
system librt. Patch proposed by Florian Weimer.

3 years agox86: Use x86/nptl/pthreaddef.h
H.J. Lu [Fri, 12 Feb 2021 17:57:30 +0000 (09:57 -0800)]
x86: Use x86/nptl/pthreaddef.h

1. Move sysdeps/i386/nptl/pthreaddef.h to sysdeps/x86/nptl/pthreaddef.h.
2. Remove sysdeps/x86_64/nptl/pthreaddef.h.

Reviewed-by: DJ Delorie <dj@redhat.com>
3 years agonptl: Move futex-internal into libc
Florian Weimer [Mon, 22 Feb 2021 17:30:52 +0000 (18:30 +0100)]
nptl: Move futex-internal into libc

This moves  __futex_abstimed_wait64 and
__futex_abstimed_wait_cancelable64 and exports these functions as
GLIBC_PRIVATE.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agonptl: Move lowlevellock into libc [BZ #15648]
Florian Weimer [Mon, 22 Feb 2021 17:30:52 +0000 (18:30 +0100)]
nptl: Move lowlevellock into libc [BZ #15648]

And export __lll_lock_wait and __lll_lock_wait_private as
GLIBC_PRIVATE.  This should eliminate the need for the previous
riscv kludge.

3 years agonptl: Move futex-internal.c into main nptl directory
Florian Weimer [Mon, 22 Feb 2021 17:30:52 +0000 (18:30 +0100)]
nptl: Move futex-internal.c into main nptl directory

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agonptl: Reformat Versions
Florian Weimer [Mon, 22 Feb 2021 17:30:52 +0000 (18:30 +0100)]
nptl: Reformat Versions

One symbol per line, lexicographically ordered.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agonptl: Split libpthread-routines into one routine per line
Florian Weimer [Mon, 22 Feb 2021 17:30:52 +0000 (18:30 +0100)]
nptl: Split libpthread-routines into one routine per line

And sort the lines lexicographically.  This will make it easier to review
patches which move symbols from libpthread to libc.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agox86: Remove unused variables for raw cache sizes from cacheinfo.h
Florian Weimer [Mon, 22 Feb 2021 16:36:03 +0000 (17:36 +0100)]
x86: Remove unused variables for raw cache sizes from cacheinfo.h

3 years agoUse Linux 5.11 in build-many-glibcs.py.
Joseph Myers [Mon, 22 Feb 2021 16:11:21 +0000 (16:11 +0000)]
Use Linux 5.11 in build-many-glibcs.py.

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

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

3 years ago<bits/platform/x86.h>: Correct x86_cpu_TBM
H.J. Lu [Tue, 2 Feb 2021 14:49:02 +0000 (06:49 -0800)]
<bits/platform/x86.h>: Correct x86_cpu_TBM

x86_cpu_TBM should be x86_cpu_index_80000001_ecx + 21.

3 years agox86_64/clone.S: Upate comments
H.J. Lu [Sat, 13 Feb 2021 19:46:38 +0000 (11:46 -0800)]
x86_64/clone.S: Upate comments

3 years agoi386/clone.S: Remove redundant EBX load
H.J. Lu [Sun, 14 Feb 2021 03:02:53 +0000 (19:02 -0800)]
i386/clone.S: Remove redundant EBX load

There is no neeed for

call L(here)
L(here):
popl %ebx
addl $_GLOBAL_OFFSET_TABLE_+[.-L(here)], %ebx

before

movl %eax, %ebx

3 years agoaarch64: Remove the unused __read_tp symbol
Szabolcs Nagy [Thu, 18 Feb 2021 10:56:34 +0000 (10:56 +0000)]
aarch64: Remove the unused __read_tp symbol

This was likely a mistake in the original aarch64 port copied over
from arm: on aarch64 tpidr_el0 register is always available.

The __read_tp symbol is visible with static linking, but it's not
part of the public ABI so it should be safe to remove.

3 years agobuild-many-glibcs.py: Use make -O for more consistent log output
Florian Weimer [Mon, 22 Feb 2021 08:39:14 +0000 (09:39 +0100)]
build-many-glibcs.py: Use make -O for more consistent log output

The -O option avoids interleaving (e.g.) compiler error messages
with other build messages, and makes attribution of messages to
commands easier.

According to my tests, the impact on build time is within the noise.

3 years agoconfigure: Replace obsolete AC_TRY_LINK with AC_LINK_IFELSE
Naohiro Tamura [Wed, 17 Feb 2021 01:20:17 +0000 (01:20 +0000)]
configure: Replace obsolete AC_TRY_LINK with AC_LINK_IFELSE

This patch replaces obsolete AC_TRY_LINK with AC_LINK_IFELSE.
It has been confirmed that GNU 'autoconf' 2.69 doesn't change the
'configure' file and suppressed obsolete warning.

3 years agoconfigure: Remove obsolete AC_CHECK_TOOL_PREFIX
Naohiro Tamura [Tue, 16 Feb 2021 12:01:00 +0000 (12:01 +0000)]
configure: Remove obsolete AC_CHECK_TOOL_PREFIX

This patch removes obsolete AC_CHECK_TOOL_PREFIX.
It has been confirmed that AC_CHECK_TOOL_PREFIX is defined as NOP in
GNU 'autoconf' 2.69 [1], so we can safely remove it.
The 'configure' file has been deleted one blank line by the 'autoconf'
2.69 command .

   [1] autoconf-2.69/share/autoconf/autoconf/programs.m4
   181 # AC_CHECK_TOOL_PREFIX
   182 # --------------------
   183 AU_DEFUN([AC_CHECK_TOOL_PREFIX])

3 years agoconfigure: Replace obsoleted AC_HELP_STRING with AS_HELP_STRING
Naohiro Tamura [Mon, 15 Feb 2021 12:31:37 +0000 (12:31 +0000)]
configure: Replace obsoleted AC_HELP_STRING with AS_HELP_STRING

This patch replaces obsoleted AC_HELP_STRING with AS_HELP_STRING.
As of Glibc 2.33, INSTALL says "GNU 'autoconf' 2.69 (exactly)" is
required. So we can safely replace obsoleted macro without worrying
about older autoconf.
This change doesn't affect the contents of "configure" file.

3 years agoUpdate syscall lists for Linux 5.11.
Joseph Myers [Fri, 19 Feb 2021 21:16:27 +0000 (21:16 +0000)]
Update syscall lists for Linux 5.11.

Linux 5.11 has one new syscall, epoll_pwait2.  Update
syscall-names.list and regenerate the arch-syscall.h headers with
build-many-glibcs.py update-syscalls.

Tested with build-many-glibcs.py.

3 years agoCorrect hppa EFD_NONBLOCK, IN_NONBLOCK, SFD_NONBLOCK and TFD_NONBLOCK defines.
John David Anglin [Fri, 19 Feb 2021 17:08:47 +0000 (17:08 +0000)]
Correct hppa EFD_NONBLOCK, IN_NONBLOCK, SFD_NONBLOCK and TFD_NONBLOCK defines.

3 years agostring: Work around GCC PR 98512 in rawmemchr
Florian Weimer [Fri, 19 Feb 2021 12:29:00 +0000 (13:29 +0100)]
string: Work around GCC PR 98512 in rawmemchr

3 years agotst: time: Provide Y2038 tests for mktime (tst-mktime4.c)
Lukasz Majewski [Mon, 25 Jan 2021 12:48:13 +0000 (13:48 +0100)]
tst: time: Provide Y2038 tests for mktime (tst-mktime4.c)

This change adds new test to assess mktime's functionality.

To be more specific - following use cases are checked:
- Pass struct tm as epoch time
- Pass struct tm as value just before Y2038 threshold (returned
  value shall be 0x7FFFFFFF)
- Pass struct tm as the first value after Y2038 threshold
  (expected value - 0x80000000)

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Provide test for difftime
Lukasz Majewski [Mon, 25 Jan 2021 11:51:41 +0000 (12:51 +0100)]
tst: Provide test for difftime

This change adds new test to assess difftime's functionality by
adding some arbitrary offsets to current time_t value (read via
time).

If 64 bit time_t is supported, the same procedure is applied around
the threshold of Y2038 time overflow.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Provide test for ctime
Lukasz Majewski [Thu, 21 Jan 2021 08:33:34 +0000 (09:33 +0100)]
tst: Provide test for ctime

This change adds new test to assess ctime's functionality.

To be more specific - following use cases are checked:
- Pass time_t value as 0 to check if epoch time is converted
- Pass time_t as max value for 32 bit systems
- Pass time_t as the first value after Y2038 threshold

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agotst: Provide test for sched_rr_get_interval
Lukasz Majewski [Mon, 25 Jan 2021 09:26:57 +0000 (10:26 +0100)]
tst: Provide test for sched_rr_get_interval

This change adds new test to assess sched_rr_get_interval's
functionality.

To be more specific - following use cases are checked:
- If the read interval is correct
- If the proper ABI is used - to check if adjacent data is not
  overwritten

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agoS390: Add new hwcap values.
Stefan Liebler [Tue, 16 Feb 2021 15:18:56 +0000 (16:18 +0100)]
S390: Add new hwcap values.

The new hwcap values indicate support for arch14 architecture.

3 years agoaarch64: Fix sys/ptrace.h if linux headers are included
Szabolcs Nagy [Mon, 15 Feb 2021 13:10:03 +0000 (13:10 +0000)]
aarch64: Fix sys/ptrace.h if linux headers are included

If the linux asm/ptrace.h is included before sys/ptrace.h that
breaks the newly added declarations there, so undef the names
that may be defined as macros in the linux header.

3 years agoelf: Do not copy vDSO soname when setting up link map
Florian Weimer [Fri, 12 Feb 2021 17:22:59 +0000 (18:22 +0100)]
elf: Do not copy vDSO soname when setting up link map

The kernel does not put the vDSO at special addresses, so writev can
write the name directly.  Also remove the incorrect comment about not
setting l_name.

Andy Lutomirski confirmed in
<https://lore.kernel.org/linux-api/442A16C0-AE5A-4A44-B261-FE6F817EAF3C@amacapital.net/>
that this copy is not necessary.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
3 years agox86: Remove the extra space between "# endif"
H.J. Lu [Fri, 12 Feb 2021 15:46:32 +0000 (07:46 -0800)]
x86: Remove the extra space between "# endif"

Remove the extra space between "# endif" left over from

commit f380868f6dcfdeae8d449d556298d9c41012ed8d
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Thu Dec 24 15:43:34 2020 -0800

    Remove _ISOMAC check from <cpu-features.h>

3 years agohurd: Fix fstatfs build failure
Adhemerval Zanella [Thu, 11 Feb 2021 20:42:14 +0000 (17:42 -0300)]
hurd: Fix fstatfs build failure

It was added by 1bfbaf7130 where it added a libc_hidden_proto for
__fstatfs but it didn't update the Hurd version as well.

Checked with a build for i686-gnu.

3 years agolinux: Remove stat-check.c
Adhemerval Zanella [Sun, 7 Feb 2021 18:45:15 +0000 (18:45 +0000)]
linux: Remove stat-check.c

The check is moved to LFS fstatat implementation (since it is the
code that actually implements the syscall).

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agolinux: Remove overflow.h
Adhemerval Zanella [Sun, 7 Feb 2021 18:45:12 +0000 (18:45 +0000)]
linux: Remove overflow.h

The header is not used anywhere.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agolinux: Consolidate internal_statvfs
Adhemerval Zanella [Sun, 7 Feb 2021 17:43:02 +0000 (17:43 +0000)]
linux: Consolidate internal_statvfs

Remove the internal_statvfs64.c and open code the implementation
on internal_statvfs.c.  The alpha is now unrequired, the generic
implementation also handles it.

Also, remove unused includes on internal_statvfs.c, and remove
unused arguments on __internal_statvfs{64}.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agolinux: Consolidate statvfs implementations
Adhemerval Zanella [Sat, 6 Feb 2021 11:26:28 +0000 (11:26 +0000)]
linux: Consolidate statvfs implementations

There is no need to handle ENOSYS on fstatfs64 call, required only
for alpha (where is already fallbacks to fstatfs).

Checked on x86_64-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agolinux: Consolidate fstatvfs implementations
Adhemerval Zanella [Sat, 6 Feb 2021 11:32:57 +0000 (11:32 +0000)]
linux: Consolidate fstatvfs implementations

There is no need to handle ENOSYS on fstatfs64 call, required only
for alpha (where is already fallbacks to fstatfs).  The wordsize
internal_statvfs64.c is removed, since how the LFS support is
provided by fstatvfs64.c (used on 64-bit architectures as well).

Checked on x86_64-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agolinux: Consolidate statfs implementations
Adhemerval Zanella [Fri, 5 Feb 2021 21:26:57 +0000 (21:26 +0000)]
linux: Consolidate statfs implementations

The __NR_statfs64 syscall is supported on all architectures but
aarch64, mips64, riscv64, and x86_64.  And newer ABIs also uses
the new statfs64 interface (where the struct size is used as
second argument).

So the default implementation now uses:

  1. __NR_statfs64 for non-LFS call and handle overflow directly
     There is no need to handle __NR_statfs since all architectures
     that only support are LFS only.

  2. __NR_statfs if defined or __NR_statfs64 otherwise for LFS
     call.

Alpha is the only outlier, since it is a 64-bit architecture which
provides non-LFS interface and only provides __NR_statfs64 on
newer kernels (v5.1+).

Checked on x86_64-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agolinux: Consolidate fstatfs implementations
Adhemerval Zanella [Fri, 5 Feb 2021 20:13:58 +0000 (20:13 +0000)]
linux: Consolidate fstatfs implementations

The __NR_fstatfs64 syscall is supported on all architectures but
aarch64, mips64, riscv64, and x86_64.  And newer ABIs also uses
the new fstatfs64 interface (where the struct size is used as
first argument).

So the default implementation now uses:

  1. __NR_fstatfs64 for non-LFS call and handle overflow directly
     There is no need to handle __NR_fstatfs since all architectures
     that only support are LFS only.

  2. __NR_fstatfs if defined or __NR_fstatfs64 otherwise for LFS
     call.

Alpha is the only outlier, it is a 64-bit architecture which
provides non-LFS interface and only provides __NR_fstatfs64 on
newer kernels (5.1+).

Checked on x86_64-linux-gnu.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
3 years agolinux: Set LFS statfs as default
Adhemerval Zanella [Fri, 5 Feb 2021 18:37:02 +0000 (18:37 +0000)]
linux: Set LFS statfs as default

Currently glibc has three different struct statfs{64} definitions:

  1. Non-LFS support where non-LFS and LFS struct have different
     size: alpha, arm, hppa, i686, m68k, microblaze, mips (all abis),
     powerpc32, s390, sh4, and sparc.

  2. Non-LFS support where non-LFS and LFS struct have the same
     size: csky and nios2.

  3. Only LFS support (where both struct have the same size): arc,
     ia64, powerpc64 (including LE), riscv (both 32 and 64 bits),
     s390x, sparc64, and x86 (including x32).

The STATFS_IS_STATFS64/__STATFS_MATCHES_STATFS64 does not tell apart
between 1. and 2. since for both the only difference is the struct
size (for 2. both non-LFS and LFS uses the same syscall, where for
1. the old non-LFS is used for [f]statfs).

This patch move the generic statfs.h for both csky and nios2, and
make the default definitions for newer ABIs to assume that only
LFS will be support (so there is no need to keep no-LFS and LFS
struct statfs with the same size, it will be implicit).

This patch does not change the code generation.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>