summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* Add NEWS entry for CVE-2020-6096 (bug 25620)gentoo/glibc-2.31-8Aurelien Jarno2020-07-181-0/+5
| | | | | | | Reviewed-by: Carlos O'Donell <carlos@redhat.com> (cherry picked from commit 17400c4bcd57d84add1da3aa93248ef2efdb0ccb) (cherry picked from commit 6f3459f9859a7b506c64fa1823769ab631072c6e)
* arm: CVE-2020-6096: Fix multiarch memcpy for negative length [BZ #25620]Alexander Anisimov2020-07-181-11/+11
| | | | | | | | | Unsigned branch instructions could be used for r2 to fix the wrong behavior when a negative length is passed to memcpy. This commit fixes the armv7 version. (cherry picked from commit beea361050728138b82c57dda0c4810402d342b9) (cherry picked from commit 64246fccafc221cc15a8b70710a9d47a60653c0d)
* arm: CVE-2020-6096: fix memcpy and memmove for negative length [BZ #25620]Evgeny Eremin2020-07-182-28/+20
| | | | | | | | | Unsigned branch instructions could be used for r2 to fix the wrong behavior when a negative length is passed to memcpy and memmove. This commit fixes the generic arm implementation of memcpy amd memmove. (cherry picked from commit 79a4fa341b8a89cb03f84564fd72abaa1a2db394) (cherry picked from commit 9bbd2b61729de6ea23e3463523210aa2829e3da0)
* en_US: Minimize changes to date_fmt (Bug 25923)Carlos O'Donell2020-07-171-2/+5
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | In 2000 when date_fmt was originally added as an extension the en_US locale did not have a date_fmt specifier and so used the default which resulted in the abbreviated month name coming before the day of the month (as expected in the US and other locales). In commit 7395f3a0efad9fc51bb54fa383ef6524702e0c49 the date_fmt was added to en_US with a 12H time to better align with US user expectations. Unfortunately the abbreviated month name and day were inverted during that transition, and that was seen as a regression and reported against Fedora 32: https://bugzilla.redhat.com/show_bug.cgi?id=1830623 The progression of date_fmt looks like this: "%a %b %e %H:%M:%S %Z %Y" <- Originally (2000) "%a %d %b %Y %I:%M:%S %p %Z" <- glibc 2.29 (2019) "%a %b %e %r %Z %Y" <- glibc 2.32 (2020) [this commit] Note: "%r" is "%I:%M:%S %p" in en_US and so shorter to write. Likewise the year is in the wrong place in commit 7395f3a0efad9fc51bb54fa383ef6524702e0c49 and this is corrected in this patch. For reference d_t_fmt: "%a %d %b %Y %r %Z" <- d_t_fmt (1997) Yes, d_t_fmt and date_fmt are *not* the same, this is just the history of this locale. This commit does not change d_t_fmt to better align with date_fmt. No users have requested we change d_t_fmt or given any justification for such a change. The only goals of this change are to place the abbreviated month name before the day of the month as it has been printed since 2000, and place the year at the end. This minimizes the change from commit 7395f3a0efad9fc51bb54fa383ef6524702e0c49 and makes good on changing only from 24H clock to 12H clock. Reviewed-by: Florian Weimer <fweimer@redhat.com> (cherry picked from commit 8cde977077b3568310c743b21a905ca9ab286724)
* NEWS: Mention BZ 25933 fixH.J. Lu2020-07-111-0/+1
|
* Fix avx2 strncmp offset compare condition check [BZ #25933]Sunil K Pandey2020-07-111-0/+15
| | | | | | | | | | | strcmp-avx2.S: In avx2 strncmp function, strings are compared in chunks of 4 vector size(i.e. 32x4=128 byte for avx2). After first 4 vector size comparison, code must check whether it already passed the given offset. This patch implement avx2 offset check condition for strncmp function, if both string compare same for first 4 vector size. (cherry picked from commit 75870237ff3bb363447b03f4b0af100227570910)
* Fix miscompilation on ia64's gcc-10Sergei Trofimovich2020-07-111-1/+3
| | | | | Bug: https://bugs.gentoo.org/723268 Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
* sparc: Avoid clobbering register parameters in syscallgentoo/glibc-2.31-7Adhemerval Zanella2020-06-101-27/+53
| | | | | | | | | | | | | | The sparc INTERNAL_SYSCALL macro might clobber the register parameter if the argument itself might clobber any register (a function call for instance). This patch fixes it by using temporary variables for the expressions between the register assignments (as indicated by GCC documentation, 6.47.5.2 Specifying Registers for Local Variables). It is similar to the fix done for MIPS (bug 25523). Checked on sparc64-linux-gnu and sparcv9-linux-gnu.
* sparc: Use Linux kABI for syscall returnAdhemerval Zanella2020-06-103-48/+38
| | | | | | | | | | | | | | | | | It changes the sparc internal_syscall* macros to return a negative value instead of the 'g1' register value in the 'err' macro argument. The __SYSCALL_STRING macro is also changed to no set the 'g1' value, since 'o1' already holds all the required information to check if syscall has failed. The macro INTERNAL_SYSCALL_DECL is no longer required, and the INTERNAL_SYSCALL_ERROR_P macro follows the other Linux kABIs. The redefinition of INTERNAL_VSYSCALL_CALL is also no longer required. Checked on sparc64-linux-gnu and sparcv9-linux-gnu. It fixes the sporadic issues on sparc32 where clock_nanosleep does not act as cancellation entrypoint.
* [no-patch] Gentoo: remove remaining patchset generation logic, now in ↵gentoo/glibc-2.31-6Andreas K. Hüttel2020-06-093-133/+0
| | | | separate repo
* nss_compat: internal_end*ent may clobber errno, hiding ERANGE [BZ #25976]Florian Weimer2020-06-095-11/+47
| | | | | | | | | | | | | | During cleanup, before returning from get*_r functions, the end*ent calls must not change errno. Otherwise, an ERANGE error from the underlying implementation can be hidden, causing unexpected lookup failures. This commit introduces an internal_end*ent_noerror function which saves and restore errno, and marks the original internal_end*ent function as warn_unused_result, so that it is used only in contexts were errors from it can be handled explicitly. Reviewed-by: DJ Delorie <dj@redhat.com> (cherry picked from commit 790b8dda4455865cb8c3a47801f4304c1a43baf6) (cherry picked from commit 3a44844c97a8ca1d0798c45b5252e6a49f9cf8e1)
* aarch64: fix strcpy and strnlen for big-endian [BZ #25824]Lexi Shao2020-06-092-0/+10
| | | | | | | | | | | | | | | | | | | | | This patch fixes the optimized implementation of strcpy and strnlen on a big-endian arm64 machine. The optimized method uses neon, which can process 128bit with one instruction. On a big-endian machine, the bit order should be reversed for the whole 128-bits double word. But with instuction rev64 datav.16b, datav.16b it reverses 64bits in the two halves rather than reversing 128bits. There is no such instruction as rev128 to reverse the 128bits, but we can fix this by loading the data registers accordingly. Fixes 0237b61526e7("aarch64: Optimized implementation of strcpy") and 2911cb68ed3d("aarch64: Optimized implementation of strnlen"). Signed-off-by: Lexi Shao <shaolexi@huawei.com> Reviewed-by: Szabolcs Nagy <szabolcs.nagy@arm.com> (cherry picked from commit 59b64f9cbbf1e98c6d187873de6c363994aee19d) (cherry picked from commit c839175267842bd9e20fdb6637c82f2790d3754f)
* aarch64: Accept PLT calls to __getauxval within libc.soFlorian Weimer2020-06-091-0/+3
| | | | | | | | | | | | When using outline atomics (-moutline-atomics, the default for ARMv8-A starting with GCC 10), libgcc contains an ELF constructor which calls __getauxval. This code is built outside of glibc, so none of its internal PLT avoidance schemes can be applied to it. This change suppresses the elf/check-localplt failure. (cherry picked from commit 16536e98e36e08bc1ce1edbd8dd50c7c3bb7a936) (cherry picked from commit 587a332b6fadc4d9f1035ecaa52ba32ee41cd300) (cherry picked from commit 109474122400ca7d60782b131dc867a5c1f2fe55)
* [no-patch] Gentoo: remove etc files, now in FILESDIRAndreas K. Hüttel2020-05-123-109/+0
|
* [no-patch] Gentoo: remove locale-gen from repo, packaged separately nowgentoo/glibc-2.31-5Andreas K. Hüttel2020-05-125-631/+0
|
* NEWS: Mention fixes for BZ 25810/25896/25902/25966H.J. Lu2020-05-121-0/+4
| | | | (cherry picked from commit a98b8b221cfe732dc7c19ae1d22665002e254c96)
* x86-64: Use RDX_LP on __x86_shared_non_temporal_threshold [BZ #25966]H.J. Lu2020-05-121-3/+3
| | | | | | | | | | | | Since __x86_shared_non_temporal_threshold is defined as long int __x86_shared_non_temporal_threshold; and long int is 4 bytes for x32, use RDX_LP to compare against __x86_shared_non_temporal_threshold in assembly code. (cherry picked from commit 55c7bcc71b84123d5d4bd2814366a6b05fcf8ebd) (cherry picked from commit 4c833bbebe366ac5baec87dd68ec0a4962ee86ae)
* NEWS: Mention bug 25639 fixed in 2.31 branchRafał Lużyński2020-05-121-0/+2
| | | | (cherry picked from commit 3b9ceb332049c711e02e7b95f9b20180115c9209)
* oc_FR locale: Fix spelling of April (bug 25639)Rafał Lużyński2020-05-121-2/+2
| | | | | | | | Confirmed by CLDR and a native speaker: "abril" is more often used even if "abrial" is also correct. Both nominative (alt_mon) and genitive (mon) cases are updated. (cherry picked from commit bb44fe7711a63bbe46e71503e691e1d02a40bae1)
* oc_FR locale: Fix spelling of Thursday (bug 25639)Rafał Lużyński2020-05-121-1/+1
| | | | | | | As reported by a native speaker: Thursday: "dijóus" -> "dijòus" (also confirmed by CLDR) (cherry picked from commit f2ac7920474e5b64c8c077a85afcb62bec957cce)
* Add a C wrapper for prctl [BZ #25896]H.J. Lu2020-05-124-1/+44
| | | | | | | | | | | | | | | Add a C wrapper to pass arguments in /* Control process execution. */ extern int prctl (int __option, ...) __THROW; to prctl syscall: extern int prctl (int, unsigned long int, unsigned long int, unsigned long int, unsigned long int); (cherry picked from commit ff026950e280bc3e9487b41b460fb31bc5b57721) (cherry picked from commit 18fdba553dd9b907e9812b90d2cea593f776058f)
* powerpc: Rename argN to _argN in LOADARGS_N [BZ #25902]H.J. Lu2020-05-122-24/+24
| | | | | | | | | LOADARGS_N in powerpc/sysdep.h uses argN as local variables. It breaks when argN is also a function argument. Rename argN to _argN to avoid conflict. (cherry picked from commit 14f43dd34dcf1ba29386c01cd0b286dffb37412d) (cherry picked from commit 7c9e054afddf7980a02796a1278a77d981ebdfda)
* Add C wrappers for process_vm_readv/process_vm_writev [BZ #25810]H.J. Lu2020-05-124-3/+66
| | | | | | | | | Since the the U marker can only be applied to 2 unsigned long arguments in syscalls.list files, add a C wrapper for process_vm_readv and process_vm_writev syscals which have more than 2 unsigned long arguments. (cherry picked from commit ad9fd65d716f1ccd757b6b2feeee826d0f187ed4) (cherry picked from commit 9c5ae39a644fb7773c4b5f8ff124204561292bfd)
* Mark unsigned long arguments with U in more syscalls [BZ #25810]H.J. Lu2020-05-122-18/+18
| | | | | | | | | | Mark unsigned long arguments in mmap, read, recv, recvfrom, send, sendto, write, ioperm, sendfile64, setxattr, lsetxattr, fsetxattr, getxattr, lgetxattr, fgetxattr, listxattr, llistxattr and flistxattr with U in syscalls.list files. (cherry picked from commit 86f4f2263bf21ff7f80905b3062c16213b016fe6) (cherry picked from commit 63c3696a4ac3733484cf5b7f69b2be7c71086374)
* Add a syscall test for [BZ #25810]H.J. Lu2020-05-122-1/+168
| | | | | | | | | | Add a test to pass 64-bit long arguments to syscall with undefined upper 32 bits on x32. Tested on i386, x86-64 and x32 as well as with build-many-glibcs.py. (cherry picked from commit 781dacc4f41332098e3a272514b20a490a7ebc8c) (cherry picked from commit 5b9d49293b79804e756d3aa14e50e2f6b47c5667)
* Add SYSCALL_ULONG_ARG_[12] to pass long to syscall [BZ #25810]H.J. Lu2020-05-126-30/+159
| | | | | | | | | | | | | | | | | | | | | | X32 has 32-bit long and pointer with 64-bit off_t. Since x32 psABI requires that pointers passed in registers must be zero-extended to 64bit, x32 can share many syscall interfaces with LP64. When a LP64 syscall with long and unsigned long int arguments is used for x32, these arguments must be properly extended to 64-bit. Otherwise if the upper 32 bits of the register have undefined value, such a syscall will be rejected by kernel. For syscalls implemented in assembly codes, 'U' is added to syscall signature key letters for unsigned long, which is zero-extended to 64-bit types. SYSCALL_ULONG_ARG_1 and SYSCALL_ULONG_ARG_2 are passed to syscall-template.S for the first and the second unsigned long int arguments if PSEUDOS_HAVE_ULONG_INDICES is defined. They are used by x32 to zero-extend 32-bit arguments to 64 bits. Tested on i386, x86-64 and x32 as well as with build-many-glibcs.py. (cherry picked from commit 2ad5d0845d80589d0adf86593bd36a7c71a521f8) (cherry picked from commit 496b5963a7577aa5d956db4392b79e56cc23ba87)
* x32: Properly pass long to syscall [BZ #25810]H.J. Lu2020-05-122-6/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | X32 has 32-bit long and pointer with 64-bit off_t. Since x32 psABI requires that pointers passed in registers must be zero-extended to 64bit, x32 can share many syscall interfaces with LP64. When a LP64 syscall with long and unsigned long arguments is used for x32, these arguments must be properly extended to 64-bit. Otherwise if the upper 32 bits of the register have undefined value, such a syscall will be rejected by kernel. Enforce zero-extension for pointers and array system call arguments. For integer types, extend to int64_t (the full register) using a regular cast, resulting in zero or sign extension based on the signedness of the original type. For void *mmap(void *addr, size_t length, int prot, int flags, int fd, off_t offset); we now generate 0: 41 f7 c1 ff 0f 00 00 test $0xfff,%r9d 7: 75 1f jne 28 <__mmap64+0x28> 9: 48 63 d2 movslq %edx,%rdx c: 89 f6 mov %esi,%esi e: 4d 63 c0 movslq %r8d,%r8 11: 4c 63 d1 movslq %ecx,%r10 14: b8 09 00 00 40 mov $0x40000009,%eax 19: 0f 05 syscall That is 1. addr is unchanged. 2. length is zero-extend to 64 bits. 3. prot is sign-extend to 64 bits. 4. flags is sign-extend to 64 bits. 5. fd is sign-extend to 64 bits. 6. offset is unchanged. For int arguments, since kernel uses only the lower 32 bits and ignores the upper 32 bits in 64-bit registers, these work correctly. Tested on x86-64 and x32. There are no code changes on x86-64. (cherry picked from commit df76ff3a446a787a95cf74cb15c285464d73a93d) (cherry picked from commit 04330f85263f5dc823f33d7fa858d8b33d7f42ce)
* Fix build with GCC 10 when long double = double.Joseph Myers2020-05-121-0/+122
| | | | | | | | | | | | | | | | | | | | | | | | | | | On platforms where long double has the same ABI as double, glibc defines long double functions as aliases for the corresponding double functions. The declarations of those functions in <math.h> are disabled to avoid problems with aliases having incompatible types, but GCC 10 now gives errors for incompatible types when the long double function is known to GCC as a built-in function, not just when there is an incompatible header declaration. This patch fixes those errors by using appropriate -fno-builtin-<function> options to compile the double functions. The list of CFLAGS-* settings is an appropriately adapted version of that in sysdeps/ieee754/ldbl-opt/Makefile used there for building nldbl-*.c files; in particular, the options are used even if GCC does not currently have a built-in function of a given function, so that adding such a built-in function in future will not break the glibc build. Thus, various of the CFLAGS-* settings are only for future-proofing and may not currently be needed (and it's possible some could be irrelevant for other reasons). Tested with build-many-glibcs.py for arm-linux-gnueabi (compilers and glibcs builds), where it fixes the build that previously failed. (cherry picked from commit 49348beafe9ba150c9bd48595b3f372299bddbb0) (cherry picked from commit de371d1581f379ada10163d9172a8fde676d13b4)
* Add new file missed in previous hppa commit.John David Anglin2020-05-121-0/+58
| | | | | (cherry picked from commit acdcca72940e060270e4e54d9c0457398110f409) (cherry picked from commit ece4e11d55df3794ff858e23d0dd73b7b43ef9e9)
* Fix data race in setting function descriptors during lazy binding on hppa.John David Anglin2020-05-125-22/+143
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This addresses an issue that is present mainly on SMP machines running threaded code. In a typical indirect call or PLT import stub, the target address is loaded first. Then the global pointer is loaded into the PIC register in the delay slot of a branch to the target address. During lazy binding, the target address is a trampoline which transfers to _dl_runtime_resolve(). _dl_runtime_resolve() uses the relocation offset stored in the global pointer and the linkage map stored in the trampoline to find the relocation. Then, the function descriptor is updated. In a multi-threaded application, it is possible for the global pointer to be updated between the load of the target address and the global pointer. When this happens, the relocation offset has been replaced by the new global pointer. The function pointer has probably been updated as well but there is no way to find the address of the function descriptor and to transfer to the target. So, _dl_runtime_resolve() typically crashes. HP-UX addressed this problem by adding an extra pc-relative branch to the trampoline. The descriptor is initially setup to point to the branch. The branch then transfers to the trampoline. This allowed the trampoline code to figure out which descriptor was being used without any modification to user code. I didn't use this approach as it is more complex and changes function pointer canonicalization. The order of loading the target address and global pointer in indirect calls was not consistent with the order used in import stubs. In particular, $$dyncall and some inline versions of it loaded the global pointer first. This was inconsistent with the global pointer being updated first in dl-machine.h. Assuming the accesses are ordered, we want elf_machine_fixup_plt() to store the global pointer first and calls to load it last. Then, the global pointer will be correct when the target function is entered. However, just to make things more fun, HP added support for out-of-order execution of accesses in PA 2.0. The accesses used by calls are weakly ordered. So, it's possibly under some circumstances that a function might be entered with the wrong global pointer. However, HP uses weakly ordered accesses in 64-bit HP-UX, so I assume that loading the global pointer in the delay slot of the branch must work consistently. The basic fix for the race is a combination of modifying user code to preserve the address of the function descriptor in register %r22 and setting the least-significant bit in the relocation offset. The latter was suggested by Carlos as a way to distinguish relocation offsets from global pointer values. Conventionally, %r22 is used as the address of the function descriptor in calls to $$dyncall. So, it wasn't hard to preserve the address in %r22. I have updated gcc trunk and gcc-9 branch to not clobber %r22 in $$dyncall and inline indirect calls. I have also modified the import stubs in binutils trunk and the 2.33 branch to preserve %r22. This required making the stubs one instruction longer but we save one relocation. I also modified binutils to align the .plt section on a 8-byte boundary. This allows descriptors to be updated atomically with a floting-point store. With these changes, _dl_runtime_resolve() can fallback to an alternate mechanism to find the relocation offset when it has been clobbered. There's just one additional instruction in the fast path. I tested the fallback function, _dl_fix_reloc_arg(), by changing the branch to always use the fallback. Old code still runs as it did before. Fixes bug 23296. Reviewed-by: Carlos O'Donell <carlos@redhat.com> (cherry picked from commit 1a044511a3f9020c3f430164e0a6a77426fecd7e) (cherry picked from commit 91b909315c4e33e4569529886d8b7dbbf97b244c)
* nios2: delete sysdeps/unix/sysv/linux/nios2/kernel-features.hChung-Lin Tang2020-05-121-22/+0
| | | | | | | | | Commit 06436acf819d9e6ada7be3ca977d5c0a23d3f138 created a kernel-features.h file with '#undef __ASSUME_SYSVIPC_DEFAULT_IPC_64', which is wrong for Nios II. Deleting the header. (cherry picked from commit 38c67888183db1b6ac21f2f9681b8a384987dfe8) (cherry picked from commit b999c0098ae1ba8afcbb6086efd1c6163be0cdf1)
* mips: Fix bracktrace result for signal framesgentoo/glibc-2.31-4Adhemerval Zanella2020-04-123-0/+102
| | | | | | | | | | | | | | | | | | | MIPS fallback code handle a frame where its FDE can not be obtained (for instance a signal frame) by reading the kernel allocated signal frame and adding '2' to the value of 'sc_pc' [1]. The added value is used to recognize an end of an EH region on mips16 [2]. The fix adjust the obtained signal frame value and remove the libgcc added value by checking if the previous frame is a signal frame one. Checked with backtrace and tst-sigcontext-get_pc tests on mips-linux-gnu and mips64-linux-gnu. [1] libgcc/config/mips/linux-unwind.h from gcc code. [2] gcc/config/mips/mips.h from gcc code. */ (cherry picked from commit 6e05978f0c30e52420e086cc3156655471e6fb0a) (cherry picked from commit 54ba2541b3a76441a9cbe5dd14c963bf874fd5e9)
* stdlib: Move tst-system to tests-containerAdhemerval Zanella2020-04-122-5/+8
| | | | | | | | | Fix some issues with different shell and error messages. Checked on x86_64-linux-gnu and i686-linux-gnu. (cherry picked from commit 4eda036f5b897fa8bc20ddd2099b5a6ed4239dc9) (cherry picked from commit 83d3eec6728d1df6e7c436540671b9747e85079a)
* support/shell-container.c: Add builtin killAdhemerval Zanella2020-04-121-0/+25
| | | | | | | | | No options supported. Reviewed-by: DJ Delorie <dj@redhat.com> (cherry picked from commit 1c17100c43c0913ec94f3bcc966bf3792236c690) (cherry picked from commit ad9b0037ccc588804ef4c5e58feeab370543cf5a)
* support/shell-container.c: Add builtin exitAdhemerval Zanella2020-04-121-0/+13
| | | | | | | Reviewed-by: DJ Delorie <dj@redhat.com> (cherry picked from commit 5a5a3a3234bc220a5192d620e0cbc5360da46f14) (cherry picked from commit 2448ba1d724bec8cd162084fc51aaecea3929727)
* support/shell-container.c: Return 127 if execve failsAdhemerval Zanella2020-04-121-1/+1
| | | | | | | Reviewed-by: DJ Delorie <dj@redhat.com> (cherry picked from commit 5fce0e095bc413f908f472074c2235198cd76bf4) (cherry picked from commit 5810e6d75fffa62cdf8a37592ed1be7f262eac98)
* Add NEWS entry for CVE-2020-1751 (bug 25423)Aurelien Jarno2020-04-121-0/+3
| | | | | | | Reviewed-by: Carlos O'Donell <carlos@redhat.com> (cherry picked from commit 07d16a6debc830ebcf9533da5396edd2eff688e0) (cherry picked from commit d39fb022c26cf6ad832f6ad0e94ff5b5e4b511cf)
* posix: Fix system error return value [BZ #25715]Adhemerval Zanella2020-04-123-11/+130
| | | | | | | | | | | | It fixes 5fb7fc9635 when posix_spawn fails. Checked on x86_64-linux-gnu and i686-linux-gnu. Reviewed-by: Carlos O'Donell <carlos@redhat.com> (cheery picked from commit f09542c584b121da0322fde4b55306d512b85d93) (cherry picked from commit 46bbbd4622351528ae22c2d3397ab090f5099e82)
* i386: Disable check_consistency for GCC 5 and above [BZ #25788]H.J. Lu2020-04-101-2/+3
| | | | | | | | | | check_consistency should be disabled for GCC 5 and above since there is no fixed PIC register in GCC 5 and above. Check __GNUC_PREREQ (5,0) instead OPTIMIZE_FOR_GCC_5 since OPTIMIZE_FOR_GCC_5 is false with -fno-omit-frame-pointer. (cherry picked from commit f90a7e96df87edadd503a0a32aa70fb97c55a044) Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
* Add NEWS entry for CVE-2020-1752 (bug 25414)gentoo/glibc-2.31-3Aurelien Jarno2020-03-221-0/+3
| | | | (cherry picked from commit 39a05214fe14ff722d4d92e697fb71ff15e84e70)
* Fix use-after-free in glob when expanding ~user (bug 25414)Andreas Schwab2020-03-221-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. (cherry picked from commit ddc650e9b3dc916eab417ce9f79e67337b05035c)
* Update syscall lists for Linux 5.5.Joseph Myers2020-03-222-2/+3
| | | | | | | | | | | Linux 5.5 has no new syscalls to add to syscall-names.list, but it does newly enable the clone3 syscall for AArch64. This patch updates the kernel version listed in syscall-names.list and regenerates the AArch64 arch-syscall.h. Tested with build-many-glibcs.py. (cherry picked from commit 5828bc4523230685ac29a4a882967913255f5666)
* NEWS: update list of bugs fixed on the 2.31 branchAurelien Jarno2020-03-221-0/+4
|
* Add NEWS entry for CVE-2020-10029 (bug 25487)Aurelien Jarno2020-03-221-1/+3
| | | | (cherry picked from commit 15ab195229dc288d1d49612c3de14a33b88065ed)
* math/test-sinl-pseudo: Use stack protector only if availableFlorian Weimer2020-03-221-0/+2
| | | | | | | This fixes commit 9333498794cde1d5cca518bad ("Avoid ldbl-96 stack corruption from range reduction of pseudo-zero (bug 25487)."). (cherry picked from commit c10acd40262486dac597001aecc20ad9d3bd0e4a)
* sparc: Move sigreturn stub to assemblyAdhemerval Zanella2020-03-225-38/+73
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | It seems that some gcc versions might generates a stack frame for the sigreturn stub requires on sparc signal handling. For instance: $ cat test.c #define _GNU_SOURCE #include <sys/syscall.h> __attribute__ ((__optimize__ ("-fno-stack-protector"))) void __sigreturn_stub (void) { __asm__ ("mov %0, %%g1\n\t" "ta 0x10\n\t" : /* no outputs */ : "i" (SYS_rt_sigreturn)); } $ gcc -v [...] gcc version 9.2.1 20200224 (Debian 9.2.1-30) $ gcc -O2 -m64 test.c -S -o - [...] __sigreturn_stub: save %sp, -176, %sp #APP ! 9 "t.c" 1 mov 101, %g1 ta 0x10 ! 0 "" 2 #NO_APP .size __sigreturn_stub, .-__sigreturn_stub As indicated by kernel developers [1], the sigreturn stub can not change the register window or the stack pointer since the kernel has setup the restore frame at a precise location relative to the stack pointer when the stub is invoked. I tried to play with some compiler flags and even with _Noreturn and __builtin_unreachable after the asm does not help (and Sparc does not support naked functions). To avoid similar issues, as the stack-protector support also have stumbled, this patch moves the implementation of the sigreturn stubs to assembly. Checked on sparcv9-linux-gnu and sparc64-linux-gnu with gcc 9.2.1 and gcc 7.5.0. [1] https://lkml.org/lkml/2016/5/27/465
* arm: Fix softp-fp Implies (BZ #25635)Adhemerval Zanella2020-03-222-0/+2
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The commit "arm: Split BE/LE abilist" (1673ba87fefe019c834c09d33673d1d453ea698d) changed the soft-fp order for ARM selection when __SOFTFP__ is defined by the compiler. On 2.30 the sysdeps order is: 2.30 sysdeps/unix/sysv/linux/arm sysdeps/arm/nptl sysdeps/unix/sysv/linux sysdeps/nptl sysdeps/pthread sysdeps/gnu sysdeps/unix/inet sysdeps/unix/sysv sysdeps/unix/arm sysdeps/unix sysdeps/posix sysdeps/arm/nofpu sysdeps/ieee754/soft-fp sysdeps/arm sysdeps/wordsize-32 sysdeps/ieee754/flt-32 sysdeps/ieee754/dbl-64 sysdeps/ieee754 sysdeps/generic While on master is: sysdeps/unix/sysv/linux/arm/le sysdeps/unix/sysv/linux/arm sysdeps/arm/nptl sysdeps/unix/sysv/linux sysdeps/nptl sysdeps/pthread sysdeps/gnu sysdeps/unix/inet sysdeps/unix/sysv sysdeps/unix/arm sysdeps/unix sysdeps/posix sysdeps/arm/le sysdeps/arm sysdeps/wordsize-32 sysdeps/ieee754/flt-32 sysdeps/ieee754/dbl-64 sysdeps/arm/nofpu sysdeps/ieee754/soft-fp sysdeps/ieee754 sysdeps/generic It make the build select some routines (fadd, fdiv, fmul, fsub, and fma) on ieee754/flt-32 and ieee754/dbl-64 that requires fenv support to be correctly rounded which in turns lead to math failures since the __SOFTFP__ does not have fenv support. With this patch the order is now: sysdeps/unix/sysv/linux/arm/le sysdeps/unix/sysv/linux/arm sysdeps/arm/nptl sysdeps/unix/sysv/linux sysdeps/nptlsysdeps/pthread sysdeps/gnu sysdeps/unix/inet sysdeps/unix/sysv sysdeps/unix/arm sysdeps/unix sysdeps/posix sysdeps/arm/le/nofpu sysdeps/arm/nofpu sysdeps/ieee754/soft-fp sysdeps/arm/le sysdeps/arm sysdeps/wordsize-32 sysdeps/ieee754/flt-32 sysdeps/ieee754/dbl-64 sysdeps/ieee754 sysdeps/generic Checked on arm-linux-gnuaebi. (cherry picked from commit af09e5e5d9ec3ca20891e61a6922eac984fcbdc4)
* linux/sysipc: Include linux/posix_types.h for __kernel_mode_tAdhemerval Zanella2020-03-223-0/+3
| | | | | | | The posix_types.h (where __kernel_mode_t is defined) is included implicitly, which might not happen on older kernels. (cherry picked from commit 7aec9f4e5e0313772d123ba4daa96ea921a50aec)
* linux: Clear mode_t padding bits (BZ#25623)Adhemerval Zanella2020-03-223-6/+21
| | | | | | | | | | | | | | | | | | | | | | The kernel might not clear the padding value for the ipc_perm mode fields in compat mode (32 bit running on a 64 bit kernel). It was fixed on v4.14 when the ipc compat code was refactored to move (commits 553f770ef71b, 469391684626, c0ebccb6fa1e). Although it is most likely a kernel issue, it was shown only due BZ#18231 fix which made all the SysVIPC mode_t 32-bit regardless of the kABI. This patch fixes it by explicitly zeroing the upper bits for such cases. The __ASSUME_SYSVIPC_BROKEN_MODE_T case already handles it with the shift. (The aarch64 ipc_priv.h is superflous since __ASSUME_SYSVIPC_DEFAULT_IPC_64 is now defined as default). Checked on i686-linux-gnu on 3.10 and on 4.15 kernel. (cherry picked from commit 82025bad80429c67a4d75f098155b5e02b5112b4)
* i386: Use comdat instead of .gnu.linkonce for i386 setup pic register (BZ ↵Adhemerval Zanella2020-03-221-2/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | #20543) GCC has moved from using .gnu.linkonce for i386 setup pic register with minimum current version (as for binutils minimum binutils that support comdat). Trying to pinpoint when binutils has added comdat support for i686, it seems it was around 2004 [1]. I also checking with some ancient binutils older than 2.16 I see: test.o: In function `__x86.get_pc_thunk.bx': test.o(.text.__x86.get_pc_thunk.bx+0x0): multiple definition of `__x86.get_pc_thunk.bx' /usr/lib/gcc/x86_64-linux-gnu/5/../../../i386-linux-gnu/crti.o(.gnu.linkonce.t.__x86.get_pc_thunk.bx+0x0): first defined here Which seems that such version can not handle either comdat at all or a mix of linkonce and comdat. For binutils 2.16.1 I am getting a different issue trying to link a binary with and more recent ctri.o (unrecognized relocation (0x2b) in section `.init', which is R_386_GOT32X and old binutils won't generate it anyway). So I think that either unlikely someone will use an older binutils than the one used to glibc and even this scenario may fail with some issue as the R_386_GOT32X. Also, 2.16.1 is quite old and not really supported (glibc itself required 2.25). Checked on i686-linux-gnu. [1] https://gcc.gnu.org/ml/gcc/2004-05/msg00030.html (cherry picked from commit 35200fd3892f6caf867bf89bc8048e553906af28)