]> git.ipfire.org Git - thirdparty/glibc.git/log
thirdparty/glibc.git
7 years agoCVE-2017-15670: glob: Fix one-byte overflow [BZ #22320]
Paul Eggert [Fri, 20 Oct 2017 16:41:14 +0000 (18:41 +0200)] 
CVE-2017-15670: glob: Fix one-byte overflow [BZ #22320]

(cherry picked from commit c369d66e5426a30e4725b100d5cd28e372754f90)

7 years agoposix: Sync glob with gnulib [BZ #1062]
Adhemerval Zanella [Mon, 4 Sep 2017 17:53:38 +0000 (14:53 -0300)] 
posix: Sync glob with gnulib [BZ #1062]

This patch syncs posix/glob.c implementation with gnulib version
b5ec983 (glob: simplify symlink detection).  The only difference
to gnulib code is

  * DT_UNKNOWN, DT_DIR, and DT_LNK definition in the case there
    were not already defined.  Gnulib code which uses
    HAVE_STRUCT_DIRENT_D_TYPE will redefine them wrongly because
    GLIBC does not define HAVE_STRUCT_DIRENT_D_TYPE.  Instead
    the patch check for each definition instead.

Also, the patch requires additional globfree and globfree64 files
for compatibility version on some architectures.  Also the code
simplification leads to not macro simplification (not need for
NO_GLOB_PATTERN_P anymore).

Checked on x86_64-linux-gnu and on a build using build-many-glibcs.py
for all major architectures.

[BZ #1062]
* posix/Makefile (routines): Add globfree, globfree64, and
glob_pattern_p.
* posix/flexmember.h: New file.
* posix/glob_internal.h: Likewise.
* posix/glob_pattern_p.c: Likewise.
* posix/globfree.c: Likewise.
* posix/globfree64.c: Likewise.
* sysdeps/gnu/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/alpha/globfree.c: Likewise.
* sysdeps/unix/sysv/linux/mips/mips64/n64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/oldglob.c: Likewise.
* sysdeps/unix/sysv/linux/wordsize-64/globfree64.c: Likewise.
* sysdeps/unix/sysv/linux/x86_64/x32/globfree.c: Likewise.
* sysdeps/wordsize-64/globfree.c: Likewise.
* sysdeps/wordsize-64/globfree64.c: Likewise.
* posix/glob.c (HAVE_CONFIG_H): Use !_LIBC instead.
[NDEBUG): Remove comments.
(GLOB_ONLY_P, _AMIGA, VMS): Remove define.
(dirent_type): New type.  Use uint_fast8_t not
uint8_t, as C99 does not require uint8_t.
(DT_UNKNOWN, DT_DIR, DT_LNK): New macros.
(struct readdir_result): Use dirent_type.  Do not define skip_entry
unless it is needed; this saves a byte on platforms lacking d_ino.
(readdir_result_type, readdir_result_skip_entry):
New functions, replacing ...
(readdir_result_might_be_symlink, readdir_result_might_be_dir):
 these functions, which were removed.  This makes the callers
easier to read.  All callers changed.
(D_INO_TO_RESULT): Now empty if there is no d_ino.
(size_add_wrapv, glob_use_alloca): New static functions.
(glob, glob_in_dir): Check for size_t overflow in several places,
and fix some size_t checks that were not quite right.
Remove old code using SHELL since Bash no longer
uses this.
(glob, prefix_array): Separate MS code better.
(glob_in_dir): Remove old Amiga and VMS code.
(globfree, __glob_pattern_type, __glob_pattern_p): Move to
separate files.
(glob_in_dir): Do not rely on undefined behavior in accessing
struct members beyond their bounds.  Use a flexible array member
instead
(link_stat): Rename from link_exists2_p and return -1/0 instead of
0/1.  Caller changed.
(glob): Fix memory leaks.
* posix/glob64 (globfree64): Move to separate file.
* sysdeps/gnu/glob64.c (NO_GLOB_PATTERN_P): Remove define.
(globfree64): Remove hidden alias.
* sysdeps/unix/sysv/linux/Makefile (sysdeps_routines): Add
oldglob.
* sysdeps/unix/sysv/linux/alpha/glob.c (__new_globfree): Move to
separate file.
* sysdeps/unix/sysv/linux/i386/glob64.c (NO_GLOB_PATTERN_P): Remove
define.
Move compat code to separate file.
* sysdeps/wordsize-64/glob.c (globfree): Move definitions to
separate file.

(cherry picked from commit c66c908230169c1bab1f83b071eb585baa214b9f)

7 years agoi386: Hide __old_glob64 [BZ #18822]
H.J. Lu [Sun, 20 Aug 2017 17:46:47 +0000 (10:46 -0700)] 
i386: Hide __old_glob64 [BZ #18822]

Hide internal __old_glob64 function to allow direct access within
libc.so and libc.a without using GOT nor PLT.

[BZ #18822]
* sysdeps/unix/sysv/linux/i386/glob64.c (__old_glob64): Add
libc_hidden_proto and libc_hidden_def.

(cherry picked from commit 2585d7b839559e665d5723734862fbe62264b25d)

7 years agoFix missing posix_fadvise64 mips64 static build (BZ #21232)
Adhemerval Zanella [Tue, 14 Mar 2017 19:42:08 +0000 (16:42 -0300)] 
Fix missing posix_fadvise64 mips64 static build (BZ #21232)

This patch fixes the missing posix_fadvise64 symbol for static build
required for _FILE_OFFSET_BITS=64 on mips64 build.

Checked on a mips64-linux-gnu build with run-built-tests=no.

[BZ #21232]
* sysdeps/unix/sysv/linux/mips/mips64/n64/posix_fadvise64.c: Add
posix_fadvise64 weak_alias for static build.

(cherry picked from commit ed7d6072f25f75b808b40c206371361f1313f342)

7 years agoposix: Do not use WNOHANG in waitpid call for Linux posix_spawn
Adhemerval Zanella [Sat, 21 Oct 2017 13:33:27 +0000 (11:33 -0200)] 
posix: Do not use WNOHANG in waitpid call for Linux posix_spawn

As shown in some buildbot issues on aarch64 and powerpc, calling
clone (VFORK) and waitpid (WNOHANG) does not guarantee the child
is ready to be collected.  This patch changes the call back to 0
as before fe05e1cb6d64 fix.

This change can lead to the scenario 4.3 described in the commit,
where the waitpid call can hang undefinitely on the call.  However
this is also a very unlikely and also undefinied situation where
both the caller is trying to terminate a pid before posix_spawn
returns and the race pid reuse is triggered.  I don't see how to
correct handle this specific situation within posix_spawn.

Checked on x86_64-linux-gnu, aarch64-linux-gnu and
powerpc64-linux-gnu.

* sysdeps/unix/sysv/linux/spawni.c (__spawnix): Use 0 instead of
WNOHANG in waitpid call.

(cherry picked from commit aa95a2414e4f664ca740ad5f4a72d9145abbd426)

7 years agoposix: Fix improper assert in Linux posix_spawn (BZ#22273)
Adhemerval Zanella [Thu, 12 Oct 2017 18:20:57 +0000 (15:20 -0300)] 
posix: Fix improper assert in Linux posix_spawn (BZ#22273)

As noted by Florian Weimer, current Linux posix_spawn implementation
can trigger an assert if the auxiliary process is terminated before
actually setting the err member:

    340   /* Child must set args.err to something non-negative - we rely on
    341      the parent and child sharing VM.  */
    342   args.err = -1;
    [...]
    362   new_pid = CLONE (__spawni_child, STACK (stack, stack_size), stack_size,
    363                    CLONE_VM | CLONE_VFORK | SIGCHLD, &args);
    364
    365   if (new_pid > 0)
    366     {
    367       ec = args.err;
    368       assert (ec >= 0);

Another possible issue is killing the child between setting the err and
actually calling execve.  In this case the process will not ran, but
posix_spawn also will not report any error:

    269
    270   args->err = 0;
    271   args->exec (args->file, args->argv, args->envp);

As suggested by Andreas Schwab, this patch removes the faulty assert
and also handles any signal that happens before fork and execve as the
spawn was successful (and thus relaying the handling to the caller to
figure this out).  Different than Florian, I can not see why using
atomics to set err would help here, essentially the code runs
sequentially (due CLONE_VFORK) and I think it would not be legal the
compiler evaluate ec without checking for new_pid result (thus there
is no need to compiler barrier).

Summarizing the possible scenarios on posix_spawn execution, we
have:

  1. For default case with a success execution, args.err will be 0, pid
     will not be collected and it will be reported to caller.

  2. For default failure case, args.err will be positive and the it will
     be collected by the waitpid.  An error will be reported to the
     caller.

  3. For the unlikely case where the process was terminated and not
     collected by a caller signal handler, it will be reported as succeful
     execution and not be collected by posix_spawn (since args.err will
     be 0). The caller will need to actually handle this case.

  4. For the unlikely case where the process was terminated and collected
     by caller we have 3 other possible scenarios:

     4.1. The auxiliary process was terminated with args.err equal to 0:
  it will handled as 1. (so it does not matter if we hit the pid
          reuse race since we won't possible collect an unexpected
          process).

     4.2. The auxiliary process was terminated after execve (due a failure
          in calling it) and before setting args.err to -1: it will also
          be handle as 1. but with the issue of not be able to report the
          caller a possible execve failures.

     4.3. The auxiliary process was terminated after args.err is set to -1:
          this is the case where it will be possible to hit the pid reuse
          case where we will need to collected the auxiliary pid but we
          can not be sure if it will be expected one.  I think for this
          case we need to actually change waitpid to use WNOHANG to avoid
          hanging indefinitely on the call and report an error to caller
          since we can't differentiate between a default failure as 2.
          and a possible pid reuse race issue.

Checked on x86_64-linux-gnu.

* sysdeps/unix/sysv/linux/spawni.c (__spawnix): Handle the case where
the auxiliary process is terminated by a signal before calling _exit
or execve.

(cherry picked from commit fe05e1cb6d64dba6172249c79526f1e9af8f2bfd)

7 years agoAdd test for bug 21041
Andreas Schwab [Tue, 8 Aug 2017 15:44:32 +0000 (17:44 +0200)] 
Add test for bug 21041

(cherry picked from commit 40c06a3d0450365e9675fe26f34fc56ce8497325)

7 years agoFix s390 version of pt-longjmp.c
Andreas Schwab [Wed, 9 Aug 2017 08:36:08 +0000 (10:36 +0200)] 
Fix s390 version of pt-longjmp.c

(cherry picked from commit 5797b410a87f6f6f6d3661d730fac320cbd5f270)

7 years agoDon't use IFUNC resolver for longjmp or system in libpthread (bug 21041)
Andreas Schwab [Tue, 8 Aug 2017 14:21:58 +0000 (16:21 +0200)] 
Don't use IFUNC resolver for longjmp or system in libpthread (bug 21041)

Unlike the vfork forwarder and like the fork forwarder as in bug 19861,
there won't be a problem when the compiler does not turn this into a tail
call.

(cherry picked from commit fc5ad7024c620cdfe9b76e94638aac83b99c5bf8)

7 years agoFix TLS relocations against local symbols on powerpc32, sparc32 and sparc64
James Clarke [Fri, 13 Oct 2017 18:44:39 +0000 (15:44 -0300)] 
Fix TLS relocations against local symbols on powerpc32, sparc32 and sparc64

Normally, TLS relocations against local symbols are optimised by the linker
to be absolute.  However, gold does not do this, and so it is possible to
end up with, for example, R_SPARC_TLS_DTPMOD64 referring to a local symbol.
Since sym_map is left as null in elf_machine_rela for the special local
symbol case, the relocation handling thinks it has nothing to do, and so
the module gets left as 0.  Havoc then ensues when the variable in question
is accessed.

Before this fix, the main_local_gold program would receive a SIGBUS on
sparc64, and SIGSEGV on powerpc32.  With this fix applied, that test now
passes like the rest of them.

* sysdeps/powerpc/powerpc32/dl-machine.h (elf_machine_rela):
Assign sym_map to be map for local symbols, as TLS relocations
use sym_map to determine whether the symbol is defined and to
extract the TLS information.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela): Likewise.

7 years agoInstall correct bits/long-double.h for MIPS64 (bug 22322).
Joseph Myers [Thu, 19 Oct 2017 17:32:20 +0000 (17:32 +0000)] 
Install correct bits/long-double.h for MIPS64 (bug 22322).

Similar to bug 21987 for SPARC, MIPS64 wrongly installs the ldbl-128
version of bits/long-double.h, meaning incorrect results when using
headers installed from a 64-bit installation for a 32-bit build.  (I
haven't actually seen this cause build failures before its interaction
with bits/floatn.h did so - installed headers wrongly expecting
_Float128 to be available in a 32-bit configuration.)

This patch fixes the bug by moving the MIPS header to
sysdeps/mips/ieee754, which comes before sysdeps/ieee754/ldbl-128 in
the sysdeps directory ordering.  (bits/floatn.h will need a similar
fix - duplicating the ldbl-128 version for MIPS will suffice - for
headers from a 32-bit installation to be correct for 64-bit builds.)

Tested with build-many-glibcs.py (compilers build for
mips64-linux-gnu, where there was previously a libstdc++ build failure
as at
<https://sourceware.org/ml/libc-testresults/2017-q4/msg00130.html>).

[BZ #22322]
* sysdeps/mips/bits/long-double.h: Move to ....
* sysdeps/mips/ieee754/bits/long-double.h: ... here.

(cherry picked from commit 37bb78cb8c1fb6b5813407c8856b1557359e6343)

7 years agox86-64: Use fxsave/xsave/xsavec in _dl_runtime_resolve [BZ #21265]
H.J. Lu [Sun, 22 Oct 2017 15:20:38 +0000 (08:20 -0700)] 
x86-64: Use fxsave/xsave/xsavec in _dl_runtime_resolve [BZ #21265]

In _dl_runtime_resolve, use fxsave/xsave/xsavec to preserve all vector,
mask and bound registers.  It simplifies _dl_runtime_resolve and supports
different calling conventions.  ld.so code size is reduced by more than
1 KB.  However, use fxsave/xsave/xsavec takes a little bit more cycles
than saving and restoring vector and bound registers individually.

Latency for _dl_runtime_resolve to lookup the function, foo, from one
shared library plus libc.so:

                             Before    After     Change

Westmere (SSE)/fxsave         345      866       151%
IvyBridge (AVX)/xsave         420      643       53%
Haswell (AVX)/xsave           713      1252      75%
Skylake (AVX+MPX)/xsavec      559      719       28%
Skylake (AVX512+MPX)/xsavec   145      272       87%
Ryzen (AVX)/xsavec            280      553       97%

This is the worst case where portion of time spent for saving and
restoring registers is bigger than majority of cases.  With smaller
_dl_runtime_resolve code size, overall performance impact is negligible.

On IvyBridge, differences in build and test time of binutils with lazy
binding GCC and binutils are noises.  On Westmere, differences in
bootstrap and "makc check" time of GCC 7 with lazy binding GCC and
binutils are also noises.

[BZ #21265]
* sysdeps/x86/cpu-features-offsets.sym (XSAVE_STATE_SIZE_OFFSET):
New.
* sysdeps/x86/cpu-features.c: Include <libc-internal.h>.
(get_common_indeces): Set xsave_state_size and
bit_arch_XSAVEC_Usable if needed.
(init_cpu_features): Remove bit_arch_Use_dl_runtime_resolve_slow
and bit_arch_Use_dl_runtime_resolve_opt.
* sysdeps/x86/cpu-features.h (bit_arch_Use_dl_runtime_resolve_opt):
Removed.
(bit_arch_Use_dl_runtime_resolve_slow): Likewise.
(bit_arch_Prefer_No_AVX512): Updated.
(bit_arch_MathVec_Prefer_No_AVX512): Likewise.
(bit_arch_XSAVEC_Usable): New.
(STATE_SAVE_OFFSET): Likewise.
(STATE_SAVE_MASK): Likewise.
[__ASSEMBLER__]: Include <cpu-features-offsets.h>.
(cpu_features): Add xsave_state_size.
(index_arch_Use_dl_runtime_resolve_opt): Removed.
(index_arch_Use_dl_runtime_resolve_slow): Likewise.
(index_arch_XSAVEC_Usable): New.
* sysdeps/x86_64/dl-machine.h (elf_machine_runtime_setup):
Replace _dl_runtime_resolve_sse, _dl_runtime_resolve_avx,
_dl_runtime_resolve_avx_slow, _dl_runtime_resolve_avx_opt,
_dl_runtime_resolve_avx512 and _dl_runtime_resolve_avx512_opt
with _dl_runtime_resolve_fxsave, _dl_runtime_resolve_xsave and
_dl_runtime_resolve_xsavec.
* sysdeps/x86_64/dl-trampoline.S (DL_RUNTIME_UNALIGNED_VEC_SIZE):
Removed.
(DL_RUNTIME_RESOLVE_REALIGN_STACK): Check STATE_SAVE_ALIGNMENT
instead of VEC_SIZE.
(REGISTER_SAVE_BND0): Removed.
(REGISTER_SAVE_BND1): Likewise.
(REGISTER_SAVE_BND3): Likewise.
(REGISTER_SAVE_RAX): Always defined to 0.
(VMOV): Removed.
(_dl_runtime_resolve_avx): Likewise.
(_dl_runtime_resolve_avx_slow): Likewise.
(_dl_runtime_resolve_avx_opt): Likewise.
(_dl_runtime_resolve_avx512): Likewise.
(_dl_runtime_resolve_avx512_opt): Likewise.
(_dl_runtime_resolve_sse): Likewise.
(_dl_runtime_resolve_sse_vex): Likewise.
(USE_FXSAVE): New.
(_dl_runtime_resolve_fxsave): Likewise.
(USE_XSAVE): Likewise.
(_dl_runtime_resolve_xsave): Likewise.
(USE_XSAVEC): Likewise.
(_dl_runtime_resolve_xsavec): Likewise.
* sysdeps/x86_64/dl-trampoline.h (_dl_runtime_resolve_avx512):
Removed.
(_dl_runtime_resolve_avx512_opt): Likewise.
(_dl_runtime_resolve_avx): Likewise.
(_dl_runtime_resolve_avx_opt): Likewise.
(_dl_runtime_resolve_sse): Likewise.
(_dl_runtime_resolve_sse_vex): Likewise.
(_dl_runtime_resolve_fxsave): New.
(_dl_runtime_resolve_xsave): Likewise.
(_dl_runtime_resolve_xsavec): Likewise.

(cherry picked from commit b52b0d793dcb226ecb0ecca1e672ca265973233c)

7 years agox86-64: Verify that _dl_runtime_resolve preserves vector registers
H.J. Lu [Thu, 19 Oct 2017 15:47:38 +0000 (08:47 -0700)] 
x86-64: Verify that _dl_runtime_resolve preserves vector registers

On x86-64, _dl_runtime_resolve must preserve the first 8 vector
registers.  Add 3 _dl_runtime_resolve tests to verify that SSE,
AVX and AVX512 registers are preserved.

* sysdeps/x86_64/Makefile (tests): Add tst-sse, tst-avx and
tst-avx512.
(test-extras): Add tst-avx-aux and tst-avx512-aux.
(extra-test-objs): Add tst-avx-aux.o and tst-avx512-aux.o.
(modules-names): Add tst-ssemod, tst-avxmod and tst-avx512mod.
($(objpfx)tst-sse): New rule.
($(objpfx)tst-avx): Likewise.
($(objpfx)tst-avx512): Likewise.
(CFLAGS-tst-avx-aux.c): New.
(CFLAGS-tst-avxmod.c): Likewise.
(CFLAGS-tst-avx512-aux.c): Likewise.
(CFLAGS-tst-avx512mod.c): Likewise.
* sysdeps/x86_64/tst-avx-aux.c: New file.
* sysdeps/x86_64/tst-avx.c: Likewise.
* sysdeps/x86_64/tst-avx512-aux.c: Likewise.
* sysdeps/x86_64/tst-avx512.c: Likewise.
* sysdeps/x86_64/tst-avx512mod.c: Likewise.
* sysdeps/x86_64/tst-avxmod.c: Likewise.
* sysdeps/x86_64/tst-sse.c: Likewise.
* sysdeps/x86_64/tst-ssemod.c: Likewise.

(cherry picked from commit 3403a17fea8ccef7dc5f99553a13231acf838744)

7 years agoSynchronize support/ infrastructure with master
Florian Weimer [Wed, 11 Oct 2017 11:09:11 +0000 (13:09 +0200)] 
Synchronize support/ infrastructure with master

This commit updates the support/ subdirectory to
commit 84d0e6f05212cabe786cdf00bf3ba5d166d077c0
on the master branch.

7 years agoFix cast-after-dereference
DJ Delorie [Sat, 7 Oct 2017 11:28:16 +0000 (13:28 +0200)] 
Fix cast-after-dereference

Original code was dereferencing a char*, then casting the value
to size_t.  Should cast the pointer to size_t* then deference.

(cherry picked from commit f8cef4d07d9641e27629bd3ce2d13f5d702fb251)

7 years agoFix BZ #21654 - grp-merge.c alignment
DJ Delorie [Sat, 15 Jul 2017 01:46:42 +0000 (21:46 -0400)] 
Fix BZ #21654 - grp-merge.c alignment

* grp/grp_merge.c (__copy_grp): Align char** to minimum pointer
alignment not char alignment.
(__merge_grp): Likewise.

(cherry picked from commit 4fa8ae49aa169fb8d97882938e8bee3ed9ce5410)

7 years agoFix sparc32 bits/long-double.h (bug 21987).
Joseph Myers [Tue, 22 Aug 2017 00:59:43 +0000 (00:59 +0000)] 
Fix sparc32 bits/long-double.h (bug 21987).

My refactoring of long double information

commit 0acb8a2a855395c25b1feef2470f4d7ca4bed589
Author: Joseph Myers <joseph@codesourcery.com>
Date:   Wed Dec 14 18:27:56 2016 +0000

    Refactor long double information into bits/long-double.h.

resulted in sparc32 configurations installing the ldbl-opt version of
bits/long-double.h instead of the intended
sysdeps/unix/sysv/linux/sparc version.

For sparc32 by itself, this is not a problem, since the ldbl-opt
version is correct for sparc32.  However, both sparc32 and sparc64 are
supposed to install sets of headers that work for both of them, so
that a single sysroot, whichever order the libraries are built and
installed in, works for both.  The effect of having the wrong version
installed is that you end up with a miscompiled sparc64 libstdc++
which fails glibc's configure tests for the C++ compiler.

This patch moves the header from sysdeps/unix/sysv/linux/sparc to
separate copies of the same file for sparc32 and sparc64, to ensure it
comes before ldbl-opt in the sysdeps directory ordering.

Tested with build-many-glibcs.py for sparc64-linux-gnu and
sparcv9-linux-gnu.

[BZ #21987]
* sysdeps/unix/sysv/linux/sparc/bits/long-double.h: Remove file
and copy to ...
* sysdeps/unix/sysv/linux/sparc/sparc32/bits/long-double.h:
... here.
* sysdeps/unix/sysv/linux/sparc/sparc64/bits/long-double.h:
... and here.

(cherry picked from commit 80f91666fed71fa3dd5eb5618739147cc731bc89)

7 years agoMake copy of <bits/std_abs.h> from GCC 7 [BZ #21573]
H.J. Lu [Mon, 11 Sep 2017 16:04:57 +0000 (09:04 -0700)] 
Make copy of <bits/std_abs.h> from GCC 7 [BZ #21573]

<bits/std_abs.h> from GCC 7 will include /usr/include/stdlib.h from
"#include_next" (instead of stdlib/stdlib.h in the glibc source
directory), and this turns up as a make dependency.  Also make a copy
of <bits/std_abs.h> to prevent it from including /usr/include/stdlib.h.

* configure.ac (find_cxx_header): Suppress compiler error message.
* configure: Regenerated.

[BZ #21573]
* Makerules [$(c++-bits-std_abs-h) != ""] (before-compile): Add
$(common-objpfx)bits/std_abs.h.
[$(c++-bits-std_abs-h) != ""] ($(common-objpfx)bits/std_abs.h):
New target.
* config.make.in (c++-bits-std_abs-h): New.
* configure.ac (find_cxx_header): Use "\,$1," with sed.
(CXX_BITS_STD_ABS_H): New.
(AC_SUBST(CXX_BITS_STD_ABS_H)): Likewise.
* configure: Regenerated.

(cherry picked from commit a65ea28d1833d3502c5070472e43bda04410e6b5 and
 commit c2528fef3b05bcffb1ac27c6c09cc3ff24b7f03f)

7 years agostring/stratcliff.c: Replace int with size_t [BZ #21982]
H.J. Lu [Mon, 11 Sep 2017 15:51:52 +0000 (08:51 -0700)] 
string/stratcliff.c: Replace int with size_t [BZ #21982]

Fix GCC 7 errors when string/stratcliff.c is compiled with -O3:

stratcliff.c: In function ‘do_test’:
cc1: error: assuming signed overflow does not occur when assuming that (X - c) <= X is always true [-Werror=strict-overflow]

[BZ #21982]
* string/stratcliff.c (do_test): Declare size, nchars, inner,
middle and outer with size_t instead of int.  Repleace %d and
%Zd with %zu in printf.  Update "MAX (0, nchars - 128)" and
"MAX (outer, nchars - 64)" to support unsigned outer and
nchars.  Also exit loop when outer == 0.

(cherry picked from commit 376b40a27a6783ea7f73ae577be320df66aeb36d)

7 years agoUse "static const char domain[] ="
H.J. Lu [Thu, 7 Sep 2017 20:56:58 +0000 (13:56 -0700)] 
Use "static const char domain[] ="

* resolv/tst-resolv-qtypes.c (domain): Changed to
"const char domain[] =".

(cherry picked from commit 78bfa877b36e8f33c99cbe9a16eb73f5a2adc0c8)

7 years agoPlace $(elf-objpfx)sofini.os last [BZ #22051]
H.J. Lu [Thu, 31 Aug 2017 13:28:31 +0000 (06:28 -0700)] 
Place $(elf-objpfx)sofini.os last [BZ #22051]

Since sofini.os terminates .eh_frame section, it should be placed last.

[BZ #22051]
* Makerules (build-module-helper-objlist): Filter out
$(elf-objpfx)sofini.os.
(build-shlib-objlist): Append $(elf-objpfx)sofini.os if it is
needed.

(cherry picked from commit ecd0747df388f3925d4839740b0abcf43d0a9fb2)

7 years agomutex: Fix robust mutex lock acquire (Bug 21778)
Carlos O'Donell [Sat, 29 Jul 2017 04:02:03 +0000 (00:02 -0400)] 
mutex: Fix robust mutex lock acquire (Bug 21778)

65810f0ef05e8c9e333f17a44e77808b163ca298 fixed a robust mutex bug but
introduced BZ 21778: if the CAS used to try to acquire a lock fails, the
expected value is not updated, which breaks other cases in the loce
acquisition loop.  The fix is to simply update the expected value with
the value returned by the CAS, which ensures that behavior is as if the
first case with the CAS never happened (if the CAS fails).

This is a regression introduced in the last release.

Tested on x86_64, i686, ppc64, ppc64le, s390x, aarch64, armv7hl.

(cherry picked from commit 5920a4a624b1f4db310d1c44997b640e2a4653e5)

7 years agorwlock: Fix explicit hand-over (bug 21298)
Carlos O'Donell [Mon, 28 Aug 2017 13:04:39 +0000 (15:04 +0200)] 
rwlock: Fix explicit hand-over (bug 21298)

Without this fix, the rwlock can fail to execute the explicit hand-over
in certain cases (e.g., empty critical sections that switch quickly between
read and write phases).  This can then lead to errors in how __wrphase_futex
is accessed, which in turn can lead to deadlocks.

(cherry picked from commit faf8c066df0d6bccb54bd74dd696eeb65e1b3bbc)

7 years agoSynchronize support/ infrastructure with master
Florian Weimer [Mon, 28 Aug 2017 12:38:52 +0000 (14:38 +0200)] 
Synchronize support/ infrastructure with master

This commit updates the support/ subdirectory to
commit faf8c066df0d6bccb54bd74dd696eeb65e1b3bbc
on the master branch.

7 years agoassert: Support types without operator== (int) [BZ #21972]
Florian Weimer [Mon, 21 Aug 2017 14:15:47 +0000 (16:15 +0200)] 
assert: Support types without operator== (int) [BZ #21972]

(cherry picked from commit b5889d25e9bf944a89fdd7bcabf3b6c6f6bb6f7c)

8 years agoresolv: Reduce EDNS payload size to 1200 bytes [BZ #21361]
Florian Weimer [Thu, 13 Apr 2017 11:09:38 +0000 (13:09 +0200)] 
resolv: Reduce EDNS payload size to 1200 bytes [BZ #21361]

This hardens the stub resolver against fragmentation-based attacks.

(cherry picked from commit e14a27723cc3a154d67f3f26e719d08c0ba9ad25)

8 years agoReturn to caller if dl_fixup fails to resolve callee on hppa.
John David Anglin [Sat, 12 Aug 2017 21:54:26 +0000 (17:54 -0400)] 
Return to caller if dl_fixup fails to resolve callee on hppa.

[BZ 19170]
* sysdeps/hppa/dl-trampoline.S (_dl_runtime_resolve): Return to caller
if _dl_fixup fails.

8 years agoCall exit directly in clone (BZ #21512)
John David Anglin [Sat, 12 Aug 2017 21:37:14 +0000 (17:37 -0400)] 
Call exit directly in clone (BZ #21512)

[BZ #21512]
* sysdeps/unix/sysv/linux/aarch64/clone.S (__clone): Call exit
syscall instead of jump to _exit.
* sysdeps/unix/sysv/linux/hppa/localplt.data: Remove _exit entry.

8 years ago hppa: set __IPC_64 as zero for SysV IPC calls
John David Anglin [Sat, 12 Aug 2017 21:19:59 +0000 (17:19 -0400)] 
hppa: set __IPC_64 as zero for SysV IPC calls

    In 1e5834c38a22 ("Refactor Linux ipc_priv header") a different
    approach to passing __IPC_64 as zero was created.  Hppa kernel ABI
    requires to oass __IPC_64 as zero since it does not set
    CONFIG_ARCH_WANT_IPC_PARSE_VERSION in the kernel.

    Checked on hppa-linux-gnu with some adjustments to avoid BZ#21016
    (basically by removing hppa compat implementations and adjusting
    required headers).

            * sysdeps/unix/sysv/linux/hppa/ipc_priv.h: New file.

8 years agoAdd CFI annotation.
John David Anglin [Sat, 12 Aug 2017 20:59:50 +0000 (16:59 -0400)] 
Add CFI annotation.

* sysdeps/unix/sysv/linux/hppa/clone.S (__clone): Add .cfi annotation.
* sysdeps/unix/sysv/linux/hppa/getcontext.S (__getcontext): Likewise.
* sysdeps/unix/sysv/linux/hppa/pt-vfork.S (__vfork): Likewise.
* sysdeps/unix/sysv/linux/hppa/setcontext.S (__setcontext): Likewise.

8 years agoFix stack offset for r19 load in __getcontext.
John David Anglin [Sat, 12 Aug 2017 20:46:35 +0000 (16:46 -0400)] 
Fix stack offset for r19 load in __getcontext.

* sysdeps/unix/sysv/linux/hppa/getcontext.S (__getcontext): Fix stack
offset for r19 load.

8 years agoFix __setcontext return value on hppa.
John David Anglin [Sat, 12 Aug 2017 20:28:32 +0000 (16:28 -0400)] 
Fix __setcontext return value on hppa.

* sysdeps/unix/sysv/linux/hppa/setcontext.S (__setcontext): Return 0.

8 years agoFix syscall cancellation on hppa.
John David Anglin [Sat, 12 Aug 2017 20:11:36 +0000 (16:11 -0400)] 
Fix syscall cancellation on hppa.

* sysdeps/unix/sysv/linux/hppa/sysdep-cancel.h (PSEUDO): Fix CFA offset.
Use .cfi_def_cfa_offset instead of .cfi_offset.  Don't record stack
pointer offset.  Correct PIC register offset.  Don't mention frame
related instructions in epilogue.
(PUSHARGS_1): Correct offset.
(PUSHARGS_2): Likewise.
(PUSHARGS_3): Likewise.
(PUSHARGS_4): Likewise.
(PUSHARGS_5): Likewise.
(PUSHARGS_6): Likewise.
(POPARGS_1): Don't mention register restore.
(POPARGS_2): Likewise.
(POPARGS_3): Likewise.
(POPARGS_4): Likewise.
(POPARGS_5): Likewise.
(POPARGS_6): Likewise.
* sysdeps/unix/sysv/linux/hppa/sysdep.h (SAVE_PIC): Don't mention
copy of PIC register.
(LOAD_PIC): Likewise don't mention restore.
(DO_CALL): Fix CFA offset.  Use .cfi_def_cfa_offset instead of
.cfi_offset.  Don't record stack pointer offset.  Correct PIC register
offset.  Don't mention frame related instructions in epilogue.

8 years agoFix [BZ 20098].
John David Anglin [Sat, 12 Aug 2017 19:45:28 +0000 (15:45 -0400)] 
Fix [BZ 20098].

[BZ 20098]
* sysdeps/hppa/dl-fptr.c (_dl_read_access_allowed): New.
(_dl_lookup_address): Return address if it is not consistent with
being a linker defined function pointer.  Likewise, return address
if address and function descriptor addresses are not accessible.

8 years agoFix [BZ locale/19838].
John David Anglin [Sat, 12 Aug 2017 19:09:25 +0000 (15:09 -0400)] 
Fix [BZ locale/19838].

[BZ locale/19838]
* sysdeps/unix/sysv/linux/hppa/bits/shm.h (SHMLBA): Set to page size.

8 years agoFix guard alignment in allocate_stack when stack grows up.
John David Anglin [Sat, 12 Aug 2017 18:39:53 +0000 (14:39 -0400)] 
Fix guard alignment in allocate_stack when stack grows up.

* nptl/allocatestack.c (allocate_stack): Align old and new guard
addresses to page boundaries when the stack grows up.

8 years agoFix failing sNaN tests on hppa.
John David Anglin [Sat, 12 Aug 2017 17:43:57 +0000 (13:43 -0400)] 
Fix failing sNaN tests on hppa.

* sysdeps/hppa/math-tests.h: New.

8 years agoUse generic pthread support on hppa.
John David Anglin [Sat, 12 Aug 2017 17:02:52 +0000 (13:02 -0400)] 
Use generic pthread support on hppa.

        [BZ #21016]
        * sysdeps/hppa/nptl/bits/pthreadtypes.h: Update pthread_cond_t typedef.
        * sysdeps/unix/sysv/linux/hppa/pthread.h: Include
        bits/types/struct_timespec.h.
        (PTHREAD_MUTEX_INITIALIZER): Revise define.
        (PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP): Likewise.
        (PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP): Likewise.
        (PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP): Likewise.
        (PTHREAD_RWLOCK_INITIALIZER): Likewise.
        (PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP): Likewise.
        (PTHREAD_COND_INITIALIZER): Likewise.
        Remove old definitions.
        * sysdeps/unix/sysv/linux/hppa/internaltypes.h: Delete.
        * sysdeps/unix/sysv/linux/hppa/pthread_cond_broadcast.c: Delete.
        * sysdeps/unix/sysv/linux/hppa/pthread_cond_destroy.c: Delete.
        * sysdeps/unix/sysv/linux/hppa/pthread_cond_init.c: Delete.
        * sysdeps/unix/sysv/linux/hppa/pthread_cond_signal.c: Delete.
        * sysdeps/unix/sysv/linux/hppa/pthread_cond_wait.c: Delete.

8 years agoassert: Suppress pedantic warning caused by statement expression [BZ #21242]
Florian Weimer [Fri, 11 Aug 2017 14:02:55 +0000 (16:02 +0200)] 
assert: Suppress pedantic warning caused by statement expression [BZ #21242]

(cherry picked from commit 8b2c63e4e2ad1fd161f80004ed30624f2a37b57b)

8 years agohppa: Fix register corruption in __longjmp.
John David Anglin [Wed, 9 Aug 2017 01:29:21 +0000 (21:29 -0400)] 
hppa: Fix register corruption in __longjmp.

[BZ #21049]
        * sysdeps/hppa/__longjmp.c (__longjmp): Move call to CHECK_SP up
        to avoid clobbering r26.

8 years agox86-64: Use _dl_runtime_resolve_opt only with AVX512F [BZ #21871]
H.J. Lu [Sun, 6 Aug 2017 17:44:30 +0000 (10:44 -0700)] 
x86-64: Use _dl_runtime_resolve_opt only with AVX512F [BZ #21871]

On AVX machines with XGETBV (ECX == 1) like Skylake processors,

(gdb) disass _dl_runtime_resolve_avx_opt
Dump of assembler code for function _dl_runtime_resolve_avx_opt:
   0x0000000000015890 <+0>: push   %rax
   0x0000000000015891 <+1>: push   %rcx
   0x0000000000015892 <+2>: push   %rdx
   0x0000000000015893 <+3>: mov    $0x1,%ecx
   0x0000000000015898 <+8>: xgetbv
   0x000000000001589b <+11>: mov    %eax,%r11d
   0x000000000001589e <+14>: pop    %rdx
   0x000000000001589f <+15>: pop    %rcx
   0x00000000000158a0 <+16>: pop    %rax
   0x00000000000158a1 <+17>: and    $0x4,%r11d
   0x00000000000158a5 <+21>: bnd je 0x16200 <_dl_runtime_resolve_sse_vex>
End of assembler dump.

is slower than:

(gdb) disass _dl_runtime_resolve_avx_slow
Dump of assembler code for function _dl_runtime_resolve_avx_slow:
   0x0000000000015850 <+0>: vorpd  %ymm0,%ymm1,%ymm8
   0x0000000000015854 <+4>: vorpd  %ymm2,%ymm3,%ymm9
   0x0000000000015858 <+8>: vorpd  %ymm4,%ymm5,%ymm10
   0x000000000001585c <+12>: vorpd  %ymm6,%ymm7,%ymm11
   0x0000000000015860 <+16>: vorpd  %ymm8,%ymm9,%ymm9
   0x0000000000015865 <+21>: vorpd  %ymm10,%ymm11,%ymm10
   0x000000000001586a <+26>: vpcmpeqd %xmm8,%xmm8,%xmm8
   0x000000000001586f <+31>: vorpd  %ymm9,%ymm10,%ymm10
   0x0000000000015874 <+36>: vptest %ymm10,%ymm8
   0x0000000000015879 <+41>: bnd jae 0x158b0 <_dl_runtime_resolve_avx>
   0x000000000001587c <+44>: vzeroupper
   0x000000000001587f <+47>: bnd jmpq 0x16200 <_dl_runtime_resolve_sse_vex>
End of assembler dump.
(gdb)

since xgetbv takes much more cycles than single cycle operations like
vpord/vvpcmpeq/ptest.  _dl_runtime_resolve_opt should be used only with
AVX512 where AVX512 instructions lead to lower CPU frequency on Skylake
server.

[BZ #21871]
* sysdeps/x86/cpu-features.c (init_cpu_features): Set
bit_arch_Use_dl_runtime_resolve_opt only with AVX512F.

(cherry picked from commit d2cf37c0a2a375cf2fde69f1afbcc49e45368fc4)

8 years agoi686/multiarch: Regenerate ulps
Aurelien Jarno [Fri, 4 Aug 2017 01:07:39 +0000 (03:07 +0200)] 
i686/multiarch: Regenerate ulps

This comes from running “make regen-ulps” on an AMD Opteron 2378 CPU.

Changelog:
* sysdeps/i386/i686/fpu/multiarch/libm-test-ulps: Regenerated.

8 years agoFix the return type of the getentropy stub
Aurelien Jarno [Thu, 3 Aug 2017 22:35:48 +0000 (22:35 +0000)] 
Fix the return type of the getentropy stub

The return type of the getentropy stub is wrongly defined as ssize_t,
while both the <sys/random.h> header and the Linux implementation
define it as int. This patch fixes that.

Changelog:
* stdlib/getentropy.c (getentropy): Change return type to int.
(cherry picked from commit 2b34e2716f1e84b2c3457ffc868c3dc775b55845)

8 years agopowerpc: Fix logbl on power7 [BZ# 21280]
Tulio Magno Quites Machado Filho [Fri, 28 Apr 2017 22:45:52 +0000 (19:45 -0300)] 
powerpc: Fix logbl on power7 [BZ# 21280]

 1. Fix the results for negative subnormals by ignoring the signal when
    normalizing the value.
 2. Fix the output when the high part is a power of 2 and the low part
    is a nonzero number with opposite sign.  This fix is based on commit
    380bd0fd2418f8988217de950f8b8ff18af0cb2b.

After applying this patch, logbl() tests pass cleanly on POWER >= 7.

Tested on powerpc, powerpc64 and powerpc64le

[BZ #21280]
* sysdeps/powerpc/power7/fpu/s_logbl.c (__logbl): Ignore the
signal of subnormals and adjust the exponent of power of 2 down
when low part has opposite sign.

(cherry picked from commit c064f6a613844181f411aabb2662384a6aefb69e)

8 years agoAvoid .symver on common symbols [BZ #21666]
H.J. Lu [Wed, 26 Jul 2017 17:08:46 +0000 (10:08 -0700)] 
Avoid .symver on common symbols [BZ #21666]

The .symver directive on common symbol just creates a new common symbol,
not an alias and the newer assembler with the bug fix for

https://sourceware.org/bugzilla/show_bug.cgi?id=21661

will issue an error.  Before the fix, we got

$ readelf -sW libc.so | grep "loc[12s]"
  5109: 00000000003a0608     8 OBJECT  LOCAL  DEFAULT   36 loc1
  5188: 00000000003a0610     8 OBJECT  LOCAL  DEFAULT   36 loc2
  5455: 00000000003a0618     8 OBJECT  LOCAL  DEFAULT   36 locs
  6575: 00000000003a05f0     8 OBJECT  GLOBAL DEFAULT   36 locs@GLIBC_2.2.5
  7156: 00000000003a05f8     8 OBJECT  GLOBAL DEFAULT   36 loc1@GLIBC_2.2.5
  7312: 00000000003a0600     8 OBJECT  GLOBAL DEFAULT   36 loc2@GLIBC_2.2.5

in libc.so.  The versioned loc1, loc2 and locs have the wrong addresses.
After the fix, we got

$ readelf -sW libc.so | grep "loc[12s]"
  6570: 000000000039e3b8     8 OBJECT  GLOBAL DEFAULT   34 locs@GLIBC_2.2.5
  7151: 000000000039e3c8     8 OBJECT  GLOBAL DEFAULT   34 loc1@GLIBC_2.2.5
  7307: 000000000039e3c0     8 OBJECT  GLOBAL DEFAULT   34 loc2@GLIBC_2.2.5

[BZ #21666]
* misc/regexp.c (loc1): Add __attribute__ ((nocommon));
(loc2): Likewise.
(locs): Likewise.

(cherry picked from commit 388b4f1a02f3a801965028bbfcd48d905638b797)

8 years ago[AArch64] Use hidden __GI__dl_argv in rtld startup code
Szabolcs Nagy [Wed, 21 Jun 2017 12:47:07 +0000 (13:47 +0100)] 
[AArch64] Use hidden __GI__dl_argv in rtld startup code

We rely on the symbol being locally defined so using extern symbol
is not correct and the linker may complain about the relocations.

8 years agox86-64: Align the stack in __tls_get_addr [BZ #21609]
H.J. Lu [Thu, 6 Jul 2017 11:43:06 +0000 (04:43 -0700)] 
x86-64: Align the stack in __tls_get_addr [BZ #21609]

This change forces realignment of the stack pointer in __tls_get_addr, so
that binaries compiled by GCCs older than GCC 4.9:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=58066

continue to work even if vector instructions are used in glibc which
require the ABI stack realignment.

__tls_get_addr_slow is added to handle the slow paths in the default
implementation of__tls_get_addr in elf/dl-tls.c.  The new __tls_get_addr
calls __tls_get_addr_slow after realigning the stack.  Internal calls
within ld.so go directly to the default implementation of __tls_get_addr
because they do not need stack realignment.

[BZ #21609]
* sysdeps/x86_64/Makefile (sysdep-dl-routines): Add tls_get_addr.
(gen-as-const-headers): Add rtld-offsets.sym.
* sysdeps/x86_64/dl-tls.c: New file.
* sysdeps/x86_64/rtld-offsets.sym: Likwise.
* sysdeps/x86_64/tls_get_addr.S: Likewise.
* sysdeps/x86_64/dl-tls.h: Add multiple inclusion guards.
* sysdeps/x86_64/tlsdesc.sym (TI_MODULE_OFFSET): New.
(TI_OFFSET_OFFSET): Likwise.

(cherry picked from commit 031e519c95c069abe4e4c7c59e2b4b67efccdee5)

8 years agoi686: Add missing IS_IN (libc) guards to vectorized strcspn
Florian Weimer [Wed, 14 Jun 2017 06:11:22 +0000 (08:11 +0200)] 
i686: Add missing IS_IN (libc) guards to vectorized strcspn

Since commit d957c4d3fa48d685ff2726c605c988127ef99395 (i386: Compile
rtld-*.os with -mno-sse -mno-mmx -mfpmath=387), vector intrinsics can
no longer be used in ld.so, even if the compiled code never makes it
into the final ld.so link.  This commit adds the missing IS_IN (libc)
guard to the SSE 4.2 strcspn implementation, so that it can be used from
ld.so in the future.

(cherry picked from commit 69052a3a95da37169a08f9e59b2cc1808312753c)

8 years agoIgnore and remove LD_HWCAP_MASK for AT_SECURE programs (bug #21209)
Siddhesh Poyarekar [Tue, 20 Jun 2017 03:59:17 +0000 (05:59 +0200)] 
Ignore and remove LD_HWCAP_MASK for AT_SECURE programs (bug #21209)

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.
* elf/tst-env-setuid.c (test_parent): Test LD_HWCAP_MASK.
(test_child): Likewise.
* elf/Makefile (tst-env-setuid-ENV): Add LD_HWCAP_MASK.

(cherry picked from commit 1c1243b6fc33c029488add276e56570a07803bfd)

8 years agold.so: Reject overly long LD_AUDIT path elements
Florian Weimer [Mon, 19 Jun 2017 20:32:12 +0000 (22:32 +0200)] 
ld.so: Reject overly long LD_AUDIT path elements

Also only process the last LD_AUDIT entry.

(cherry picked from commit 81b82fb966ffbd94353f793ad17116c6088dedd9)

8 years agold.so: Reject overly long LD_PRELOAD path elements
Florian Weimer [Mon, 19 Jun 2017 20:31:04 +0000 (22:31 +0200)] 
ld.so: Reject overly long LD_PRELOAD path elements

(cherry picked from commit 6d0ba622891bed9d8394eef1935add53003b12e8)

8 years agoCVE-2017-1000366: Ignore LD_LIBRARY_PATH for AT_SECURE=1 programs [BZ #21624]
Florian Weimer [Mon, 19 Jun 2017 16:31:27 +0000 (18:31 +0200)] 
CVE-2017-1000366: Ignore LD_LIBRARY_PATH for AT_SECURE=1 programs [BZ #21624]

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)

8 years agoCorrect collation rules for Malayalam.
Santhosh Thottingal [Sun, 11 Jun 2017 14:08:37 +0000 (10:08 -0400)] 
Correct collation rules for Malayalam.

[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.

8 years agofork: Remove bogus parent PID assertions [BZ #21386]
Florian Weimer [Fri, 9 Jun 2017 11:21:43 +0000 (13:21 +0200)] 
fork: Remove bogus parent PID assertions [BZ #21386]

(cherry picked from commit 1d2bc2eae969543b89850e35e532f3144122d80a)

8 years agoFix test-math-vector-sincos.h aliasing.
Joseph Myers [Wed, 15 Mar 2017 17:32:46 +0000 (17:32 +0000)] 
Fix test-math-vector-sincos.h aliasing.

x86_64 libmvec tests have been failing to build lately with GCC
mainline with -Wuninitialized errors, and Markus Trippelsdorf traced
this to an aliasing issue
<https://sourceware.org/ml/libc-alpha/2017-03/msg00169.html>.

This patch fixes the aliasing issue, so that the vectors-of-pointers
are initialized using a union instead of pointer casts.  This also
fixes the testsuite build failures with GCC mainline.

Tested for x86_64 (full testsuite with GCC 6; testsuite build with GCC
mainline with build-many-glibcs.py).

* sysdeps/x86/fpu/test-math-vector-sincos.h (INIT_VEC_PTRS_LOOP):
Use a union when storing pointers.
(VECTOR_WRAPPER_fFF_2): Do not take address of integer vector and
cast result when passing to INIT_VEC_PTRS_LOOP.
(VECTOR_WRAPPER_fFF_3): Likewise.
(VECTOR_WRAPPER_fFF_4): Likewise.

(cherry picked from commit ffe308e4fcf2f276c87fd405596569ba52ad0a29)

8 years agoFix i686 memchr overflow calculation (BZ#21182)
Adhemerval Zanella [Tue, 14 Mar 2017 17:16:13 +0000 (14:16 -0300)] 
Fix i686 memchr overflow calculation (BZ#21182)

This patch fixes the regression added by 23d2770 for final address
overflow calculation.  The subtraction of the considered size (16)
at line 120 is at wrong place, for sizes less than 16 subsequent
overflow check will not take in consideration an invalid size (since
the subtraction will be negative).  Also, the lea instruction also
does not raise the carry flag (CF) that is used in subsequent jbe
to check for overflow.

The fix is to follow x86_64 logic from 3daef2c where the overflow
is first check and a sub instruction is issued.  In case of resulting
negative size, CF will be set by the sub instruction and a NULL
result will be returned.  The patch also add similar tests reported
in bug report.

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

* string/test-memchr.c (do_test): Add BZ#21182 checks for address
near end of a page.
* sysdeps/i386/i686/multiarch/memchr-sse2.S (__memchr): Fix
overflow calculation.

Cherry-pick of 3abeeec5f46ff036bd9df60bb096e20314ccd078.

8 years agox86: Use AVX2 memcpy/memset on Skylake server [BZ #21396]
H.J. Lu [Fri, 28 Apr 2017 17:04:15 +0000 (10:04 -0700)] 
x86: Use AVX2 memcpy/memset on Skylake server [BZ #21396]

On Skylake server, AVX512 load/store instructions in memcpy/memset may
lead to lower CPU turbo frequency in certain situations.  Use of AVX2
in memcpy/memset has been observed to have improved overall performance
in many workloads due to the higher frequency.

Since AVX512ER is unique to Xeon Phi, this patch sets Prefer_No_AVX512
if AVX512ER isn't available so that AVX2 versions of memcpy/memset are
used on Skylake server.

[BZ #21396]
* sysdeps/x86/cpu-features.c (init_cpu_features): Set
Prefer_No_AVX512 if AVX512ER isn't available.
* sysdeps/x86/cpu-features.h (bit_arch_Prefer_No_AVX512): New.
(index_arch_Prefer_No_AVX512): Likewise.
* sysdeps/x86_64/multiarch/memcpy.S (__new_memcpy): Don't use
AVX512 version if Prefer_No_AVX512 is set.
* sysdeps/x86_64/multiarch/memcpy_chk.S (__memcpy_chk):
Likewise.
* sysdeps/x86_64/multiarch/memmove.S (__libc_memmove): Likewise.
* sysdeps/x86_64/multiarch/memmove_chk.S (__memmove_chk):
Likewise.
* sysdeps/x86_64/multiarch/mempcpy.S (__mempcpy): Likewise.
* sysdeps/x86_64/multiarch/mempcpy_chk.S (__mempcpy_chk):
Likewise.
* sysdeps/x86_64/multiarch/memset.S (memset): Likewise.
* sysdeps/x86_64/multiarch/memset_chk.S (__memset_chk):
Likewise.

(cherry picked from commit 4cb334c4d6249686653137ec273d081371b3672d)

8 years agox86: Set Prefer_No_VZEROUPPER if AVX512ER is available
H.J. Lu [Fri, 28 Apr 2017 17:03:09 +0000 (10:03 -0700)] 
x86: Set Prefer_No_VZEROUPPER if AVX512ER is available

AVX512ER won't be implemented in any Xeon processors and will be in
all Xeon Phi processors.  Don't check CPU model number when setting
Prefer_No_VZEROUPPER for Xeon Phi.  Instead, set Prefer_No_VZEROUPPER
if AVX512ER is available.  It works with current and future Xeon Phi
and non-Xeon Phi processors.

* sysdeps/x86/cpu-features.c (init_cpu_features): Set
Prefer_No_VZEROUPPER if AVX512ER is available.
* sysdeps/x86/cpu-features.h
(bit_cpu_AVX512PF): New.
(bit_cpu_AVX512ER): Likewise.
(bit_cpu_AVX512CD): Likewise.
(bit_cpu_AVX512BW): Likewise.
(bit_cpu_AVX512VL): Likewise.
(index_cpu_AVX512PF): Likewise.
(index_cpu_AVX512ER): Likewise.
(index_cpu_AVX512CD): Likewise.
(index_cpu_AVX512BW): Likewise.
(index_cpu_AVX512VL): Likewise.
(reg_AVX512PF): Likewise.
(reg_AVX512ER): Likewise.
(reg_AVX512CD): Likewise.
(reg_AVX512BW): Likewise.
(reg_AVX512VL): Likewise.

(cherry picked from commit 1c53cb49de6d82d9469ccbd5aa0c55924502bd8b)

8 years agoposix: Add cleanup on the trap list for globtest.sh
Adhemerval Zanella [Tue, 11 Apr 2017 18:08:02 +0000 (15:08 -0300)] 
posix: Add cleanup on the trap list for globtest.sh

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.

8 years agox86-64: Improve branch predication in _dl_runtime_resolve_avx512_opt [BZ #21258]
H.J. Lu [Tue, 21 Mar 2017 17:59:31 +0000 (10:59 -0700)] 
x86-64: Improve branch predication in _dl_runtime_resolve_avx512_opt [BZ #21258]

On Skylake server, _dl_runtime_resolve_avx512_opt is used to preserve
the first 8 vector registers.  The code layout is

  if only %xmm0 - %xmm7 registers are used
     preserve %xmm0 - %xmm7 registers
  if only %ymm0 - %ymm7 registers are used
     preserve %ymm0 - %ymm7 registers
  preserve %zmm0 - %zmm7 registers

Branch predication always executes the fallthrough code path to preserve
%zmm0 - %zmm7 registers speculatively, even though only %xmm0 - %xmm7
registers are used.  This leads to lower CPU frequency on Skylake
server.  This patch changes the fallthrough code path to preserve
%xmm0 - %xmm7 registers instead:

  if whole %zmm0 - %zmm7 registers are used
    preserve %zmm0 - %zmm7 registers
  if only %ymm0 - %ymm7 registers are used
     preserve %ymm0 - %ymm7 registers
  preserve %xmm0 - %xmm7 registers

Tested on Skylake server.

[BZ #21258]
* sysdeps/x86_64/dl-trampoline.S (_dl_runtime_resolve_opt):
Define only if _dl_runtime_resolve is defined to
_dl_runtime_resolve_sse_vex.
* sysdeps/x86_64/dl-trampoline.h (_dl_runtime_resolve_opt):
Fallthrough to _dl_runtime_resolve_sse_vex.

(cherry picked from commit c15f8eb50cea7ad1a4ccece6e0982bf426d52c00)

8 years agoposix_spawn: use a larger min stack for -fstack-check [BZ #21253]
Mike Frysinger [Thu, 16 Mar 2017 06:59:31 +0000 (23:59 -0700)] 
posix_spawn: use a larger min stack for -fstack-check [BZ #21253]

When glibc is built with -fstack-check, trying to use posix_spawn can
lead to segfaults due to gcc internally probing stack memory too far.
The new spawn API will allocate a minimum of 1 page, but the stack
checking logic might probe a couple of pages.  When it tries to walk
them, everything falls apart.

The gcc internal docs [1] state the default interval checking is one
page.  Which means we need two pages (the current one, and the next
probed).  No target currently defines it larger.

Further, it mentions that the default minimum stack size needed to
recover from an overflow is 4/8KiB for sjlj or 8/12KiB for others.
But some Linux targets (like mips and ppc) go up to 16KiB (and some
non-Linux targets go up to 24KiB).

Let's create each child with a minimum of 32KiB slack space to support
them all, and give us future breathing room.

No test is added as existing ones crash.  Even a simple call is
enough to trigger the problem:
char *argv[] = { "/bin/ls", NULL };
posix_spawn(NULL, "/bin/ls", NULL, NULL, argv, NULL);

[1] https://gcc.gnu.org/onlinedocs/gcc-6.3.0/gccint/Stack-Checking.html

(cherry picked from commit 21f042c804835d1f7a4a8e06f2c93ca35a182042)

8 years agoCall the right helper function when setting mallopt M_ARENA_MAX (BZ #21338)
Wladimir J. van der Laan [Sat, 1 Apr 2017 07:09:09 +0000 (12:39 +0530)] 
Call the right helper function when setting mallopt M_ARENA_MAX (BZ #21338)

Fixes a typo introduced in commit
be7991c0705e35b4d70a419d117addcd6c627319. This caused
mallopt(M_ARENA_MAX) as well as the environment variable
MALLOC_ARENA_MAX to not work as intended because it set the
wrong internal parameter.

  [BZ #21338]
* malloc/malloc.c: Call do_set_arena_max for M_ARENA_MAX
instead of incorrect do_set_arena_test

8 years agofts: Fix symbol redirect for fts_set [BZ #21289]
Slava Barinov [Fri, 31 Mar 2017 06:49:25 +0000 (08:49 +0200)] 
fts: Fix symbol redirect for fts_set [BZ #21289]

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)

8 years agoposix_spawn: fix stack setup on ia64 [BZ #21275]
Mike Frysinger [Mon, 20 Mar 2017 08:47:56 +0000 (04:47 -0400)] 
posix_spawn: fix stack setup on ia64 [BZ #21275]

The ia64-specific clone2 call expects the base of the stack mapping and
the stack size as sep arguments, not an initial stack value as on other
stack-grows-down architectures.  Reuse the stack-grows-up macro so we
pass in the right stack base.

Reported-by: Matt Turner <mattst88@gentoo.org>
(cherry picked from commit ddc3fb333469c2997798742dc0509dc1e3201d91)

8 years agox86_64: fix static build of __mempcpy_chk for compilers defaulting to PIC/PIE
Mike Frysinger [Sun, 12 Mar 2017 22:12:21 +0000 (15:12 -0700)] 
x86_64: fix static build of __mempcpy_chk for compilers defaulting to PIC/PIE

When glibc is compiled with gcc 6.2 that has been configured with
to default to PIC/PIE, the static version of __mempcpy_chk is not built,
as the test is done on PIC instead of SHARED.  Fix the test to check for
SHARED, like it is done for similar functions like __memcpy_chk.

2017-03-12  Mike Frysinger  <vapier@gentoo.org>

* sysdeps/x86_64/mempcpy_chk.S (__mempcpy_chk): Check for SHARED
instead of PIC.

(cherry picked from commit fbe355fbd1973d6e29561084b3eaeb4bfe9d515a)

8 years agohppa: Fix setting of __libc_stack_end
John David Anglin [Tue, 21 Feb 2017 01:31:57 +0000 (20:31 -0500)] 
hppa: Fix setting of __libc_stack_end

The binutils package was recently changed to fix -z relro support on hppa.
See ld/21000 for details:
https://sourceware.org/bugzilla/show_bug.cgi?id=21000

This exposed a problem with the _dl_start_user function in the RTLD_START
define.  We need to set __libc_stack_end before it is made read only.  For
this, we need to define DL_STACK_END.  The offset of 0x160 gives the same
stack end as the code in _dl_start_user.

A build log with the attached patch is here:
https://buildd.debian.org/status/fetch.php?pkg=glibc&arch=hppa&ver=2.24-9&stamp=1487639205&raw=0

(cherry picked from commit 5d20a49aaccef5ef7adac93d5ca159f6b7ba0105)

8 years agoDocument and fix --enable-bind-now [BZ #21015]
Florian Weimer [Thu, 2 Mar 2017 19:11:27 +0000 (20:11 +0100)] 
Document and fix --enable-bind-now [BZ #21015]

(cherry picked from commit 2d6ab5df3b675e96ee587ae6a8c2ce004c6b1ba9)

8 years agosunrpc: Improvements for UDP client timeout handling [BZ #20257]
Florian Weimer [Tue, 28 Feb 2017 16:36:00 +0000 (17:36 +0100)] 
sunrpc: Improvements for UDP client timeout handling [BZ #20257]

This commit fixes various aspects in the UDP client timeout handling.
Timeouts are now applied in a more consistent fashion.  Discarded UDP
packets no longer prevent the timeout from happening at all.

(cherry picked from commit cf0bd2f73bd65beab613865bba567d7787836888)

8 years agosunrpc: Avoid use-after-free read access in clntudp_call [BZ #21115]
Florian Weimer [Tue, 28 Feb 2017 16:05:46 +0000 (17:05 +0100)] 
sunrpc: Avoid use-after-free read access in clntudp_call [BZ #21115]

After commit bc779a1a5b3035133024b21e2f339fe4219fb11c
(CVE-2016-4429: sunrpc: Do not use alloca in clntudp_call
[BZ #20112]), ancillary data is stored on the heap,
but it is accessed after it has been freed.

The test case must be run under a heap debugger such as valgrind
to observe the invalid access.  A malloc implementation which
immediately calls munmap on free would catch this bug as well.

(cherry picked from commit d42eed4a044e5e10dfb885cf9891c2518a72a491)

8 years agoFix getting tunable values on big-endian (BZ #21109)
Siddhesh Poyarekar [Thu, 9 Feb 2017 16:28:54 +0000 (17:28 +0100)] 
Fix getting tunable values on big-endian (BZ #21109)

The code to set value passed a tunable_val_t, which when cast to
int32_t on big-endian gives the wrong value.  Instead, use
tunable_val_t.numval instead, which can then be safely cast into
int32_t.

(cherry picked from commit 8cbc826c37c0221ada65a7a622fe079b4e89a4b0)

8 years agoUpdate for 2.25 release glibc-2.25
Siddhesh Poyarekar [Sun, 5 Feb 2017 15:28:42 +0000 (20:58 +0530)] 
Update for 2.25 release

8 years agoAdd more contributors to contrib.texi
Siddhesh Poyarekar [Sun, 5 Feb 2017 13:48:20 +0000 (19:18 +0530)] 
Add more contributors to contrib.texi

8 years agoAdd list of bugs fixed in 2.25
Siddhesh Poyarekar [Sun, 5 Feb 2017 13:15:21 +0000 (18:45 +0530)] 
Add list of bugs fixed in 2.25

8 years agoAdd missing NEWS items
Siddhesh Poyarekar [Sun, 5 Feb 2017 13:06:06 +0000 (18:36 +0530)] 
Add missing NEWS items

Add NEWS items for the two new pthreads implementations, i.e. the
condition variables algorithms and the pthread_rwlock algorithms.

8 years agotunables: Fail tests correctly when setgid does not work
Siddhesh Poyarekar [Sat, 4 Feb 2017 06:32:37 +0000 (12:02 +0530)] 
tunables: Fail tests correctly when setgid does not work

The child process of the tst-env-setuid process was failing correctly
with EXIT_UNSUPPORTED but the parent did not carry that status forward
and failed instead.  This patch fixes this so that tests on nosuid
/tmp fails gracefully with UNSUPPORTED.  Tested by making my tmpfs
nosuid.

* elf/tst-env-setuid.c (do_execve): Return EXIT_UNSUPPORTED in
parent if child exited in that manner.  Print WEXITSTATUS
instead of the raw status.
(do_test_prep): Rename to do_test.
(do_test): Return the result of run_executable_sgid.
(TEST_FUNCTION_ARGV): Adjust.

8 years agoBug 20915: Do not initialize DTV of other threads.
Alexandre Oliva [Sat, 4 Feb 2017 01:35:16 +0000 (20:35 -0500)] 
Bug 20915: Do not initialize DTV of other threads.

In _dl_nothread_init_static_tls() and init_one_static_tls() we must not
touch the DTV of other threads since we do not have ownership of them.
The DTV need not be initialized at this point anyway since only LD/GD
accesses will use them. If LD/GD accesses occur they will take care to
initialize their own thread's DTV.

Concurrency comments were removed from the patch since they need to be
reworked along with a full description of DTV ownership and when it is
or is not safe to modify these structures.

Alexandre Oliva's original patch and discussion:
https://sourceware.org/ml/libc-alpha/2016-09/msg00512.html

8 years agosparc: Remove optimized math routines which cause testsuite failures.
David S. Miller [Sat, 4 Feb 2017 01:48:39 +0000 (17:48 -0800)] 
sparc: Remove optimized math routines which cause testsuite failures.

famx{,f}/fmin{,f} and 32-bit lrint cause math testsuite failures
either because they generate incorrect results or they fail to signal
the proper exceptions.

* sysdeps/sparc/sparc64/fpu/multiarch/s_fmax-vis3.S: Remove file.
* sysdeps/sparc/sparc64/fpu/multiarch/s_fmax.S: Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf-vis3.S: Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_fmaxf.S: Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_fmin-vis3.S: Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_fmin.S: Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_fminf-vis3.S: Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/s_fminf.S: Likewise.
* sysdeps/sparc/sparc64/fpu/multiarch/Makefile
(libm-sysdep_routines): Update.
* sysdeps/sparc/sparc32/sparcv9/fpu/s_fmax.S: Remove file.
* sysdeps/sparc/sparc32/sparcv9/fpu/s_fmaxf.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/s_fmin.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/s_fminf.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/s_lrint.S: Likewise.
* sysdeps/sparc/sparc64/fpu/s_fmax.S: Likewise.
* sysdeps/sparc/sparc64/fpu/s_fmaxf.S: Likewise.
* sysdeps/sparc/sparc64/fpu/s_fmin.S: Likewise.
* sysdeps/sparc/sparc64/fpu/s_fminf.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax-vis3.S:
Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmax.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf-vis3.S:
Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmaxf.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin-vis3.S:
Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fmin.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf-vis3.S:
Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/s_fminf.S: Likewise.
* sysdeps/sparc/sparc32/sparcv9/fpu/multiarch/Makefile
(libm-sysdep_routines): Update.

8 years agoAllow IFUNC relocation against unrelocated shared library
H.J. Lu [Thu, 2 Feb 2017 21:14:43 +0000 (13:14 -0800)] 
Allow IFUNC relocation against unrelocated shared library

IFUNC relocation against definition in unrelocated shared library
will lead to segfault when the IFUNC function is called.  This
patch allows such IFUNC relocations with a warning.  This isn't
a real fix for

https://sourceware.org/bugzilla/show_bug.cgi?id=21041

It simply allows the program to load.  The program will segfault
when longjmp is called.

* sysdeps/i386/dl-machine.h (elf_machine_rel): Replace
_dl_fatal_printf with _dl_error_printf for IFUNC relocation
against unrelocated shared library.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.

8 years agoDrop GLIBC_TUNABLES for setxid programs when tunables is disabled (bz #21073)
Siddhesh Poyarekar [Thu, 2 Feb 2017 10:18:06 +0000 (15:48 +0530)] 
Drop GLIBC_TUNABLES for setxid programs when tunables is disabled (bz #21073)

A setxid program that uses a glibc with tunables disabled may pass on
GLIBC_TUNABLES as is to its child processes.  If the child process
ends up using a different glibc that has tunables enabled, it will end
up getting access to unsafe tunables.  To fix this, remove
GLIBC_TUNABLES from the environment for setxid process.

* sysdeps/generic/unsecvars.h: Add GLIBC_TUNABLES.
* elf/tst-env-setuid-tunables.c
(test_child_tunables)[!HAVE_TUNABLES]: Verify that
GLIBC_TUNABLES is removed in a setgid process.

8 years agotunables: Fix environment variable processing for setuid binaries (bz #21073)
Siddhesh Poyarekar [Thu, 2 Feb 2017 10:16:01 +0000 (15:46 +0530)] 
tunables: Fix environment variable processing for setuid binaries (bz #21073)

Florian Weimer pointed out that we have three different kinds of
environment variables (and hence tunables):

1. Variables that are removed for setxid processes
2. Variables that are ignored in setxid processes but is passed on to
   child processes
3. Variables that are passed on to child processes all the time

Tunables currently only does (2) and (3) when it should be doing (1)
for MALLOC_CHECK_.  This patch enhances the is_secure flag in tunables
to an enum value that can specify which of the above three categories
the tunable (and its envvar alias) belongs to.

The default is for tunables to be in (1).  Hence, all of the malloc
tunables barring MALLOC_CHECK_ are explicitly specified to belong to
category (2).  There were discussions around abolishing category (2)
completely but we can do that as a separate exercise in 2.26.

Tested on x86_64 to verify that there are no regressions.

[BZ #21073]
* elf/dl-tunable-types.h (tunable_seclevel_t): New enum.
* elf/dl-tunables.c (tunables_strdup): Remove.
(get_next_env): Also return the previous envp.
(parse_tunables): Erase tunables of category
TUNABLES_SECLEVEL_SXID_ERASE.
(maybe_enable_malloc_check): Make MALLOC_CHECK_
TUNABLE_SECLEVEL_NONE if /etc/setuid-debug is accessible.
(__tunables_init)[TUNABLES_FRONTEND ==
TUNABLES_FRONTEND_valstring]: Update GLIBC_TUNABLES envvar
after parsing.
[TUNABLES_FRONTEND != TUNABLES_FRONTEND_valstring]: Erase
tunable envvars of category TUNABLES_SECLEVEL_SXID_ERASE.
* elf/dl-tunables.h (struct _tunable): Change member is_secure
to security_level.
* elf/dl-tunables.list: Add security_level annotations for all
tunables.
* scripts/gen-tunables.awk: Recognize and generate enum values
for security_level.
* elf/tst-env-setuid.c: New test case.
* elf/tst-env-setuid-tunables: new test case.
* elf/Makefile (tests-static): Add them.

8 years agoalpha: Use saturating arithmetic in memchr
Richard Henderson [Wed, 1 Feb 2017 22:37:58 +0000 (14:37 -0800)] 
alpha: Use saturating arithmetic in memchr

8 years agoFix missing test dependency
Andreas Schwab [Wed, 1 Feb 2017 16:34:06 +0000 (17:34 +0100)] 
Fix missing test dependency

8 years agom68k: fix 64bit atomic ops
Andreas Schwab [Wed, 1 Feb 2017 00:30:24 +0000 (01:30 +0100)] 
m68k: fix 64bit atomic ops

8 years agoAdd ipc_priv.h header for Nios II to set __IPC_64 to zero.
Chung-Lin Tang [Tue, 31 Jan 2017 14:18:42 +0000 (06:18 -0800)] 
Add ipc_priv.h header for Nios II to set __IPC_64 to zero.

8 years agoAdd VZEROUPPER to memset-vec-unaligned-erms.S [BZ #21081]
H.J. Lu [Mon, 30 Jan 2017 18:59:15 +0000 (10:59 -0800)] 
Add VZEROUPPER to memset-vec-unaligned-erms.S [BZ #21081]

Since memset-vec-unaligned-erms.S has VDUP_TO_VEC0_AND_SET_RETURN at
function entry, memset optimized for AVX2 and AVX512 will always use
ymm/zmm register. VZEROUPPER should be placed before ret in

L(stosb):
        movq    %rdx, %rcx
        movzbl  %sil, %eax
        movq    %rdi, %rdx
        rep stosb
        movq    %rdx, %rax
        ret

since it can be reached from

L(stosb_more_2x_vec):
        cmpq    $REP_STOSB_THRESHOLD, %rdx
        ja      L(stosb)

[BZ #21081]
* sysdeps/x86_64/multiarch/memset-vec-unaligned-erms.S
(L(stosb)): Add VZEROUPPER before ret.

8 years agoBug 20116: Fix use after free in pthread_create()
Carlos O'Donell [Sun, 29 Jan 2017 00:13:34 +0000 (19:13 -0500)] 
Bug 20116: Fix use after free in pthread_create()

The commit documents the ownership rules around 'struct pthread' and
when a thread can read or write to the descriptor. With those ownership
rules in place it becomes obvious that pd->stopped_start should not be
touched in several of the paths during thread startup, particularly so
for detached threads. In the case of detached threads, between the time
the thread is created by the OS kernel and the creating thread checks
pd->stopped_start, the detached thread might have already exited and the
memory for pd unmapped. As a regression test we add a simple test which
exercises this exact case by quickly creating detached threads with
large enough stacks to ensure the thread stack cache is bypassed and the
stacks are unmapped. Before the fix the testcase segfaults, after the
fix it works correctly and completes without issue.

For a detailed discussion see:
https://www.sourceware.org/ml/libc-alpha/2017-01/msg00505.html

8 years agonptl: Add tst-robust-fork
Florian Weimer [Fri, 27 Jan 2017 05:53:19 +0000 (06:53 +0100)] 
nptl: Add tst-robust-fork

8 years agostring/tst-strcoll-overflow: Do not accept timeout as test result
Florian Weimer [Wed, 25 Jan 2017 15:27:03 +0000 (16:27 +0100)] 
string/tst-strcoll-overflow: Do not accept timeout as test result

The test completes within 300 seconds if enough memory is available.

8 years ago * soft-fp/op-common.h (_FP_MUL, _FP_FMA, _FP_DIV): Add
Jakub Jelinek [Tue, 24 Jan 2017 22:27:36 +0000 (23:27 +0100)] 
* soft-fp/op-common.h (_FP_MUL, _FP_FMA, _FP_DIV): Add
/* FALLTHRU */ comments.

8 years agoAdd missing bugzilla reference in previous ChangeLog entry
Adhemerval Zanella [Tue, 24 Jan 2017 12:01:39 +0000 (10:01 -0200)] 
Add missing bugzilla reference in previous ChangeLog entry

8 years agoBug 21053: sh: Reduce namespace pollution from sys/ucontext.h
James Clarke [Tue, 24 Jan 2017 11:20:06 +0000 (09:20 -0200)] 
Bug 21053: sh: Reduce namespace pollution from sys/ucontext.h

The problem is basically that sys/ucontext.h is defining R0..R15
which happens to conflict with some packages like Firefox when
trying to build on SH.

The very same problem existed on arm back then [1] and it was fixed by
renaming R0..R15 to REG_R0..REG_R15.  This patch imploy a similar
strategy for SH.

Checked on sh4-linux-gnu with run-built-tests=no and I also got reports
that it fixes Firefox build on Debian sh4.

* sysdeps/unix/sysv/linux/sh/sh3/ucontext_i.sym: Use new REG_R*
constants instead of the old R* ones.
* sysdeps/unix/sysv/linux/sh/sh4/ucontext_i.sym: Likewise.
* sysdeps/unix/sysv/linux/sh/sys/ucontext.h (NGPREG): Rename...
(NGREG): ... to this, to fit in with other architectures.
(gpregset_t): Use new NGREG macro.
[__USE_GNU]: Remove condition; all architectures other than tile
are unconditional.
(R*): Rename to REG_R*.

8 years ago* elf/dl-tunables.c (tunable_set_val_if_valid_range): Split into ...
DJ Delorie [Sat, 21 Jan 2017 00:52:52 +0000 (19:52 -0500)] 
* elf/dl-tunables.c (tunable_set_val_if_valid_range): Split into ...
(tunable_set_val_if_valid_range_signed) ... this, and ...
(tunable_set_val_if_valid_range_unsigned) ... this.
(tunable_initialize): Call the correct one of the above based on type.

8 years agoRemove very old libm-test-ulps entries.
Joseph Myers [Fri, 20 Jan 2017 23:58:49 +0000 (23:58 +0000)] 
Remove very old libm-test-ulps entries.

I noticed that some libm-test-ulps files still had long-obsolete
entries for *_tonearest functions, which will no longer be used since
functions with FE_TONEAREST explicitly set aren't tested separately
from those functions with it as the default rounding mode any more.

This patch removes those obsolete entries.  However, as they are a
sign of libm-test-ulps not having been regenerated from scratch for a
long time, I strongly advise people testing on those platforms to
remove / truncate the libm-test-ulps file, run "make regen-ulps" and
commit the regenerated-from-scratch file.  (Ideally any failures of
libm tests still present after regeneration would be investigated /
fixed - there are several open "math" bugs spread across these
platforms - but simply regenerating from scratch improves things.)

* sysdeps/hppa/fpu/libm-test-ulps: Remove *_tonearest entries.
* sysdeps/ia64/fpu/libm-test-ulps: Likewise.
* sysdeps/m68k/m680x0/fpu/libm-test-ulps: Likewise.
* sysdeps/microblaze/libm-test-ulps: Likewise.
* sysdeps/sh/libm-test-ulps: Likewise.

8 years agoUpdate README.libm-test.
Joseph Myers [Fri, 20 Jan 2017 23:25:13 +0000 (23:25 +0000)] 
Update README.libm-test.

This patch updates math/README.libm-test to have a more complete and
up-to-date list of the characters used in TEST_* macros to indicate
the types of function inputs and outputs.

* math/README.libm-test: Update list of characters for input and
output types.

8 years agopowerpc: Fix adapt_count update in __lll_unlock_elision
Tulio Magno Quites Machado Filho [Fri, 20 Jan 2017 18:32:29 +0000 (16:32 -0200)] 
powerpc: Fix adapt_count update in __lll_unlock_elision

Commit e9a96ea1aca4ebaa7c86e8b83b766f118d689d0f had an error that
prevents adapt_count from being updated in __lll_unlock_elision.

8 years agoFix mutex pretty printer test and pretty printer output.
Torvald Riegel [Fri, 20 Jan 2017 13:54:49 +0000 (14:54 +0100)] 
Fix mutex pretty printer test and pretty printer output.

This fixes the mutex pretty printer so that, if the owner ID isn't recorded
(such as in the current lock elision implementation), "Owner ID" will be shown
as "Unknown" instead of 0. It also changes the mutex printer output so that it
says "Acquired" instead of "Locked". The mutex tests are updated accordingly.

In addition, this adds a paragraph to the "Known issues" section of the
printers README explaining that the printer output isn't guaranteed to cover
every detail.

2017-01-14  Martin Galvan  <martingalvan@sourceware.org>

        * README.pretty-printers (Known issues): Warn about printers not
        always covering everything.
        * nptl/nptl-printers.py (MutexPrinter): Change output.
        * nptl/test-mutex-printers.py: Fix test and adapt to changed output.

8 years agoS390: Adjust lock elision code after review.
Stefan Liebler [Fri, 20 Jan 2017 08:53:04 +0000 (09:53 +0100)] 
S390: Adjust lock elision code after review.

This patch adjusts s390 specific lock elision code after review
of the following patches:
-S390: Use own tbegin macro instead of __builtin_tbegin.
(8bfc4a2ab4bebdf86c151665aae8a266e2f18fb4)
-S390: Use new __libc_tbegin_retry macro in elision-lock.c.
(53c5c3d5ac238901c13f28a73ba05b0678094e80)
-S390: Optimize lock-elision by decrementing adapt_count at unlock.
(dd037fb3df286b7c2d0b0c6f8d02a2dd8a8e8a08)

The futex value is not tested before starting a transaction,
__glibc_likely is used instead of __builtin_expect and comments
are adjusted.

ChangeLog:

* sysdeps/unix/sysv/linux/s390/htm.h: Adjust comments.
* sysdeps/unix/sysv/linux/s390/elision-unlock.c: Likewise.
* sysdeps/unix/sysv/linux/s390/elision-lock.c: Adjust comments.
(__lll_lock_elision): Do not test futex before starting a
transaction.  Use __glibc_likely instead of __builtin_expect.
* sysdeps/unix/sysv/linux/s390/elision-trylock.c: Adjust comments.
(__lll_trylock_elision): Do not test futex before starting a
transaction.  Use __glibc_likely instead of __builtin_expect.

8 years agoAdd target to incorporate translations from translations.org
Siddhesh Poyarekar [Fri, 20 Jan 2017 06:54:46 +0000 (12:24 +0530)] 
Add target to incorporate translations from translations.org

Add a convenience target for maintainers to download and incorporate
translation updates from translations.org.  Invoke as follows:

  make -r PARALLELMFLAGS="" -C ../po objdir=`pwd` update-translations

similar to generating libc.pot.

* po/Makefile (update-translations): New target.

8 years agoRestore clock_* librt exports for MicroBlaze (bug 21061).
Joseph Myers [Thu, 19 Jan 2017 20:57:16 +0000 (20:57 +0000)] 
Restore clock_* librt exports for MicroBlaze (bug 21061).

MicroBlaze had clock_* functions exported from librt in glibc 2.18 and
2.19, as confirmed in
<https://sourceware.org/ml/libc-alpha/2017-01/msg00369.html>, and they
then disappeared in 2.20, presumably as a result of the fix
<https://sourceware.org/ml/libc-alpha/2014-02/msg00598.html> for a
Versions.def bug that had resulted in their unintended inclusion in
2.18 (followed by removal of the Versions.def mechanism that allowed
such bugs).

As they were released in that library, they should be considered part
of the GLIBC_2.18 ABI and so restored for the sake of any binaries
that expect them in that library.  This patch restores them by adding
a MicroBlaze version of clock-compat.c that overrides SHLIB_COMPAT.

Tested (compilation only) with build-many-glibcs.py (where this fixes
the librt ABI test failure; elf/check-execstack still fails and still
needs architecture maintainer attention to fix it or XFAIL it with an
appropriate explanatory comment).

[BZ #21061]
* sysdeps/unix/sysv/linux/microblaze/clock-compat.c: New file.

8 years agoFix environment traversal when an envvar value is empty
Siddhesh Poyarekar [Thu, 19 Jan 2017 19:15:09 +0000 (00:45 +0530)] 
Fix environment traversal when an envvar value is empty

The condition when the value of an envvar is empty (not just '\0'),
the loop in tunables_init gets stuck infinitely because envp is not
incremented.  Fix that by always incrementing envp in the loop.

Added test case (tst-empty-env.c) verifies the fix when the source is
configured with --enable-hardcoded-path-in-tests, thanks Josh Stone for
providing the test case.  Verified on x86_64.

* elf/dl-tunables (get_next_env): Always advance envp.
* stdlib/tst-empty-env.c: New test case.
* stdlib/Makefile (tests): Use it.