about summary refs log tree commit diff
Commit message (Collapse)AuthorAgeFilesLines
* Do not fail if one of the two responses to AF_UNSPEC fails (BZ #14308)Siddhesh Poyarekar2014-04-304-10/+24
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | [Fixes BZ #14308, #12994, #13651] AF_UNSPEC results in sending two queries in parallel, one for the A record and the other for the AAAA record. If one of these is a referral, then the query fails, which is wrong. It should return at least the one successful response. The fix has two parts. The first part makes the referral fall back to the SERVFAIL path, which results in using the successful response. There is a bug in that path however, due to which the second part is necessary. The bug here is that if the first response is a failure and the second succeeds, __libc_res_nsearch does not detect that and assumes a failure. The case where the first response is a success and the second fails, works correctly. This condition is produced by buggy routers, so here's a crude interposable library that can simulate such a condition. The library overrides the recvfrom syscall and modifies the header of the packet received to reproduce this scenario. It has two key variables: mod_packet and first_error. The mod_packet variable when set to 0, results in odd packets being modified to be a referral. When set to 1, even packets are modified to be a referral. The first_error causes the first response to be a failure so that a domain-appended search is performed to test the second part of the __libc_nsearch fix. The driver for this fix is a simple getaddrinfo program that does an AF_UNSPEC query. I have omitted this since it should be easy to implement. I have tested this on x86_64. The interceptor library source: /* Override recvfrom and modify the header of the first DNS response to make it a referral and reproduce bz #845218. We have to resort to this ugly hack because we cannot make bind return the buggy response of a referral for the AAAA record and an authoritative response for the A record. */ #define _GNU_SOURCE #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <stdbool.h> #include <endian.h> #include <dlfcn.h> #include <stdlib.h> /* Lifted from resolv/arpa/nameser_compat.h. */ typedef struct { unsigned id :16; /*%< query identification number */ #if BYTE_ORDER == BIG_ENDIAN /* fields in third byte */ unsigned qr: 1; /*%< response flag */ unsigned opcode: 4; /*%< purpose of message */ unsigned aa: 1; /*%< authoritive answer */ unsigned tc: 1; /*%< truncated message */ unsigned rd: 1; /*%< recursion desired */ /* fields * in * fourth * byte * */ unsigned ra: 1; /*%< recursion available */ unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ unsigned ad: 1; /*%< authentic data from named */ unsigned cd: 1; /*%< checking disabled by resolver */ unsigned rcode :4; /*%< response code */ #endif #if BYTE_ORDER == LITTLE_ENDIAN || BYTE_ORDER == PDP_ENDIAN /* fields * in * third * byte * */ unsigned rd :1; /*%< recursion desired */ unsigned tc :1; /*%< truncated message */ unsigned aa :1; /*%< authoritive answer */ unsigned opcode :4; /*%< purpose of message */ unsigned qr :1; /*%< response flag */ /* fields * in * fourth * byte * */ unsigned rcode :4; /*%< response code */ unsigned cd: 1; /*%< checking disabled by resolver */ unsigned ad: 1; /*%< authentic data from named */ unsigned unused :1; /*%< unused bits (MBZ as of 4.9.3a3) */ unsigned ra :1; /*%< recursion available */ #endif /* remaining * bytes * */ unsigned qdcount :16; /*%< number of question entries */ unsigned ancount :16; /*%< number of answer entries */ unsigned nscount :16; /*%< number of authority entries */ unsigned arcount :16; /*%< number of resource entries */ } HEADER; static int done = 0; /* Packets to modify. 0 for the odd packets and 1 for even packets. */ static const int mod_packet = 0; /* Set to true if the first request should result in an error, resulting in a search query. */ static bool first_error = true; static ssize_t (*real_recvfrom) (int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen); void __attribute__ ((constructor)) init (void) { real_recvfrom = dlsym (RTLD_NEXT, "recvfrom"); if (real_recvfrom == NULL) { printf ("Failed to get reference to recvfrom: %s\n", dlerror ()); printf ("Cannot simulate test\n"); abort (); } } /* Modify the second packet that we receive to set the header in a manner as to reproduce BZ #845218. */ static void mod_buf (HEADER *h, int port) { if (done % 2 == mod_packet || (first_error && done == 1)) { printf ("(Modifying header)"); if (first_error && done == 1) h->rcode = 3; else h->rcode = 0; /* NOERROR == 0. */ h->ancount = 0; h->aa = 0; h->ra = 0; h->arcount = 0; } done++; } ssize_t recvfrom (int sockfd, void *buf, size_t len, int flags, struct sockaddr *src_addr, socklen_t *addrlen) { ssize_t ret = real_recvfrom (sockfd, buf, len, flags, src_addr, addrlen); int port = htons (((struct sockaddr_in *) src_addr)->sin_port); struct in_addr addr = ((struct sockaddr_in *) src_addr)->sin_addr; const char *host = inet_ntoa (addr); printf ("\n*** From %s:%d: ", host, port); mod_buf (buf, port); printf ("returned %zd\n", ret); return ret; }
* Final update to ports ChangeLog.Carlos O'Donell2014-04-291-0/+4
| | | | | Indicate the removal of the README and carry out the final update to the ports/ChangeLog.
* Remove ports README and update machine ChangeLogs.Carlos O'Donell2014-04-295-49/+28
| | | | | | | This patch removes the ports/README now that ports is no longer being used. It also adds a header to all ChangeLogs for all machines that were moved to the main libc tree. The header indicates that the ChangeLog is no longer used.
* 2014-04-29 Steve Ellcey <sellcey@mips.com>Steve Ellcey2014-04-292-0/+8
| | | | * iconf/skeleton.c (ONE_DIRECTION): Set default value if not set.
* Mention BZ16823 in NEWSStefan Liebler2014-04-291-1/+1
|
* [BZ #16823] Fix log1pl returning wrong infinity signStefan Liebler2014-04-294-3/+11
|
* FixAdhemerval Zanella2014-04-292-2/+2
|
* PowerPC: Suppress unnecessary FPSCR writeAdhemerval Zanella2014-04-298-16/+60
| | | | | | | This patch optimizes the FPSCR update on exception and rounding change functions by just updating its value if new value if different from current one. It also optimizes fedisableexcept and feenableexcept by removing an unecessary FPSCR read.
* Relocate hppa from ports to libc.Carlos O'Donell2014-04-29152-61/+41
|
* hppa: Update lowlevellock.h.Carlos O'Donell2014-04-292-22/+39
| | | | | Cleanup and remove old lll_private_futex_wake macro and add generic support for PI-aware futexes.
* hppa: Use lll_futex_wake.Carlos O'Donell2014-04-292-1/+4
| | | | | The lll_private_futex_wake function no longer exists. Instead use lll_futex_make with LLL_PRIVATE as the last argument.
* hppa: Use r25 as second input to __longjmp.Carlos O'Donell2014-04-292-12/+18
| | | | | | The generated assembly is simplified if we use r25, the expected second argument to the function given the calling convention.
* Fix types of stream hook functions in manual.Ondřej Bílka2014-04-283-6/+9
|
* Fix recvmmsg comment.Ondřej Bílka2014-04-283-3/+8
|
* [ARM] Add support for fenv_private on ARM.Wilco Dijkstra2014-04-284-1/+267
|
* Replace __int128 with __int128_t in bits/link.hH.J. Lu2014-04-252-3/+9
| | | | | | | | | | __int128 was added in GCC 4.6 and __int128_t was added before x86-64 was supported. This patch replaces __int128 with __int128_t so that the installed bits/link.h can be used with older GCC. * sysdeps/x86/bits/link.h (La_x86_64_regs): Replace __int128 with __int128_t. (La_x86_64_retval): Likewise.
* [AArch64] Suppress unnecessary FPSR and FPCR writes.Ian Bolton2014-04-248-28/+61
|
* Use test-skeleton.c in tst-sem3 and tst-sem4Siddhesh Poyarekar2014-04-233-15/+29
|
* Fix sigaction conform test failures on sparc.David S. Miller2014-04-222-1/+8
| | | | | | * sysdeps/unix/sysv/linux/sparc/bits/sigaction.h (struct sigaction): New struct member __glibc_reserved0, change type of sa_flags to int.
* [AArch64] Use GCC builtins to count leading/tailing zeros.Yufeng Zhang2014-04-222-0/+21
|
* Include atomic.h in sem_wait.c and sem_trywait.cSiddhesh Poyarekar2014-04-223-0/+7
|
* aarch64: Add setjmp and longjmp SystemTap probesVenkataramanan Kumar2014-04-223-0/+24
| | | | | | | | | | | | | | | Add setjmp, longjmp and longjmp_target SystemTap probes. ChangeLog: 2014-04-22 Will Newton <will.newton@linaro.org> Venkataramanan Kumar <venkataramanan.kumar@linaro.org> * sysdeps/aarch64/__longjmp.S: Include stap-probe.h. (__longjmp): Add longjmp and longjmp_target SystemTap probes. * sysdeps/aarch64/setjmp.S: Include stap-probe.h. (__sigsetjmp): Add setjmp SystemTap probe.
* manual: Sort overview listing by manual order.Carlos O'Donell2014-04-172-28/+82
| | | | | | | | | | | | | | | In the glibc manual we have a "Roadmap to the manual" section at the end of the "Introduction" chapter. The introductory text says "Here is an overview of the contents of the remaining chapters of this manual.", but then proceeds to list chapters out of order and some chapter are never referenced. This commit reorders the overview to correctly match the manual order. See: https://sourceware.org/ml/libc-alpha/2014-02/msg00823.html
* PowerPC: Sync pthread_once with default implementationAdhemerval Zanella2014-04-172-110/+4
| | | | | | | | This patch removes the arch specific powerpc implementation and instead uses the linux default one. Although the current powerpc implementation already constains the required memory barriers for correct initialization, the default implementation shows a better performance on newer chips.
* PowerPC: Add fenv macros for long doubleAdhemerval Zanella2014-04-172-2/+17
| | | | | This patch add the missing libc_<function>l_ctx macros for long double. Similar for float, they point to default double versions.
* Add fenv test support for AArch64.Ian Bolton2014-04-172-0/+26
|
* Detect if AVX2 is usableSihai Yao2014-04-174-0/+25
| | | | | | | | | | | | | | | This patch checks and sets bit_AVX2_Usable in __cpu_features.feature. * sysdeps/x86_64/multiarch/ifunc-defines.sym (COMMON_CPUID_INDEX_7): New. * sysdeps/x86_64/multiarch/init-arch.c (__init_cpu_features): Check and set bit_AVX2_Usable. * sysdeps/x86_64/multiarch/init-arch.h (bit_AVX2_Usable): New macro. (bit_AVX2): Likewise. (index_AVX2_Usable): Likewise. (CPUID_AVX2): Likewise. (HAS_AVX2): Likewise.
* manual/setjmp.texi: Clarify setcontext and signal handlers textWill Newton2014-04-172-8/+17
| | | | | | | | | | | | | | | | | Calling setcontext from a signal handler can be done safely so it is sufficient to note that it is not recommended. Also mention in setcontext documentation that the behaviour of setcontext when restoring a context created by a call to a signal handler is unspecified. 2014-04-17 Will Newton <will.newton@linaro.org> * manual/setjmp.texi (System V contexts): Add note that calling setcontext on a context created by a call to a signal handler is undefined. Update text to note that setcontext from a signal handler is possible but not recommended.
* stdlib/tst-setcontext.c: Check for clobbering of signal stackWill Newton2014-04-172-0/+25
| | | | | | | | | | | | | | | On aarch64 calling swapcontext clobbers the state of the signal stack (BZ #16629). Check that the address and size of the signal stack before and after the call to swapcontext remains the same. ChangeLog: 2014-04-17 Will Newton <will.newton@linaro.org> [BZ #16629] * stdlib/tst-setcontext.c: Include signal.h. (main): Check that the signal stack before and after swapcontext is the same.
* aarch64: Re-implement setcontext without rt_sigreturn syscallWill Newton2014-04-173-60/+107
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The current implementation of setcontext uses rt_sigreturn to restore the contents of registers. This contrasts with the way most other architectures implement setcontext: powerpc64, mips, tile: Call rt_sigreturn if context was created by a call to a signal handler, otherwise restore in user code. powerpc32: Call swapcontext system call and don't call sigreturn or rt_sigreturn. x86_64, sparc, hppa, sh, ia64, m68k, s390, arm: Only support restoring "synchronous" contexts, that is contexts created by getcontext, and restoring in user code and don't call sigreturn or rt_sigreturn. alpha: Call sigreturn (but not rt_sigreturn) in all cases to do the restore. The text of the setcontext manpage suggests that the requirement to be able to restore a signal handler created context has been dropped from SUSv2: If the context was obtained by a call to a signal handler, then old standard text says that "program execution continues with the program instruction following the instruction interrupted by the signal". However, this sentence was removed in SUSv2, and the present verdict is "the result is unspecified". Implementing setcontext by calling rt_sigreturn unconditionally causes problems when used with sigaltstack as in BZ #16629. On this basis it seems that aarch64 is broken and that new ports should only support restoring contexts created with getcontext and do not need to call rt_sigreturn at all. This patch re-implements the aarch64 setcontext function to restore the context in user code in a similar manner to x86_64 and other ports. ChangeLog: 2014-04-17 Will Newton <will.newton@linaro.org> [BZ #16629] * sysdeps/unix/sysv/linux/aarch64/setcontext.S (__setcontext): Re-implement to restore registers in user code and avoid rt_sigreturn system call.
* Add fenv test support for targets which don't have FP traps.Wilco2014-04-174-10/+36
|
* [AArch64] Define HAVE_RM_CTX and related hooks.Ian Bolton2014-04-172-0/+67
|
* [AArch64] Provide initial implementation of math_private.h.Ian Bolton2014-04-172-0/+219
|
* alpha: Remove alpha-linux pthread_once.cRichard Henderson2014-04-162-95/+2
|
* alpha: Enable unwind tables for backtrace.cRichard Henderson2014-04-162-0/+8
|
* alpha: Fix __pointer_chk_guard definition for the testsuiteRichard Henderson2014-04-162-1/+4
|
* alpha: Regenerate sysdeps/alpha/libm-test-ulpsRichard Henderson2014-04-162-4/+1026
|
* [AArch64] Regenerate libm-test-ulps.Marcus Shawcroft2014-04-162-87/+1019
|
* Save/restore bound registers for _dl_runtime_profileIgor Zamyatin2014-04-165-0/+77
| | | | | | | | | | | | | | | | | This patch saves and restores bound registers in x86-64 PLT for ld.so profile and LD_AUDIT: * sysdeps/x86_64/bits/link.h (La_x86_64_regs): Add lr_bnd. (La_x86_64_retval): Add lrv_bnd0 and lrv_bnd1. * sysdeps/x86_64/dl-trampoline.S (_dl_runtime_profile): Save Intel MPX bound registers before _dl_profile_fixup. * sysdeps/x86_64/dl-trampoline.h: Restore Intel MPX bound registers after _dl_profile_fixup. Save and restore bound registers bnd0/bnd1 when calling _dl_call_pltexit. * sysdeps/x86_64/link-defines.sym (BND_SIZE): New. (LR_BND_OFFSET): Likewise. (LRV_BND0_OFFSET): Likewise. (LRV_BND1_OFFSET): Likewise.
* hurd: Add i386 fields to TLS structureSamuel Thibault2014-04-162-0/+13
| | | | | | * sysdeps/mach/hurd/i386/tls.h (tcbhead_t): Add multiple_threads, sysinfo, stack_guard, pointer_guard, gscope_flag, private_futex, __private_tm, __private_ss fields.
* hurd: Move dtv, dtv_t, tcbhead_t declaration to per-arch file.Samuel Thibault2014-04-163-21/+30
|
* hurd: Do not allow unmapping address 0Samuel Thibault2014-04-162-0/+11
| | | | * sysdeps/mach/munmap.c (__munmap): Return EINVAL if `addr' is 0.
* S/390: Regenerate ULPsStefan Liebler2014-04-162-0/+1020
|
* [BZ #14770] S/390: Require Binutils >= 2.24 for target S/390.Stefan Liebler2014-04-164-6/+89
|
* [BZ #16824] Fix failing y1 due to too large ulps in downward/upward rounding ↵Stefan Liebler2014-04-163-1/+8
| | | | mode.
* Update fixed bug listAlan Modra2014-04-162-4/+5
|
* Correct IBM long double frexpl.Alan Modra2014-04-163-44/+118
| | | | | | | | | | | Besides fixing the bugzilla, this also fixes corner-cases where the high and low double differ greatly in magnitude, and handles a denormal input without resorting to a fp rescale. [BZ #16740] [BZ #16619] * sysdeps/ieee754/ldbl-128ibm/s_frexpl.c (__frexpl): Rewrite. * math/libm-test.inc (frexp_test_data): Add tests.
* benchtests: Link against objects in build directorySiddhesh Poyarekar2014-04-152-23/+16
| | | | | | | | | | Using -lm and -lpthread results in the shared objects in the system being used to link against. This happened to work for libm because there haven't been any changes to the libm ABI recently that could break the existing benchmarks. This doesn't always work for the pthread benchmarks. The correct way to build against libraries in the build directory is to have the binaries explicitly depend on them so that $(+link) can pick them up.
* Support _r_debug for static binaries.Carlos O'Donell2014-04-143-1/+10
| | | | | | | | | | | | | | | | We initialize _r_debug for static binaries to allows debug agents to treat static binaries a little more like dyanmic ones. This simplifies the work a debug agent has to do to access TLS in a static binary via libthread_db. Tested on x86_64. See: https://sourceware.org/ml/libc-alpha/2014-04/msg00183.html [BZ #16831] * csu/libc-start.c (LIBC_START_MAIN) [!SHARED]: Call _dl_debug_initialize.
* nscd: Make SELinux checks dynamic.Carlos O'Donell2014-04-144-83/+80
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The SELinux team has indicated to me that glibc's SELinux checks in nscd are not being carried out as they would expect the API to be used today. They would like to move away from static header defines for class and permissions and instead use dynamic checks at runtime that provide an answer which is dependent on the runtime status of SELinux i.e. more dynamic. The following patch is a minimal change that moves us forward in this direction. It does the following: * Stop checking for SELinux headers that define NSCD__SHMEMHOST. Check only for the presence or absence of the library. * Don't encode the specific SELinux permission constants into a table at build time, and instead use the symbolic name for the permission as expected. * Lookup the "What do we do if we don't know this permission?" policy and use that if we find SELinux's policy is older than the glibc policy e.g. we make a request for a permission that SELinux doesn't know about. * Lastly, translate the class and permission and then make the permission check. This is done every time we lookup a permission, and this is the expected way to use the API. SELinux will optimize this for us, and we expect the network latencies to hide these extra library calls. Tested on x86, x86-64, and via Fedora Rawhide since November 2013. See: https://sourceware.org/ml/libc-alpha/2014-04/msg00179.html