Commit Graph

195 Commits

Author SHA1 Message Date
Siddhesh Poyarekar
224d8c1890 debug: Synchronize feature guards in fortified functions [BZ #28746]
Some functions (e.g. stpcpy, pread64, etc.) had moved to POSIX in the
main headers as they got incorporated into the standard, but their
fortified variants remained under __USE_GNU.  As a result, these
functions did not get fortified when _GNU_SOURCE was not defined.

Add test wrappers that check all functions tested in tst-chk0 at all
levels with _GNU_SOURCE undefined and then use the failures to (1)
exclude checks for _GNU_SOURCE functions in these tests and (2) Fix
feature macro guards in the fortified function headers so that they're
the same as the ones in the main headers.

This fixes BZ #28746.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
(cherry picked from commit fcfc908681)
2022-03-11 20:36:24 +05:30
Adhemerval Zanella
e09e7b1492 support: Add support_socket_so_timestamp_time64
Check if the socket support 64-bit network packages timestamps
(SO_TIMESTAMP and SO_TIMESTAMPNS).  This will be used on recvmsg
and recvmmsg tests to check if the timestamp should be generated.

Reviewed-by: Florian Weimer <fweimer@redhat.com>

(cherry picked from 38bc0f4e78)
2022-02-01 15:52:33 -03:00
Siddhesh Poyarekar
062ff490c1 support: Add helpers to create paths longer than PATH_MAX
Add new helpers support_create_and_chdir_toolong_temp_directory and
support_chdir_toolong_temp_directory to create and descend into
directory trees longer than PATH_MAX.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
(cherry picked from commit fb7bff12e8)
2022-01-24 11:35:18 +05:30
Siddhesh Poyarekar
558168c78e support: Also return fd when it is 0
The fd validity check in open_dev_null checks if fd > 0, which would
lead to a leaked fd if it is == 0.

Signed-off-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
(cherry picked from commit 27b6edbb09)
2021-10-06 22:26:05 +05:30
Florian Weimer
4bf7251998 support: Add check for TID zero in support_wait_for_thread_exit
Some kernel versions (observed with kernel 5.14 and earlier) can list
"0" entries in /proc/self/task.  This happens when a thread exits
while the task list is being constructed.  Treat this entry as not
present, like the proposed kernel patch does:

[PATCH] procfs: Do not list TID 0 in /proc/<pid>/task
<https://lore.kernel.org/all/8735pn5dx7.fsf@oldenburg.str.redhat.com/>

Fixes commit 032d74eaf6 ("support: Add
support_wait_for_thread_exit").

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
(cherry picked from commit 176c88f521)
2021-10-01 18:17:19 +02:00
Adhemerval Zanella
5ad589d63b support: Add support_open_dev_null_range
It returns a range of file descriptor referring to the '/dev/null'
pathname.  The function takes care of restarting the open range
if a file descriptor is found within the specified range and
also increases RLIMIT_NOFILE if required.

Checked on x86_64-linux-gnu.

(cherry picked from commit e814f4b04e)
2021-09-21 22:26:26 +12:00
Florian Weimer
addc9d62d6 support: Add support_wait_for_thread_exit
(cherry picked from commit 032d74eaf6)
2021-09-13 13:38:51 +02:00
Siddhesh Poyarekar
7ff4da3dc2 copy_and_spawn_sgid: Avoid double calls to close()
If close() on infd and outfd succeeded, reset the fd numbers so that
we don't attempt to close them again.

Reviewed-by: Arjun Shankar <arjun@redhat.com>
(cherry picked from commit 45caed9d67)
2021-08-04 15:53:46 +05:30
Siddhesh Poyarekar
70d08ba204 tests: use xmalloc to allocate implementation array
The benchmark and tests must fail in case of allocation failure in the
implementation array.  Also annotate the x* allocators in support.h so
that the compiler has more information about them.

Reviewed-by: Florian Weimer <fweimer@redhat.com>
2021-07-28 17:45:19 +05:30
H.J. Lu
17cef890c9 support: Replace _SC_MINSIGSTKSZ with _SC_SIGSTKSZ
Replace _SC_MINSIGSTKSZ with _SC_SIGSTKSZ since sysconf (_SC_MINSIGSTKSZ)
returns the minimum number of bytes of free stack space required in order
to guarantee successful, non-nested handling of a single signal whose
handler is an empty function while sysconf (_SC_SIGSTKSZ) returns the
suggested minimum number of bytes of stack space required for a signal
stack.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-07-11 07:57:31 -07:00
H.J. Lu
28d07380c2 support: Replace MINSIGSTKSZ with sysconf (_SC_MINSIGSTKSZ)
Replace MINSIGSTKSZ with sysconf (_SC_MINSIGSTKSZ) since the constant
MINSIGSTKSZ used in glibc build may be too small.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-07-09 15:20:55 -07:00
H.J. Lu
5d98a7dae9 Define PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN)
The constant PTHREAD_STACK_MIN may be too small for some processors.
Rename _SC_SIGSTKSZ_SOURCE to _DYNAMIC_STACK_SIZE_SOURCE.  When
_DYNAMIC_STACK_SIZE_SOURCE or _GNU_SOURCE are defined, define
PTHREAD_STACK_MIN to sysconf(_SC_THREAD_STACK_MIN) which is changed
to MIN (PTHREAD_STACK_MIN, sysconf(_SC_MINSIGSTKSZ)).

Consolidate <bits/local_lim.h> with <bits/pthread_stack_min.h> to
provide a constant target specific PTHREAD_STACK_MIN value.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-07-09 15:10:35 -07:00
Adhemerval Zanella
ae8c243d24 support: Add support_stack_alloc
The code to allocate a stack from xsigstack is refactored so it can
be more generic.  The new support_stack_alloc() also set PROT_EXEC
if DEFAULT_STACK_PERMS has PF_X.  This is required on some
 architectures (hppa for instance) and trying to access the rtld
global from testsuite will require more intrusive refactoring
in the ldsodefs.h header.

Checked on x86_64-linux-gnu and i686-linux-gnu.  I also ran
tst-xsigstack on both hppa and ia64.
2021-07-08 13:48:06 -03:00
Florian Weimer
97ed4749be support: Fix xclone build failures on ia64 and hppa 2021-06-25 09:36:28 +02:00
Adhemerval Zanella
de8995a2a0 support: Add xclone
It is a wrapper for Linux clone syscall, to simplify the call to the
use only the most common arguments and remove architecture specific
handling (such as ia64 different name and signature).
2021-06-24 10:00:52 -03:00
Adhemerval Zanella
92f7b46510 support: Add support_create_timer
It is a simple wrapper over timer_create, timer_settime, and
sigaction.  It will be used to check for large timeout to trigger an
EINTR and to avoid use a large timeout (as for alarm()).

Reviewed-by: Lukasz Majewski <lukma@denx.de>
2021-06-22 12:09:52 -03:00
Adhemerval Zanella
372d2ef1f9 libsupport: Add 64-bit time_t support for stat functions
The patch adds redirections for xstat, xlstat, and xfstat when
_TIME_BITS=64 is defined.

Reviewed-by: Lukasz Majewski <lukma@denx.de>
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Tested-by: Carlos O'Donell <carlos@redhat.com>
2021-06-15 10:42:11 -03:00
Adhemerval Zanella
e9bc2b3b38 libsupport: Add 64-bit time_t support for time functions
The patch adds redirections for xclock_gettime, xclock_settime,
timespec_add, timespec_sub, test_timespec_before_impl,
test_timespec_equal_or_after_impl, support_timespec_ns,
support_timespec_normalize, and support_timespec_check_in_range when
_TIME_BITS=64 is defined.

Co-authored-by: Lukasz Majewski <lukma@denx.de>
Tested-by: Carlos O'Donell <carlos@redhat.com>
2021-06-15 10:42:11 -03:00
Florian Weimer
acc85ea1eb io: Fix sporadic test failures in io/tst-stat
support_stat_nanoseconds cannot restore the ctime time, and
this may lead to sporadic test failures.  Therefore, probe for
nanoseconds support before the initial statx call.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2021-06-10 13:48:26 +02:00
Adhemerval Zanella
271ec55d0a support: Do not build xpthread_attr_setaffinity_np for hurd
It does not provide pthread_attr_setaffinity_np extension.
2021-05-28 16:00:19 -03:00
Adhemerval Zanella
d85ad0e58a support: Add xpthread_attr_setaffinity_np wrapper 2021-05-27 13:12:07 -03:00
Siddhesh Poyarekar
c7d200400c support: Free gdb_script_name
Identified by static analysis.
2021-05-13 08:07:23 +05:30
Siddhesh Poyarekar
75fe6d1a16 support: Close fds in copy_func
copy_func may leave file descriptors open on error, so close them on
function exit.
2021-05-13 08:07:20 +05:30
Adhemerval Zanella
49a40ba18e libsupport: Add support_select_normalizes_timeout
It will be used on a select() test.
2021-04-12 18:38:37 -03:00
Adhemerval Zanella
5628f103f5 libsupport: Add support_select_modifies_timeout
It will be used on a select() test.
2021-04-12 18:38:37 -03:00
Siddhesh Poyarekar
716a3bdc41 support: Add capability to fork an sgid child
Add a new function support_capture_subprogram_self_sgid that spawns an
sgid child of the running program with its own image and returns the
exit code of the child process.  This functionality is used by at
least three tests in the testsuite at the moment, so it makes sense to
consolidate.

There is also a new function support_subprogram_wait which should
provide simple system() like functionality that does not set up file
actions.  This is useful in cases where only the return code of the
spawned subprocess is interesting.

This patch also ports tst-secure-getenv to this new function.  A
subsequent patch will port other tests.  This also brings an important
change to tst-secure-getenv behaviour.  Now instead of succeeding, the
test fails as UNSUPPORTED if it is unable to spawn a setgid child,
which is how it should have been in the first place.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2021-04-12 19:03:19 +05:30
Adhemerval Zanella
4d8cf564a2 support: Fix hurd build after bfddda2570 2021-04-01 13:55:46 -03:00
Adhemerval Zanella
bfddda2570 io: Check at runtime if timestamp supports nanoseconds
Now that non-LFS stat function is implemented on to on LFS, it will
use statx when available.  It allows to check for nanosecond timestamp
if the kernel supports __NR_statx.

Checked on s390-linux-gnu with 4.12.14 kernel.
2021-03-31 17:20:14 -03:00
Adhemerval Zanella
6fbc0540de support: Add support_path_support_time64_value
It allows to check for support on arbitrary timestamp values.
2021-03-29 10:22:13 -03:00
Stefan Liebler
1966f47a1e S390: Don't test nanoseconds in io/tst-stat.c
Both new tests io/tst-stat and io/tst-stat-lfs (_FILE_OFFSET_BITS=64)
are comparing the nanosecond fields with the statx result.  Unfortunately
on s390(31bit) those fields are always zero if old KABI with non-LFS
support is used.  With _FILE_OFFSET_BITS=64 stat is using statx internally.

As suggested by Adhemerval this patch disables the nanosecond check for
s390(31bit).
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2021-03-26 10:21:13 +01:00
Adhemerval Zanella
48593b505b support: Use syscall function instead of INLINE_SYSCALL_CALL
It fixes the build on ARM in thumb mode that requires an out of the
line helper (__libc_do_syscall) to issue the syscall.
2021-03-18 17:52:09 -03:00
Siddhesh Poyarekar
e958490f8c support: Pass environ to child process
Pass environ to posix_spawn so that the child process can inherit
environment of the test.
2021-03-16 19:06:36 +05:30
Siddhesh Poyarekar
95c68080a3 support: Typo and formatting fixes
- Add a newline to the end of error messages in transfer().
- Fixed the name of support_subprocess_init().
2021-03-15 20:16:27 +05:30
Adhemerval Zanella
0280b390fb support: Add xpthread_kill
Checked on x86_64-linux-gnu.
2021-03-12 10:20:18 -03:00
Adhemerval Zanella
b2970919ba io: Return UNSUPPORTED if filesystem do not support 64 bit timestamps
Some Linux filesystems might not fully support 64 bit timestamps [1],
which make some Linux specific tests to fail when they check for the
functionality.

This patch adds a new libsupport function, support_path_support_time64,
that returns whether the target file supports or not 64 bit timestamps.
The support is checked by issuing a utimensat and verifying both the
last access and last modification time against a statx call.

The tests that might fail are also adjusted to check the file support
as well:

  $ dd if=/dev/zero of=loopbackfile.img bs=100M count=1
  1+0 records in
  1+0 records out
  104857600 bytes (105 MB, 100 MiB) copied, 0,0589568 s, 1,8 GB/s
  $ sudo losetup -fP loopbackfile.img
  $ mkfs.xfs loopbackfile.img
  meta-data=loopbackfile.img       isize=512    agcount=4, agsize=6400 blks
           =                       sectsz=512   attr=2, projid32bit=1
           =                       crc=1        finobt=1, sparse=1, rmapbt=0
           =                       reflink=1
  data     =                       bsize=4096   blocks=25600, imaxpct=25
           =                       sunit=0      swidth=0 blks
  naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
  log      =internal log           bsize=4096   blocks=1368, version=2
           =                       sectsz=512   sunit=0 blks, lazy-count=1
  realtime =none                   extsz=4096   blocks=0, rtextents=0
  $ mkdir loopfs
  $ sudo mount -o loop /dev/loop0 loopfs/
  $ sudo chown -R azanella:azanella loopfs
  $ TMPDIR=loopfs/ ./testrun.sh misc/tst-utimes
  error: ../sysdeps/unix/sysv/linux/tst-utimes.c:55: File loopfs//utimesfECsK1 does not support 64-bit timestamps

[1] https://bugzilla.redhat.com/show_bug.cgi?id=1795576
2021-03-12 10:17:31 -03:00
DJ Delorie
20bee71348 test-container: Always copy test-specific support files [BZ #27537]
There's a small chance that a fresh checkout will result in some of
the test-specific container files will have the same timestamp and
size, which breaks the rsync logic in test-container, resulting in
tests running with the wrong support files.

This patch changes the rsync logic to always copy the test-specific
files, which normally would always be copied anyway.  The rsync logic
for the testroot itself is unchanged.
2021-03-11 17:04:12 -05:00
Lukasz Majewski
a156555007 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>
2021-03-08 22:41:28 +01:00
Adhemerval Zanella
a50a080f6b elf: Fix tests that rely on ld.so.cache for cross-compiling
For configurations with cross-compiling equal to 'maybe' or 'no',
ldconfig will not run and thus the ld.so.cache will not be created
on the container testroot.pristine.

This lead to failures on both tst-glibc-hwcaps-prepend-cache and
tst-ldconfig-ld_so_conf-update on environments where the same
compiler can be used to build different ABIs (powerpc and x86 for
instance).

This patch addas a new test-container hook, ldconfig.run, that
triggers a ldconfig execution prior the test execution.

Checked on x86_64-linux-gnu and i686-linux-gnu.
2021-01-29 14:08:18 -03:00
Adhemerval Zanella
42dda89dcb posix: Fix return value of system if shell can not be executed [BZ #27053]
POSIX states that system returned code for failure to execute the shell
shall be as if the shell had terminated using _exit(127).  This
behaviour was removed with 5fb7fc9635.

Checked on x86_64-linux-gnu.
2021-01-11 12:26:58 -03:00
Adhemerval Zanella
7b9c3260bc support: Add xchmod wrapper
Checked on x86_64-linux-gnu.
2021-01-11 12:26:58 -03:00
Alexandra Hájková
7a72265436 Add xfchmod to libsupport 2021-01-10 18:55:47 +01:00
Alexandra Hájková
a7e9dbb774 Add xchdir to libsupport. 2021-01-09 17:47:50 +01:00
Adhemerval Zanella
ecdb06cdf2 support: Add support_small_thread_stack_size
It returns the minimum stack size large enough to cover most internal
glibc stack usage.
2021-01-05 11:33:16 -03:00
Paul Eggert
2b778ceb40 Update copyright dates with scripts/update-copyrights
I used these shell commands:

../glibc/scripts/update-copyrights $PWD/../gnulib/build-aux/update-copyright
(cd ../glibc && git commit -am"[this commit message]")

and then ignored the output, which consisted lines saying "FOO: warning:
copyright statement not found" for each of 6694 files FOO.
I then removed trailing white space from benchtests/bench-pthread-locks.c
and iconvdata/tst-iconv-big5-hkscs-to-2ucs4.c, to work around this
diagnostic from Savannah:
remote: *** pre-commit check failed ...
remote: *** error: lines with trailing whitespace found
remote: error: hook declined to update refs/heads/master
2021-01-02 12:17:34 -08:00
Samuel Thibault
f9c3cf2864 support: Make support_process_state_wait wait less
Tests such as posix/tst-waitid.c make heavy use of
support_process_state_wait, and thus on non-Linux where it falls back
to sleeping, a 2s sleep makes such test time out, while 1s remains
fine enough.
2020-12-28 23:17:56 +01:00
Florian Weimer
cb81264fd9 support: Add support_slibdir_prefix variable
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
2020-12-11 18:30:57 +01:00
Florian Weimer
603ae243f6 support: Add support_copy_file
Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
2020-11-26 18:19:46 +01:00
Adhemerval Zanella
60854f40ea support: Add create_temp_file_in_dir
It allows created a temporary file in a specified directory.
2020-10-16 14:19:23 -03:00
Florian Weimer
08443b1996 support: Provide a way to clear the RA bit in DNS server responses 2020-10-14 10:54:39 +02:00
Florian Weimer
873e239a4c support: Provide a way to reorder responses within the DNS test server 2020-10-14 10:54:39 +02:00