about summary refs log tree commit diff
path: root/posix
Commit message (Collapse)AuthorAgeFilesLines
* posix: Consolidate register-atforkAdhemerval Zanella2021-03-122-1/+149
| | | | | | | | | | | | | Both htl and nptl uses a different data structure to implement atfork handlers. The nptl one was refactored by 27761a1042d to use a dynarray which simplifies the code. This patch moves the nptl one to be the generic implementation and replace Hurd linked one. Different than previous NPTL, Hurd also uses a global lock, so performance should be similar. Checked on x86_64-linux-gnu, i686-linux-gnu, and with a build for i686-gnu.
* posix: tst-spawn4-compat can be a regular testFlorian Weimer2021-03-092-10/+7
| | | | | | | | 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>
* posix: tst-glob_lstat_compat no longer needs to be an internal testFlorian Weimer2021-03-092-16/+11
| | | | | | | | | 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>
* posix: glob, glob64 should not be declared __THROW [BZ #27522]Florian Weimer2021-03-051-6/+6
| | | | | | | | 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>
* posix: Falling back to non wide mode in case of encoding error [BZ #14185]Adhemerval Zanella2021-02-232-104/+58
| | | | | | | | | | | | | | | | 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.
* tst: Provide test for sched_rr_get_intervalLukasz Majewski2021-02-162-1/+46
| | | | | | | | | | | | 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>
* regex: stop using allocaAdhemerval Zanella2021-02-091-19/+0
| | | | | | | It syncs with gnulib version 87ed1f9c4. No functional changes is expected. Checked on x86_64-linux-gnu.
* regexec: remove alloca usage in build_trtableAdhemerval Zanella2021-02-091-62/+13
| | | | | | | | | | | | It syncs with gnulib version 1731fef3d. On build_trtable prevent inlining, so that it doesn't bloat the caller's stack and use auto variables instead of alloca/malloc. After these changes, build_trtable's total stack allocation is only 20 KiB on a 64-bit machine, and this is less than glibc's 64 KiB cutoff so there's little point to using alloca to shrink it. Checked on x86_64-linux-gnu.
* regex: remove alloca usage on regex set_regsAdhemerval Zanella2021-02-091-22/+18
| | | | | | | It syncs with gnulib version b6207ab38. It replaces the regmatch_t with a dynarray list. Checked on x86_64-linux-gnu.
* linux: Require /dev/shm as the shared memory file systemFlorian Weimer2021-02-083-1/+49
| | | | | | | | | | | | | | | | | | | | | Previously, glibc would pick an arbitrary tmpfs file system from /proc/mounts if /dev/shm was not available. This could lead to an unsuitable file system being picked for the backing storage for shm_open, sem_open, and related functions. This patch introduces a new function, __shm_get_name, which builds the file name under the appropriate (now hard-coded) directory. It is called from the various shm_* and sem_* function. Unlike the SHM_GET_NAME macro it replaces, the callers handle the return values and errno updates. shm-directory.c is moved directly into the posix subdirectory because it can be implemented directly using POSIX functionality. It resides in libc because it is needed by both librt and nptl/htl. In the sem_open implementation, tmpfname is initialized directly from a string constant. This happens to remove one alloca call. Checked on x86_64-linux-gnu.
* posix/tst-rfc3484: Fix compile failure linking to local __stat64Stafford Horne2021-02-033-0/+3
| | | | | | | | | | | | | | | | | After 04986243d1 ("Remove internal usage of extensible stat functions") linking the __stat64 symbol in getaddrinfo for this test fails with the below error: [...] or1k-smh-linux-gnu/bin/ld: [...]/posix/tst-rfc3484.o: in function `gaiconf_reload': [...]/sysdeps/posix/getaddrinfo.c:2136: undefined reference to `__stat64' collect2: error: ld returned 1 exit status This is because __stat64 is a local symbol, the test includes the getaddrinfo directly and fails to link against the local symbol. Fix this by setting up an alias to the global stat64 symbol name like is done for other local symbol usage. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* sysconf: Add _SC_MINSIGSTKSZ/_SC_SIGSTKSZ [BZ #20305]H.J. Lu2021-02-011-0/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Add _SC_MINSIGSTKSZ for the minimum signal stack size derived from AT_MINSIGSTKSZ, which is the minimum number of bytes of free stack space required in order to gurantee successful, non-nested handling of a single signal whose handler is an empty function, and _SC_SIGSTKSZ which is the suggested minimum number of bytes of stack space required for a signal stack. If AT_MINSIGSTKSZ isn't available, sysconf (_SC_MINSIGSTKSZ) returns MINSIGSTKSZ. On Linux/x86 with XSAVE, the signal frame used by kernel is composed of the following areas and laid out as: ------------------------------ | alignment padding | ------------------------------ | xsave buffer | ------------------------------ | fsave header (32-bit only) | ------------------------------ | siginfo + ucontext | ------------------------------ Compute AT_MINSIGSTKSZ value as size of xsave buffer + size of fsave header (32-bit only) + size of siginfo and ucontext + alignment padding. If _SC_SIGSTKSZ_SOURCE or _GNU_SOURCE are defined, MINSIGSTKSZ and SIGSTKSZ are redefined as /* Default stack size for a signal handler: sysconf (SC_SIGSTKSZ). */ # undef SIGSTKSZ # define SIGSTKSZ sysconf (_SC_SIGSTKSZ) /* Minimum stack size for a signal handler: SIGSTKSZ. */ # undef MINSIGSTKSZ # define MINSIGSTKSZ SIGSTKSZ Compilation will fail if the source assumes constant MINSIGSTKSZ or SIGSTKSZ. The reason for not simply increasing the kernel's MINSIGSTKSZ #define (apart from the fact that it is rarely used, due to glibc's shadowing definitions) was that userspace binaries will have baked in the old value of the constant and may be making assumptions about it. For example, the type (char [MINSIGSTKSZ]) changes if this #define changes. This could be a problem if an newly built library tries to memcpy() or dump such an object defined by and old binary. Bounds-checking and the stack sizes passed to things like sigaltstack() and makecontext() could similarly go wrong.
* posix: Fix fnmatch.c on bootstrapAdhemerval Zanella2021-01-201-1/+1
| | | | | | | | | Only define FALLTHROUGH for _LIBC and do not check __clang_major__ value. It partially syncs with gnulib 5c52f00c69f39fe. Checked with build-many-glibcs.py for aarch64-linux-gnu.
* posix: Fix regex_internal.h on bootstrapAdhemerval Zanella2021-01-201-2/+4
| | | | | | | | | | Only define FALLTHROUGH for _LIBC and do not check __clang_major__ value. It partially syncs with gnulib 5c52f00c69f39fe. Checked with build-many-glibcs.py for aarch64-linux-gnu, x86_64-linux-gnu, and s390x-linux-gnu.
* posix: Correct attribute access mode on readlinkat [BZ #27024].Martin Sebor2021-01-101-1/+1
|
* posix: Sync fnmatch with gnulibAdhemerval Zanella2021-01-042-1317/+1208
| | | | | | It sync with gnulib commit 43ee1a6bf. Checked on x86_64-linux-gnu.
* Sync flexmember.h with gnulibAdhemerval Zanella2021-01-041-5/+20
| | | | It sync with gnulib commit 43ee1a6bf.
* posix: Sync glob code with gnulibAdhemerval Zanella2021-01-043-866/+886
| | | | | | | It sync with gnulib commit 43ee1a6bf and fixes and use-after-free bug (gnulib commit 717766da8926e36). Checked on x86_64-linux-gnu.
* posix: Sync regex code with gnulibAdhemerval Zanella2021-01-044-19/+35
| | | | | | | It sync with gnulib commit 43ee1a6bf. The main change is 9682f18e9. (which does not have a meaniful description). Checked on x86_64-linux-gnu.
* Update copyright dates not handled by scripts/update-copyrights.Paul Eggert2021-01-021-1/+1
| | | | | | | | | | | | | | I've updated copyright dates in glibc for 2021. This is the patch for the changes not generated by scripts/update-copyrights and subsequent build / regeneration of generated files. As well as the usual annual updates, mainly dates in --version output (minus csu/version.c which previously had to be handled manually but is now successfully updated by update-copyrights), there is a small change to the copyright notice in NEWS which should let NEWS get updated automatically next year. Please remember to include 2021 in the dates for any new files added in future (which means updating any existing uncommitted patches you have that add new files to use the new copyright dates in them).
* Update copyright dates with scripts/update-copyrightsPaul Eggert2021-01-02245-245/+245
| | | | | | | | | | | | | | | | 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
* nonstring: Enable __FORTIFY_LEVEL=3Siddhesh Poyarekar2020-12-311-54/+66
| | | | | Use __builtin_dynamic_object_size in the remaining functions that don't have compiler builtins as is the case for string functions.
* nsswitch: use new internal API (callers)DJ Delorie2020-12-043-3/+3
| | | | | | Stitch new ABI and types throughout all NSS callers. Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
* Mark mtrace tests UNSUPPORTED if bug-ga2.mtrace or tst-leaks2.mtrace are missingStefan Liebler2020-11-251-1/+3
| | | | | | | | | | | | | | Starting with commit 29fddfc7dfd6444fa61a256e9a0d0127545e1f2e, the tests posix/bug-ga2 and resolv/tst-leaks2 are test-container tests. If test-container.c returns with EXIT_UNSUPPORTED, the tests with mtrace() are not executed and the mtrace files do not exist. Therefore the "mtrace-analysis-part" of those tests are marked UNSUPPORTED if the mtrace files are missing. Reported-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
* Use libnss_files.so for tests posix/bug-ga2 and resolv/tst-leaks2 [BZ #26821]Stefan Liebler2020-11-235-9/+14
| | | | | | | | | | | | | | | | | | | | | | | | | | | The tests posix/bug-ga2-mem and resolv/mtrace-tst-leaks2 are failing on fedora 33 as mtrace reports memory leaks. The /etc/nsswitch.conf differs between Fedora 32: hosts: files dns myhostname Fedora 33: hosts: files resolve [!UNAVAIL=return] myhostname dns Therefore /lib64/libnss_resolve.so.2 (from systemd) and the dependencies libgcc_s.so.1 and libpthread.so.0 are loaded. Usually all malloc'ed resources from getaddrinfo / gethostbyname are freed and the libraries are dlclose'd in nss/nsswitch.c:libc_freeres_fn (free_mem). Unfortunately, /lib64/libnss_resolve.so.2 is marked with DF_1_NODELETE. As this library is not unmapped, you'll see "Memory not freed". Therefore those tests are now only relying on libnss_files.so by making them test-container tests and providing the required configuration files. By moving the tests to tests-container, those are now running with "make check". Therefore the mtrace part of the tests are also moved from "make xcheck" to "make check". bug-ga2.c is now using test-driver.c in order to support WAIT_FOR_DEBUGGER environment variable.
* Remove tls.h inclusion from internal errno.hAdhemerval Zanella2020-11-134-1/+4
| | | | | | | | | | | | The tls.h inclusion is not really required and limits possible definition on more arch specific headers. This is a cleanup to allow inline functions on sysdep.h, more specifically on i386 and ia64 which requires to access some tls definitions its own. No semantic changes expected, checked with a build against all affected ABIs.
* Revert "Fix missing redirects in testsuite targets"Andreas Schwab2020-10-081-3/+3
| | | | | This reverts commit d5afb38503. The log files are actually created by the various shell scripts that drive the tests.
* Fix handling of collating symbols in fnmatch (bug 26620)Andreas Schwab2020-09-163-3/+41
| | | | | | The variable idx contains the index into the extra array, whereas wextra points into the extra array at this index, containing the length of the following collating sequence in the wide character representation.
* Remove internal usage of extensible stat functionsAdhemerval Zanella2020-09-111-7/+0
| | | | | | | | | | | | It replaces the internal usage of __{f,l}xstat{at}{64} with the __{f,l}stat{at}{64}. It should not change the generate code since sys/stat.h explicit defines redirections to internal calls back to xstat* symbols. Checked with a build for all affected ABIs. I also check on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Lukasz Majewski <lukma@denx.de>
* Copy regex_internal.h from GnulibPaul Eggert2020-08-041-2/+1
| | | | | | | | | | | Sync this file from Gnulib, thus incorporating the following fix for a bug with regexps with 16 or more subexpressions: * posix/regex_internal.h (struct re_backref_cache_entry): Use bitset_word_t as the type of eps_reachable_subexps_map, instead of unsigned short int. This fixes a bug I introduced to glibc in 2005-09-28T17:33:18Z!drepper@redhat.com (glibc commit 2c05d33f90861d074dc12808dafbde30f487b1a0, BZ #1302). Remove unused member 'unused'.
* Copy regex BITSET_WORD_BITS porting from GnulibPaul Eggert2020-08-042-30/+22
| | | | | | | | * posix/regex.c (__STDC_WANT_IEC_60559_BFP_EXT__): Define, for ULONG_WIDTH. This syncs regex.c from Gnujlib. * posix/regex_internal.h (ULONG_WIDTH): Use a more-portable fallback, from Gnulib. (BITSET_WORD_BITS): Now defined in terms of ULONG_WIDTH.
* Sync regex.h from GnulibPaul Eggert2020-08-041-2/+0
| | | | | * posix/regex.h: Remove an ‘#ifndef _CRAY’ that hasn’t been needed for years in Gnulib (and was needed only because of Gnulib).
* Suppress GCC 10 true positive warnings [BZ #25967]Martin Sebor2020-05-111-1/+11
| | | | | | | | | Suppress or avoid warnings in tests that exercise failure modes by making calls with invalid arguments. Reviewed-by: DJ Delorie <dj@redhat.com> Reviewed-by: Florian Weimer <fweimer@redhat.com> Reviewed-by: Joseph Myers <joseph@codesourcery.com>
* improve out-of-bounds checking with GCC 10 attribute access [BZ #25219]Martin Sebor2020-05-042-47/+76
| | | | | | | | Adds the access attribute newly introduced in GCC 10 to the subset of function declarations that are already covered by _FORTIFY_SOURCE and that don't have corresponding GCC built-in equivalents. Reviewed-by: DJ Delorie <dj@redhat.com>
* Fix typo in posix/tst-fnmatch.input (Bug 25790)Carlos O'Donell2020-04-151-1/+1
| | | | Reported-by: Michael Builov <mbuilov@gmail.com>
* posix: Add wait4 test caseAlistair Francis2020-04-142-1/+211
| | | | Add a wait4 test case based on the waitid test case.
* posix: Refactor tst-waitid (BZ #14666)Adhemerval Zanella2020-02-271-396/+153
| | | | | | | | | | | | | The main changes are: - Adapt to libsupport. - Synchronize the signal handler using atomics. - Replace waitpid by waitid calls. - Use support_process_state_wait to wait for child state. - Add tests for P_PGID and P_ALL. - Use sigwaitinfo instead of global state set by the signal handler. Checked on x86_64-linux-gnu and i686-linux-gnu.
* Fix use-after-free in glob when expanding ~user (bug 25414)Andreas Schwab2020-02-201-12/+13
| | | | | The value of `end_name' points into the value of `dirname', thus don't deallocate the latter before the last use of the former.
* Add hidden prototypes for __sched_getparam, __sched_getschedulerFlorian Weimer2020-02-202-0/+2
| | | | | | This will enable them to be used in libc.so without PLTs. Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* y2038: Define __suseconds64_t type to be used with struct __timeval64Lukasz Majewski2020-02-071-0/+1
| | | | | | | | | | | | | | | The __suseconds64_t type is supposed to be the 64 bit type across all architectures. It would be mostly used internally in the glibc - however, when passed to Linux kernel (very unlikely), if necessary, it shall be converted to 32 bit type (i.e. __suseconds_t) Build tests: ./src/scripts/build-many-glibcs.py glibcs Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
* Update copyright dates not handled by scripts/update-copyrights.Joseph Myers2020-01-011-1/+1
| | | | | | | | | | | | | | | I've updated copyright dates in glibc for 2020. This is the patch for the changes not generated by scripts/update-copyrights and subsequent build / regeneration of generated files. As well as the usual annual updates, mainly dates in --version output (minus libc.texinfo which previously had to be handled manually but is now successfully updated by update-copyrights), there is a fix to sysdeps/unix/sysv/linux/powerpc/bits/termios-c_lflag.h where a typo in the copyright notice meant it failed to be updated automatically. Please remember to include 2020 in the dates for any new files added in future (which means updating any existing uncommitted patches you have that add new files to use the new copyright dates in them).
* Update copyright dates with scripts/update-copyrights.Joseph Myers2020-01-01243-243/+243
|
* Add exception-based flags for wait4Adhemerval Zanella2019-12-201-0/+1
| | | | | | It fixes the tst-cancelx4 and tst-cancelx5 on sparc{64,v9}. Checked on sparc64-linux-gnu and sparcv9-linux-gnu.
* Consolidate wait3 implementationsAdhemerval Zanella2019-12-191-10/+1
| | | | | | The generic one calls wait4. Checked on x86_64-linux-gnu.
* Implement waitpid in terms of wait4Adhemerval Zanella2019-12-192-11/+3
| | | | | | This also consolidate all waitpid implementations. Checked on x86_64-linux-gnu.
* Implement wait in terms of waitpidAdhemerval Zanella2019-12-191-5/+1
| | | | | | | | | The POSIX implementation is used as default and both BSD and Linux version are removed. It simplifies the implementation for architectures that do not provide either __NR_waitpid or __NR_wait4. Checked on x86_64-linux-gnu and powerpc64le-linux-gnu.
* Fix array bounds violation in regex matcher (bug 25149)Andreas Schwab2019-11-111-2/+5
| | | | | | | | | If the regex has more subexpressions than the number of elements allocated in the regmatch_t array passed to regexec then proceed_next_node may access the regmatch_t array outside its bounds. No testcase added because even without this bug it would then crash in pop_fail_stack which is bug 11053.
* Refactor nanosleep in terms of clock_nanosleepAdhemerval Zanella2019-11-061-5/+8
| | | | | | | | | | | | | The generic version is straightforward. For Hurd, its nanosleep implementation is moved to clock_nanosleep with adjustments from generic unix implementation. The generic clock_nanosleep unix version is also removed since it calls nanosleep. Checked on x86_64-linux-gnu and powerpc64le-linux-gnu. Reviewed-by: Florian Weimer <fweimer@redhat.com>
* posix: Sync regex with gnulibAdhemerval Zanella2019-11-064-114/+47
| | | | | | | | | | | | | It sync with gnulib commit 6cfb4302b3e1da14d706198b693558290e9b00f4 and contains the fixes: https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=32915b2a8a43825720755113bdffe9f67a591748 https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=48f07576b8cd935b48e1050551f45ab1a79b9f01 https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=5e407aba1f775d51b25481cb55f324c9868f62d7 https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=4e02b30c761c76d04057fa5f6bba71401f9310cd https://git.savannah.gnu.org/cgit/gnulib.git/commit/?id=79f8ee4e389f8cb1339f8abed9a7d29816e2a2d4 Checked on x86_64-linux-gnu and i686-linux-gnu.
* posix: Use posix_spawn for wordexpAdhemerval Zanella2019-10-093-158/+114
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch replaces the fork+exec by posix_spawn on wordexp, which allows a better scability on Linux and simplifies the thread cancellation handling. The only change which can not be implemented with posix_spawn the /dev/null check to certify it is indeed the expected device. I am not sure how effetive this check is since /dev/null tampering means something very wrong with the system and this is the least of the issues. My view is the tests is really out of the place and the hardening provided is minimum. If the idea is still to provide such check, I think a possibilty would be to open /dev/null, check it, add a dup2 file action, and close the file descriptor. Checked on powerpc64le-linux-gnu and x86_64-linux-gnu. * include/spawn.h (__posix_spawn_file_actions_addopen): New prototype. * posix/spawn_faction_addopen.c (posix_spawn_file_actions_addopen): Add internal alias. * posix/wordexp.c (create_environment, free_environment): New functions. (exec_comm_child, exec_comm): Use posix_spawn instead of fork+exec. * posix/wordexp-test.c: Use libsupport.