about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* Ignore and remove LD_HWCAP_MASK for AT_SECURE programs (bug #21209) linaro/2.23/masterSiddhesh Poyarekar2017-07-134-1/+11
| | | | | | | | | | | | | | | | | | The LD_HWCAP_MASK environment variable may alter the selection of function variants for some architectures. For AT_SECURE process it means that if an outdated routine has a bug that would otherwise not affect newer platforms by default, LD_HWCAP_MASK will allow that bug to be exploited. To be on the safe side, ignore and disable LD_HWCAP_MASK for setuid binaries. [BZ #21209] * elf/rtld.c (process_envvars): Ignore LD_HWCAP_MASK for AT_SECURE processes. * sysdeps/generic/unsecvars.h: Add LD_HWCAP_MASK. (cherry picked from commit 1c1243b6fc33c029488add276e56570a07803bfd)
* ld.so: Reject overly long LD_AUDIT path elementsFlorian Weimer2017-07-132-15/+106
| | | | | | Also only process the last LD_AUDIT entry. (cherry picked from commit 81b82fb966ffbd94353f793ad17116c6088dedd9)
* ld.so: Reject overly long LD_PRELOAD path elementsFlorian Weimer2017-07-132-16/+73
| | | | (cherry picked from commit 6d0ba622891bed9d8394eef1935add53003b12e8)
* CVE-2017-1000366: Ignore LD_LIBRARY_PATH for AT_SECURE=1 programs [BZ #21624]Florian Weimer2017-07-133-1/+10
| | | | | | | | | | LD_LIBRARY_PATH can only be used to reorder system search paths, which is not useful functionality. This makes an exploitable unbounded alloca in _dl_init_paths unreachable for AT_SECURE=1 programs. (cherry picked from commit f6110a8fee2ca36f8e2d2abecf3cba9fa7b8ea7d)
* Correct collation rules for Malayalam.Santhosh Thottingal2017-07-132-4/+30
| | | | | | | | [BZ #19922] * locales/iso14651_t1_common: Add collation rules for U+07DA to U+07DF. [BZ #19919] * locales/iso14651_t1_common: Correct collation of U+0D36 and U+0D37.
* posix: Add cleanup on the trap list for globtest.shAdhemerval Zanella2017-04-202-3/+10
| | | | | | | | | This patch prevents lingering files for SIGSEGV failures by adding a cleanup handler on trap handler. Checked on x86_64-linux-gnu. * posix/globtest.sh: Add cleanup routine on trap 0. Cherry-pick of 4fee33f.
* fts: Fix symbol redirect for fts_set [BZ #21289]Slava Barinov2017-04-063-1/+7
| | | | | | | In a 32-bit environment with _FILE_OFFSET_BITS=64, the __REDIRECT macro combined with __THROW generates an invalid C++ declaration. (cherry picked from commit ce39613205dc47ceaeea76710d49e7a483b503ab)
* Drop GLIBC_TUNABLES in setxid processesSiddhesh Poyarekar2017-04-062-0/+5
| | | | | | | | | | Drop the GLIBC_TUNABLES environment variable from the environment of setxid processes to avoid passing it on to non-setxid children. This prevents potentially insecure tunables in the GLIBC_TUNABLES envvar from crossing over into a child that may use a libc that has tunables support. * sysdeps/generic/unsecvars.h: Add GLIBC_TUNABLES.
* configure: accept __stack_chk_fail_local for ssp support too [BZ #20662]Denis Kaganovich2017-04-063-6/+19
| | | | | | | | | | | | | | | | When glibc is compiled with gcc 6.2 that has been configured with --enable-default-pie and --enable-default-ssp, the configure script fails to detect that the compiler has ssp turned on by default when being built for i686-linux-gnu. This is because gcc is emitting __stack_chk_fail_local but the script is only looking for __stack_chk_fail. Support both. Example output: checking whether x86_64-pc-linux-gnu-gcc -m32 -Wl,-O1 -Wl,--as-needed implicitly enables -fstack-protector... no (cherry picked from commit c7409aded44634411a19b0b7178b7faa237835e6)
* malloc: Simplify static malloc interposition [BZ #20432]Florian Weimer2017-01-2615-160/+712
| | | | | | | | Existing interposed mallocs do not define the glibc-internal fork callbacks (and they should not), so statically interposed mallocs lead to link failures because the strong reference from fork pulls in glibc's malloc, resulting in multiple definitions of malloc-related symbols.
* nptl/tst-tls3-malloc: Force freeing of thread stacksFlorian Weimer2017-01-263-1/+21
| | | | | | | | It turns out that due to the reduced stack size in tst-tls3 and the (fixed) default stack cache size, allocated TLS variables are never freed, so the test coverage for tst-tls3-malloc is less than complete. This change increases the thread stack size for tst-tls3-malloc only, to make sure thread stacks and TLS variables are freed.
* malloc: Run tests without calling mallopt [BZ #19469]Florian Weimer2017-01-263-0/+13
| | | | | | The compiled tests no longer refer to the mallopt symbol from their main functions. (Some tests still call mallopt explicitly, which is fine.)
* elf: Do not use memalign for TCB/TLS blocks allocation [BZ #17730]Florian Weimer2017-01-264-38/+250
| | | | | | | | | | | | | | | | | | | Instead, call malloc and explicitly align the pointer. There is no external location to store the original (unaligned) pointer, and this commit increases the allocation size to store the pointer at a fixed location relative to the TCB pointer. The manual alignment means that some space goes unused which was previously made available for subsequent allocations. However, in the TLS_DTV_AT_TP case, the manual alignment code avoids aligning the pre-TCB to the TLS block alignment. (Even while using memalign, the allocation had some unused padding in front.) This concludes the removal of memalign calls from the TLS code, and the new tst-tls3-malloc test verifies that only core malloc routines are used.
* elf: Avoid using memalign for TLS allocations [BZ #17730]Florian Weimer2017-01-265-38/+77
| | | | | | | | | | | | Instead of a flag which indicates the pointer can be freed, dtv_t now includes the pointer which should be freed. Due to padding, the size of dtv_t does not increase. To avoid using memalign, the new allocate_dtv_entry function allocates a sufficiently large buffer so that a sub-buffer can be found in it which starts with an aligned pointer. Both the aligned and original pointers are kept, the latter for calling free later.
* elf: Consolidate machine-agnostic DTV definitions in <dl-dtv.h>Florian Weimer2017-01-2635-242/+106
| | | | | Identical definitions of dtv_t and TLS_DTV_UNALLOCATED were repeated for all architectures using DTVs.
* localedata: bs_BA: fix yesexpr/noexpr [BZ #20974]Mike Frysinger2017-01-262-2/+8
| | | | | | | | | | | Both regexes end with a "*." which means the previous match can be omitted, and then the . allows them to match any input at all. This means tools like coreutils' `rm -i` will always delete things when prompted because the yesexpr regex matches all inputs (even the negative ones). (cherry picked from commit a035eb6928bc63fb798dcc1421529f933122d74f)
* Fix cos computation for multiple precision fallback (bz #20357)Siddhesh Poyarekar2017-01-265-2/+222
| | | | | | | | | | | | | | | | | | | | | | During the sincos consolidation I made two mistakes, one was a logical error due to which cos(0x1.8475e5afd4481p+0) returned sin(0x1.8475e5afd4481p+0) instead. The second issue was an error in negating inputs for the correct quadrants for sine. I could not find a suitable test case for this despite running a program to search for such an input for a couple of hours. Following patch fixes both issues. Tested on x86_64. Thanks to Matt Clay for identifying the issue. [BZ #20357] * sysdeps/ieee754/dbl-64/s_sin.c (sloww): Fix up condition to call __mpsin/__mpcos and to negate values. * math/auto-libm-test-in: Add test. * math/auto-libm-test-out: Regenerate. (cherry picked from commit cbf88869edced4b23d792d95a8626e35b831df35)
* Don't compile do_test with -mavx/-mavx2/-mavx512.Andrew Senkevich2016-10-2212-78/+196
| | | | | | | Don't compile do_test (in sincos ABI tests) with -mavx, -mavx2 nor -mavx512 since they won't run on non-AVX machines. (cherry-picked from commit fe0cf8614836e2b08b802eb1f55abca75d558545)
* Fixed x86_64 vector sincos/sincosf ABI.Andrew Senkevich2016-10-2233-33/+2584
| | | | | | | | | | Fixed wrong vector sincos/sincosf ABI to have it compatible with current vector function declaration "#pragma omp declare simd notinbranch", according to which vector sincos should have vector of pointers for second and third parameters. It is fixed with implementation as wrapper to version having second and third parameters as pointers. (cherry-picked from commit ee2196bb6766ca7e63a1ba22ebb7619a3266776a)
* powerpc: Fix POWER9 impliesTulio Magno Quites Machado Filho2016-10-223-2/+9
| | | | | | | Fix multiarch build for POWER9 by correcting the order of the directories listed at sysnames configure variable. (cherry picked from commit 1850ce5a2ea3b908b26165e7e951cd4334129f07)
* nptl/tst-once5: Reduce time to expected failureFlorian Weimer2016-10-222-0/+7
| | | | (cherry picked from commit 1f645571d2db9008b3cd3d5acb9ff93357864283)
* argp: Do not override GCC keywords with macros [BZ #16907]Florian Weimer2016-10-223-55/+14
| | | | | | | | | | | | | glibc provides fallback definitions already. It is not necessary to suppress warnings for unknown attributes because GCC does this automatically for system headers. This commit does not sync with gnulib because gnulib has started to use _GL_* macros in the header file, which are arguably in the gnulib implementation space and not suitable for an installed glibc header file. (cherry picked from commit 2c820533c61fed175390bc6058afbbe42d2edc37)
* fopencookie: Mangle function pointers stored on the heap [BZ #20222]Florian Weimer2016-10-222-14/+46
| | | | (cherry picked from commit 983fd5c41ab7e5a5c33922259ca1ac99b3b413f8)
* nss_db: Fix initialization of iteration position [BZ #20237]Florian Weimer2016-10-222-1/+14
| | | | | | | | | | | When get*ent is called without a preceding set*ent, we need to set the initial iteration position in get*ent. Reproducer: Add “services: db files” to /etc/nsswitch.conf, then run “perl -e getservent”. It will segfault before this change, and exit silently after it. (cherry picked from commit 31d0a4fa646db8b8c97ce24e0ec0a7b73de4fca1)
* Return proper status from _nss_nis_initgroups_dyn (bug 20262)Andreas Schwab2016-10-222-5/+18
| | | | (cherry picked from commit 73fb56a4d51fd4437e4cde6dd3c8077a610f88a8)
* malloc: Avoid premature fallback to mmap [BZ #20284]Florian Weimer2016-10-222-6/+10
| | | | | | | | | Before this change, the while loop in reused_arena which avoids returning a corrupt arena would never execute its body if the selected arena were not corrupt. As a result, result == begin after the loop, and the function returns NULL, triggering fallback to mmap. (cherry picked from commit a3b473373ee43a292f5ec68a7fda6b9cfb26a9b0)
* arm: mark __startcontext as .cantunwind (bug 20435)Andreas Schwab2016-10-223-0/+19
| | | | | | | | | | | __startcontext marks the bottom of the call stack of the contexts created by makecontext. (cherry picked from commit 9e2ff6c9cc54c0b4402b8d49e4abe7000fde7617) Also includes the NEWS update, cherry-picked from commits 056dd72af83f5459ce6d545a49dea6dba7d635dc and 4d047efdbc55b0d68947cde682e5363d16a66294.
* Do not override objects in libc.a in other static libraries [BZ #20452]Florian Weimer2016-10-2214-1/+50
| | | | | | | With this change, we no longer add sysdep.o and similar objects which are present in libc.a to other static libraries. (cherry picked from commit d9067fca40b8aac156d73cfa44d6875813555a6c)
* malloc: Preserve arena free list/thread count invariant [BZ #20370]Florian Weimer2016-10-222-5/+44
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | It is necessary to preserve the invariant that if an arena is on the free list, it has thread attach count zero. Otherwise, when arena_thread_freeres sees the zero attach count, it will add it, and without the invariant, an arena could get pushed to the list twice, resulting in a cycle. One possible execution trace looks like this: Thread 1 examines free list and observes it as empty. Thread 2 exits and adds its arena to the free list, with attached_threads == 0). Thread 1 selects this arena in reused_arena (not from the free list). Thread 1 increments attached_threads and attaches itself. (The arena remains on the free list.) Thread 1 exits, decrements attached_threads, and adds the arena to the free list. The final step creates a cycle in the usual way (by overwriting the next_free member with the former list head, while there is another list item pointing to the arena structure). tst-malloc-thread-exit exhibits this issue, but it was only visible with a debugger because the incorrect fix in bug 19243 removed the assert from get_free_list. (cherry picked from commit f88aab5d508c13ae4a88124e65773d7d827cd47b)
* x86: Use sysdep.o from libc.a in static librariesFlorian Weimer2016-10-222-0/+9
| | | | | | | | | | | Static libraries can use the sysdep.o copy in libc.a without a performance penalty. This results in a visible difference if libpthread.a is relinked into a single object file (which is needed to support libraries which check for the presence of certain symbols to enable threading support, which generally fails with static linking unless libpthread.a is relinked). (cherry picked from commit e67330ab57bfd0f964539576ae7dcc658c456724)
* SPARC64: update localplt.dataAurelien Jarno2016-10-222-0/+5
| | | | | | | | | | | | | | | | Commits d81f90cc and 89faa0340 replaced called to __isnan and __isinf by the corresponding GCC builtins. In turns GCC emits calls to _Qp_cmp. We should therefore add _Qp_cmp to localplt.data as otherwise the elf/check-localplt test fails with: Extra PLT reference: libc.so: _Qp_cmp A similar change has already been done for SPARC32 in commit 6ef1cb95. Changelog: * sysdeps/unix/sysv/linux/sparc/sparc64/localplt.data: Add _Qp_cmp. (cherry picked from commit fd1cf1dc3b2d90c2a61332363feb1043f6916564)
* hppa: fix loading of global pointer in _start [BZ #20277]John David Anglin2016-10-223-0/+9
| | | | | | | | | The patched change fixes a regression for executables compiled with the -p option and linked with gcrt1.o. The executables crash on startup. This regression was introduced in 2.22 and was noticed in the gcc testsuite. (cherry picked from commit 9765ffa71030efd8bb4f2ea4ed6e020fcb4bb714)
* i686/multiarch: Regenerate ulpsAurelien Jarno2016-10-222-8/+12
| | | | | | | | | This comes from running “make regen-ulps” on AMD Opteron 6272 CPUs. Changelog: * sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Regenerated. (cherry picked from commit 6a40d8df0c269a953726a432c50702372b86c500)
* Fix tst-cancel17/tst-cancelx17, which sometimes segfaults while exiting.Stefan Liebler2016-10-222-0/+20
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The testcase tst-cancel[x]17 ends sometimes with a segmentation fault. This happens in one of 10000 cases. Then the real testcase has already exited with success and returned from do_test(). The segmentation fault occurs after returning from main in _dl_fini(). In those cases, the aio_read(&a) was not canceled because the read request was already in progress. In the meanwhile aio_write(ap) wrote something to the pipe and the read request is able to read the requested byte. The read request hasn't finished before returning from do_test(). After it finishes, it writes the return value and error code from the read syscall to the struct aiocb a, which lies on the stack of do_test. The stack of the subsequent function call of _dl_fini or _dl_sort_fini, which is inlined in _dl_fini is corrupted. In case of S390, it reads a zero and decrements it by 1: unsigned int k = nmaps - 1; struct link_map **runp = maps[k]->l_initfini; The load from unmapped memory leads to the segmentation fault. The stack corruption also happens on other architectures. I saw them e.g. on x86 and ppc, too. This patch adds an aio_suspend call to ensure, that the read request is finished before returning from do_test(). ChangeLog: * nptl/tst-cancel17.c (do_test): Wait for finishing aio_read(&a). (cherry picked from commit b3a810d0d3d5c6ce7ddfb61321cd7971808ca703)
* MIPS: run tst-mode-switch-{1,2,3}.c using test-skeleton.cAurelien Jarno2016-10-224-6/+24
| | | | | | | | | | | | | | | | | | | | For some reasons I have not investigated yet, tst-mode-switch-1 hangs on a MIPS UTM-8 machine running an o32 userland and a 3.6.1 kernel. This patch changes the test so that it runs under the test-skeleton framework, causing the test to fail after a timeout instead of hanging the whole testsuite. At the same time, also change the tst-mode-switch-2 and tst-mode-switch-3 tests. Changelog: * sysdeps/mips/tst-mode-switch-1.c (main): Converted to ... (do_test): ... this. (TEST_FUNCTION): New macro. Include test-skeleton.c. * sysdeps/mips/tst-mode-switch-2.c (main): Likewise. * sysdeps/mips/tst-mode-switch-3.c (main): Likewise. (cherry picked from commit 0cdaef4dac5a885af9848e158e77cc347ee781bb)
* MIPS, SPARC: more fixes to the vfork aliases in libpthread.soAurelien Jarno2016-10-224-14/+23
| | | | | | | | | | | | | | | | | | | | Commit 43c29487 tried to fix the vfork aliases in libpthread.so on MIPS and SPARC, but failed to do it correctly, introducing an ABI change. This patch does the remaining changes needed to align the MIPS and SPARC vfork implementations with the other architectures. That way the the alpha version of pt-vfork.S works correctly for MIPS and SPARC. The changes for alpha were done in 82aab97c. Changelog: * sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Rename into __libc_vfork. (__vfork) [IS_IN (libc)]: Remove alias. (__libc_vfork) [IS_IN (libc)]: Define as an alias. * sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Likewise. (cherry picked from commit b87c1ec3fa398646f042a68f0ce0f7d09c1348c7)
* MIPS, SPARC: fix wrong vfork aliases in libpthread.soAurelien Jarno2016-10-224-0/+13
| | | | | | | | | | | | | | | | | | | | | | | | With recent binutils versions the GNU libc fails to build on at least MISP and SPARC, with this kind of error: /home/aurel32/glibc/glibc-build/nptl/libpthread.so:(*IND*+0x0): multiple definition of `vfork@GLIBC_2.0' /home/aurel32/glibc/glibc-build/nptl/libpthread.so::(.text+0xee50): first defined here It appears that on these architectures pt-vfork.S includes vfork.S (through the alpha version of pt-vfork.S) and that the __vfork aliases are not conditionalized on IS_IN (libc) like on other architectures. Therefore the aliases are also wrongly included in libpthread.so. Fix this by properly conditionalizing the aliases like on other architectures. Changelog: * sysdeps/unix/sysv/linux/mips/vfork.S (__vfork): Conditionalize hidden_def, weak_alias and strong_alias on [IS_IN (libc)]. * sysdeps/unix/sysv/linux/sparc/sparc32/vfork.S: Likewise. * sysdeps/unix/sysv/linux/sparc/sparc64/vfork.S: Likewise. (cherry picked from commit 43c2948756bb6e144c7b871e827bba37d61ad3a3)
* Add runtime check for __ASSUME_REQUEUE_PI (BZ# 18463)Adhemerval Zanella2016-06-037-33/+50
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch adds a runtime check for requeue priority futexes (FUTEX_{WAIT,CMP}_REQUEUE_PI) for configurations that do not define __ASSUME_REQUEUE_PI. It uses the same check uses for priority lock/unlock support, where issuing a futex operation with FUTEX_UNLOCK_PI returns if kernel has or not internal 'futex_cmpxchg_enabled' support (which is also used on requeue priority futexes operations). For architectures that already have __ASSUME_REQUEUE_PI the code flow does not change, 'use_requeue_pi' returns the previous chec logic. Also, if 'futex_cmpxchg_enabled' is not supported by the kernel, the previous logic will be used (by issuing a default futex operation). Tested on ARM (v3.8 kernel) and x86_64. * nptl/pthreadP.h (prio_inherit_missing): Change name to __prio_inherit_missing. (USE_REQUEUE_PI): Remove define. (use_requeue_pi): New function. * nptl/pthread_cond_broadcast.c [__ASSUME_REQUEUE_PI] (__pthread_cond_broadcast): Remove ifdef. (USE_REQUEUE_PI): Change to use_requeue_pi. * nptl/pthread_cond_signal.c [__ASSUME_REQUEUE_PI] (__pthread_cond_signal): Remove ifdef. (USE_REQUEUE_PI): Change to use_requeue_pi. * nptl/pthread_cond_timedwait.c [__ASSUME_REQUEUE_PI] (__pthread_cond_timedwait): Remove ifdef. (USE_REQUEUE_PI): Change to use_requeue_pi. ( nptl/pthread_cond_wait.c [__ASSUME_REQUEUE_PI] (__pthread_cond_wait): Remove ifdef. (USE_REQUEUE_PI): Change to use_requeue_pi. * nptl/pthread_mutex_init.c (prio_inherit_missing): Remove 'static' qualifier and change name to __prio_inherit_missing.
* Remove __ASSUME_SET_ROBUST_LISTAdhemerval Zanella2016-06-0310-29/+25
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch removes __ASSUME_SET_ROBUST_LIST usage and assumes that kernel will correctly return if it supports or not futex_atomic_cmpxchg_inatomic. On minimum supported kernel (v3.2 and v2.6.32 for x86) kernel has: 2418 SYSCALL_DEFINE2(set_robust_list, struct robust_list_head __user *, head, 2419 size_t, len) 2420 { 2421 if (!futex_cmpxchg_enabled) 2422 return -ENOSYS; The patch also adds the __set_robust_list_avail runtime check for all architectures, since for some the syscall may still return ENOSYS if futex_atomic_cmpxchg_inatomic is not supported (for instance ARM). Tested on armhf (with 3.8 kernel) and x86_64. * nptl/nptl-init.c [__ASSUME_SET_ROBUST_LIST] (__set_robust_list_avail): Remove define. [__NR_set_robust_list] (__pthread_initialize_minimal_internal): Likewise. * nptl/pthreadP.h [__ASSUME_SET_ROBUST_LIST] (__set_robust_list_avail): Likewise. * nptl/pthread_create.c [__NR_set_robust_list && !__ASSUME_SET_ROBUST_LIST] (START_THREAD_DEFN): Likewise. * nptl/pthread_mutex_init.c [!__ASSUME_SET_ROBUST_LIST] (__pthread_mutex_init): Likewise. * sysdeps/unix/sysv/linux/arm/kernel-features.h (__ASSUME_SET_ROBUST_LIST): Likewise. * sysdeps/unix/sysv/linux/kernel-features.h: (__ASSUME_SET_ROBUST_LIST): Likewise. * sysdeps/unix/sysv/linux/m68k/kernel-features.h: (__ASSUME_SET_ROBUST_LIST): Likewise. * sysdeps/unix/sysv/linux/mips/kernel-features.h: (__ASSUME_SET_ROBUST_LIST): Likewise. * sysdeps/unix/sysv/linux/sparc/kernel-features.h: (__ASSUME_SET_ROBUST_LIST): Likewise.
* Remove __ASSUME_FUTEX_LOCK_PIAdhemerval Zanella2016-06-037-11/+15
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This patch removes __ASSUME_FUTEX_LOCK_PI usage and assumes that kernel will correctly return if it supports or not futex_atomic_cmpxchg_inatomic. Current PI mutex code already has runtime support by calling prio_inherit_missing and returns ENOTSUP if the futex operation fails at initialization (it issues a FUTEX_UNLOCK_PI futex operation). Also, current minimum supported kernel (v3.2) will return ENOSYS if futex_atomic_cmpxchg_inatomic is not supported in the system: kernel/futex.c: 2628 long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout, 2629 u32 __user *uaddr2, u32 val2, u32 val3) 2630 { 2631 int ret = -ENOSYS, cmd = op & FUTEX_CMD_MASK; [...] 2667 case FUTEX_UNLOCK_PI: 2668 if (futex_cmpxchg_enabled) 2669 ret = futex_unlock_pi(uaddr, flags); [...] 2686 return ret; 2687 } The futex_cmpxchg_enabled is initialized by calling cmpxchg_futex_value_locked, which calls futex_atomic_cmpxchg_inatomic. For ARM futex_atomic_cmpxchg_inatomic will be either defined (if both CONFIG_CPU_USE_DOMAINS and CONFIG_SMP are not defined) or use the default generic implementation that returns ENOSYS. For m68k is uses the default generic implementation. For mips futex_atomic_cmpxchg_inatomic will return ENOSYS if cpu has no 'cpu_has_llsc' support (defined by each chip supporte inside kernel). For sparc, 32-bit kernel will just use default generic implementation, while 64-bit kernel has support. Tested on ARM (v3.8 kernel) and x86_64. * nptl/pthread_mutex_init.c [__ASSUME_FUTEX_LOCK_PI] (prio_inherit_missing): Remove define. * sysdeps/unix/sysv/linux/arm/kernel-features.h (__ASSUME_FUTEX_LOCK_PI): Likewise. * sysdeps/unix/sysv/linux/kernel-features.h (__ASSUME_FUTEX_LOCK_PI): Likewise. * sysdeps/unix/sysv/linux/m68k/kernel-features.h (__ASSUME_FUTEX_LOCK_PI): Likewise. * sysdeps/unix/sysv/linux/mips/kernel-features.h (__ASSUME_FUTEX_LOCK_PI): Likewise. * sysdeps/unix/sysv/linux/sparc/kernel-features.h (__ASSUME_FUTEX_LOCK_PI): Likewise.
* libio: Fix fmemopen append mode failure (BZ# 20012)Adhemerval Zanella2016-06-033-14/+138
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The fmemopen implementation does not account the file position correctly in append mode. The following example shows the failure: === int main () { char buf[10] = "test"; FILE *fp = fmemopen (buf, 10, "a+"); fseek (fp, 0, SEEK_SET); int gr; if ((gr = getc (fp)) != 't' || (gr = getc (fp)) != 'e' || (gr = getc (fp)) != 's' || (gr = getc (fp)) != 't' || (gr = getc (fp)) != EOF) { printf ("%s: getc failed returned %i\n", __FUNCTION__, gr); return 1; } return 0; } === This is due both how read and write operation update the buffer position, taking in consideration buffer lenght instead of maximum position defined by the open mode. This patch fixes it and also fixes fseek not returning EINVAL for invalid whence modes. Tested on x86_64 and i686. This is a backport of b65b205fbcabbb02463e31df17f5cabf7556f892. [BZ #20012] * libio/fmemopen.c (fmemopen_read): Use buffer maximum position, not length to calculate the buffer to read. (fmemopen_write): Set the buffer position based on bytes written. (fmemopen_seek): Return EINVAL for invalid whence modes.
* libio: Update internal fmemopen position after write (BZ #20005)Adhemerval Zanella2016-06-034-4/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Current GLIBC fmemopen fails with a simple testcase: char buffer[500] = "x"; FILE *stream; stream = fmemopen(buffer, 500, "r+"); fwrite("fish",sizeof(char),5,stream); printf("pos-1:%ld\n",ftell(stream)); fflush(stream); printf("pos-2:%ld\n",ftell(stream)); It returns: pos-1:5 pos-2:0 Where it should return: pos-1:5 pos-2:5 This is due the internal write function does not correctly update the internal object position state and then the seek operation returns a wrong value. This patch fixes it. It fixes both BZ #20005 and BZ #19230 (marked as duplicated). A new test is added to check for such case. Tested on x86_64 and i686. This is a backport of f9123b5003e62b6e54996076e860f23aee9a0593. * libio/fmemopen.c (fmemopen_write): Update internal position after write. * stdio-common/Makefile (tests): Add tst-fmemopen4.c. * stdio-common/tst-fmemopen4.c: New file..
* fork in libpthread cannot use IFUNC resolver [BZ #19861]Florian Weimer2016-06-022-33/+19
| | | | | | | | This commit only addresses the fork case, the vfork case has to be a tail call, which is why the generic code needs an IFUNC resolver there. (cherry picked from commit f06f3f05b48c72e2c9b0fa78671f94fd22d67da8)
* test-skeleton.c: Do not set RLIMIT_DATA [BZ #19648]Florian Weimer2016-05-302-17/+5
| | | | | | | | | | | With older kernels, it is mostly ineffective because it causes malloc to switch from sbrk to mmap (potentially invalidating malloc testing compared to what real appliations do). With newer kernels which have switched to enforcing RLIMIT_DATA for mmap as well, some test cases will fail in an unintended fashion because the limit which was set previously does not include room for all mmap mappings. (cherry picked from commit 900056024b75eae8b550d7fee1dec9e71f28344e)
* Make padding in struct sockaddr_storage explicit [BZ #20111]Florian Weimer2016-05-249-15/+213
| | | | | | | | | | | | This avoids aliasing issues with GCC 6 in -fno-strict-aliasing mode. (With implicit padding, not all data is copied.) This change makes it explicit that struct sockaddr_storage is only 126 bytes large on m68k (unlike elsewhere, where we end up with the requested 128 bytes). The new test case makes sure that this does not happen on other architectures. (cherry picked from commit 3375cfafa7961c6ae0e509c31c3b3cef9ad1f03d)
* CVE-2016-4429: sunrpc: Do not use alloca in clntudp_call [BZ #20112]Florian Weimer2016-05-243-1/+20
| | | | | | | | | | | | The call is technically in a loop, and under certain circumstances (which are quite difficult to reproduce in a test case), alloca can be invoked repeatedly during a single call to clntudp_call. As a result, the available stack space can be exhausted (even though individual alloca sizes are bounded implicitly by what can fit into a UDP packet, as a side effect of the earlier successful send operation). (cherry picked from commit bc779a1a5b3035133024b21e2f339fe4219fb11c)
* tst-mallocfork2: Fix race condition, use fewer resourcesFlorian Weimer2016-05-242-1/+16
| | | | | | | | | | | | | | | | | | | | | | The first SIGUSR1 signal could arrive when sigusr1_sender_pid was still 0. As a result, kill would send SIGSTOP to the entire process group. This would cause the test to hang before printing any output. This commit also adds a sched_yield to the signal source, so that it does not flood the parent process with signals it has never a chance to handle. Even with these changes, tst-mallocfork2 still fails reliably after the fix in commit commit 56290d6e762c1194547e73ff0b948cd79d3a1e03 (Increase fork signal safety for single-threaded processes) is backed out. (cherry picked from commit e2cd73a2ccabe8acae28719a0c3c1c03f2b5f9fb) The backport increases the timeout to 20 seconds, in line with the default on master. (The branch default of 2 seconds is too tight.)
* Increase fork signal safety for single-threaded processes [BZ #19703]Florian Weimer2016-05-124-16/+262
| | | | | | | | | | | This provides a band-aid and addresses the scenario where fork is called from a signal handler while the process is in the malloc subsystem (or has acquired the libio list lock). It does not address the general issue of async-signal-safety of fork; multi-threaded processes are not covered, and some glibc subsystems have fork handlers which are not async-signal-safe. (cherry picked from commit 56290d6e762c1194547e73ff0b948cd79d3a1e03)
* Fix strfmon_l: Use specified locale for number formatting [BZ #19633]Stefan Liebler2016-05-112-6/+12
| | | | | | | | | | | | | | | | | | | | The commit 985fc132f23dbb83de76c5af9e783ef1b5900148 "strfmon_l: Use specified locale for number formatting [BZ #19633]" introduced an elf/check-abi-libc testfailure due to __printf_fp_l on architectures which use sysdeps/ieee754/ldbl-opt/math_ldbl_opt.h. This patch uses libc_hidden_def instead of ldbl_hidden_def. The ldbl_strong_alias is removed due to the rename of ___printf_fp_l to __printf_fp_l. ChangeLog: * stdio-common/printf_fp.c (__printf_fp_l): Rename ___printf_fp_l to __printf_fp_l and remove strong alias. Use libc_hidden_def instead of ldbl_hidden_def macro. (cherry picked from commit b1b8f5d89d06a994773e22ad4b7fe1036b37f8ab)
* CVE-2016-3706: getaddrinfo: stack overflow in hostent conversion [BZ #20010]Florian Weimer2016-05-112-61/+79
| | | | | | | | | | | | When converting a struct hostent response to struct gaih_addrtuple, the gethosts macro (which is called from gaih_inet) used alloca, without malloc fallback for large responses. This commit changes this code to use calloc unconditionally. This commit also consolidated a second hostent-to-gaih_addrtuple conversion loop (in gaih_inet) to use the new conversion function. (cherry picked from commit 4ab2ab03d4351914ee53248dc5aef4a8c88ff8b9)