1. 27 6月, 2018 6 次提交
    • D
      strftime: fix underlying format string in %z format · da5851e9
      Daniel Sabogal 提交于
      the expression (tm->__tm_gmtoff)/3600 has type long. use %+.2ld instead.
      da5851e9
    • R
      resolver: omit final dot (root/suppress-search) in canonical name · 63e2e40e
      Rich Felker 提交于
      if a final dot was included in the queried host name to anchor it to
      the dns root/suppress search domains, and the result was not a CNAME,
      the returned canonical name included the final dot. this was not
      consistent with other implementations, confused some applications, and
      does not seem desirable.
      
      POSIX specifies returning a pointer to, or to a copy of, the input
      nodename, when the canonical name is not available, but does not
      attempt to specify what constitutes "not available". in the case of
      search, we already have an implementation-defined "availability" of a
      canonical name as the fully-qualified name resulting from search, so
      defining it similarly in the no-search case seems reasonable in
      addition to being consistent with other implementations.
      
      as a bonus, fix the case where more than one trailing dot is included,
      since otherwise the changes made here would wrongly cause lookups with
      two trailing dots to succeed. previously this case resulted in
      malformed dns queries and produced EAI_AGAIN after a timeout. now it
      fails immediately with EAI_NONAME.
      63e2e40e
    • R
      fix regression in powerpc[64] SO_PEERSEC definition · efda534b
      Rich Felker 提交于
      commit 587f5a53 moved the definition
      of SO_PEERSEC to bits/socket.h for archs where the SO_* macros differ
      from their standard values, but failed to add copies of the generic
      definition for powerpc and powerpc64.
      efda534b
    • R
      fix value of SO_PEERSEC on mips archs · 587f5a53
      Rich Felker 提交于
      adapted from patch by Matthias Schiffer.
      587f5a53
    • R
      add m68k reg.h and user.h · 471497ab
      Rich Felker 提交于
      471497ab
    • R
      fix dynamic linker mapping/clearing bss in first/only LOAD segment · 68a5a23a
      Rich Felker 提交于
      writable load segments can have size-in-memory larger than their size
      in the ELF file, representing bss or equivalent. the initial partial
      page has to be zero-filled, and additional anonymous pages have to be
      mapped such that accesses don't failt with SIGBUS.
      
      map_library skips redundant MAP_FIXED mapping of the initial
      (lowest-address) segment when processing LOAD segments since it was
      already mapped when reserving the virtual address range, but in doing
      so, inadvertently also skipped the code to fill/map bss. typical
      executable and library files have two or more LOAD segments, and the
      first one is text/rodata (non-writable) and thus has no bss, but it is
      syntactically valid for an ELF program/library to put its writable
      segment first, or to have only one segment (everything writable). the
      binutils bfd-based linker has been observed to create such programs in
      the presence of unusual sections or linker scripts.
      
      fix by moving only the mmap_fixed operation under the conditional
      rather than skipping the remainder of the loop body. add a check to
      avoid bss processing in the case where the segment is not writable;
      this should not happen, but if it does, the change would be a crashing
      regression without this check.
      68a5a23a
  2. 21 6月, 2018 3 次提交
  3. 20 6月, 2018 16 次提交
    • R
      work around broken kernel struct ipc_perm on some big endian archs · 0cd2be23
      Rich Felker 提交于
      the mode member of struct ipc_perm is specified by POSIX to have type
      mode_t, which is uniformly defined as unsigned int. however, Linux
      defines it with type __kernel_mode_t, and defines __kernel_mode_t as
      unsigned short on some archs. since there is a subsequent padding
      field, treating it as a 32-bit unsigned int works on little endian
      archs, but the order is backwards on big endian archs with the
      erroneous definition.
      
      since multiple archs are affected, remedy the situation with fixup
      code in the affected functions (shmctl, semctl, and msgctl) rather
      than repeating the same shims in syscall_arch.h for every affected
      arch.
      0cd2be23
    • S
      s390x: add kexec_file_load syscall number from linux v4.17 · 7ea235b1
      Szabolcs Nagy 提交于
      new in linux commit 71406883fd35794d573b3085433c41d0a3bf6c21
      7ea235b1
    • S
      mips: add HWCAP_ flags from linux v4.17 · 1177f61d
      Szabolcs Nagy 提交于
      new in linux commit 256211f2b0b251e532d1899b115e374feb16fa7a
      1177f61d
    • S
      aarch64: add HWCAP_ flags from linux v4.17 · f3b6690a
      Szabolcs Nagy 提交于
      hwcaps for armv8.4, new in linux commit
      7206dc93a58fb76421c4411eefa3c003337bcb2d
      f3b6690a
    • S
      add speculation control prctls from linux v4.17 · da9f2b2a
      Szabolcs Nagy 提交于
      PR_{SET,GET}_SPECULATION_CTRL controls speculation related vulnerability
      mitigations, new in commits
      b617cfc858161140d69cc0b5cc211996b557a1c7
      356e4bfff2c5489e016fdb925adbf12a1e3950ee
      da9f2b2a
    • S
      add ETH_P_PREAUTH ethertype from linux v4.17 · 5b85ed5c
      Szabolcs Nagy 提交于
      added in linux commit 4fe0de5b143762d327bfaf1d7be7c5b58041a18c
      5b85ed5c
    • S
      add TCP_NLA_* from linux v4.17 · ebeb1de2
      Szabolcs Nagy 提交于
      new and missing netlink attributes types for SCM_TIMESTAMPING_OPT_STATS,
      new ones were added in commits
      7156d194a0772f733865267e7207e0b08f81b02b
      be631892948060f44b1ceee3132be1266932071e
      87ecc95d81d951b0984f2eb9c5c118cb68d0dce8
      ebeb1de2
    • S
      add {MSG,SEM,SHM}_STAT_ANY from linux v4.17 · af55070e
      Szabolcs Nagy 提交于
      introduced to stat ipc objects without permission checks since the
      info is available in /proc/sysvipc anyway, new in linux commits
      23c8cec8cf679b10997a512abb1e86f0cedc42ba
      a280d6dc77eb6002f269d58cd47c7c7e69b617b6
      c21a6970ae727839a2f300cd8dd957de0d0238c3
      af55070e
    • S
      add MAP_FIXED_NOREPLACE from linux v4.17 · 156a3bed
      Szabolcs Nagy 提交于
      to map at a fixed address without unmapping underlying mappings
      (fails with EEXIST unlike MAP_FIXED), new in linux commits
      4ed28639519c7bad5f518e70b3284c6e0763e650 and
      a4ff8e8620d3f4f50ac4b41e8067b7d395056843.
      156a3bed
    • S
      powerpc: add pkey syscall numbers from linux v4.16 · 90ac71d8
      Szabolcs Nagy 提交于
      add pkey_mprotect, pkey_alloc, pkey_free syscall numbers,
      new in linux commits 3350eb2ea127978319ced883523d828046af4045
      and 9499ec1b5e82321829e1c1510bcc37edc20b6f38
      90ac71d8
    • S
      aarch64: add HWCAP_ASIMDFHM from linux v4.16 · a697a1c9
      Szabolcs Nagy 提交于
      armv8.4 fp mul instructions.
      added in commit 3b3b681097fae73b7f5dcdd42db6cfdf32943d4c
      a697a1c9
    • S
      sys/ptrace.h: add PTRACE_SECCOMP_GET_METADATA from linux v4.16 · 0f7aa600
      Szabolcs Nagy 提交于
      to get seccomp state for checkpoint restore.
      added in linux commit 26500475ac1b499d8636ff281311d633909f5d20
      
      struct tag follows the glibc api and ptrace_peeksiginfo_args
      got changed too accordingly.
      0f7aa600
    • S
      netinet/if_ether.h: add ETH_TLEN from linux v4.16 · 3a81cbe6
      Szabolcs Nagy 提交于
      octets in ethernet type field
      added in linux commit 4bbb3e0e8239f9079bf1fe20b3c0cb598714ae61
      3a81cbe6
    • S
      netinet/if_ether.h: add ETH_P_ERSPAN2 from linux v4.16 · 833df867
      Szabolcs Nagy 提交于
      protocol number for erspan v2 support
      added in linux commit f551c91de262ba36b20c3ac19538afb4f4507441
      833df867
    • S
      sys/epoll.h: add EPOLLNVAL from linux v4.16 · 29f3202b
      Szabolcs Nagy 提交于
      added to uapi in commit 65aaf87b3aa2d049c6b9fd85221858a895df3393
      used since commit a9a08845e9acbd224e4ee466f5c1275ed50054e8,
      which renamed POLL* to EPOLL* in the kernel.
      29f3202b
    • R
      add m68k port · f81e44a0
      Rich Felker 提交于
      three ABIs are supported: the default with 68881 80-bit fpu format and
      results returned in floating point registers, softfloat-only with the
      same format, and coldfire fpu with IEEE single/double only. only the
      first is tested at all, and only under qemu which has fpu emulation
      bugs.
      
      basic functionality smoke tests have been performed for the most
      common arch-specific breakage via libc-test and qemu user-level
      emulation. some sysvipc failures remain, but are shared with other big
      endian archs and will be fixed separately.
      f81e44a0
  4. 15 6月, 2018 1 次提交
    • R
      add support for m68k 80-bit long double variant · 18f02c42
      Rich Felker 提交于
      since x86 and m68k are the only archs with 80-bit long double and each
      has mandatory endianness, select the variant via endianness.
      differences are minor: apparently just byte order and representation
      of infinities. the m68k format is not well-documented anywhere I could
      find, so if other differences are found they may require additional
      changes later.
      18f02c42
  5. 13 6月, 2018 1 次提交
  6. 03 6月, 2018 1 次提交
    • S
      fix TLS layout of TLS variant I when there is a gap above TP · 610c5a85
      Szabolcs Nagy 提交于
      In TLS variant I the TLS is above TP (or above a fixed offset from TP)
      but on some targets there is a reserved gap above TP before TLS starts.
      
      This matters for the local-exec tls access model when the offsets of
      TLS variables from the TP are hard coded by the linker into the
      executable, so the libc must compute these offsets the same way as the
      linker.  The tls offset of the main module has to be
      
      	alignup(GAP_ABOVE_TP, main_tls_align).
      
      If there is no TLS in the main module then the gap can be ignored
      since musl does not use it and the tls access models of shared
      libraries are not affected.
      
      The previous setup only worked if (tls_align & -GAP_ABOVE_TP) == 0
      (i.e. TLS did not require large alignment) because the gap was
      treated as a fixed offset from TP.  Now the TP points at the end
      of the pthread struct (which is aligned) and there is a gap above
      it (which may also need alignment).
      
      The fix required changing TP_ADJ and __pthread_self on affected
      targets (aarch64, arm and sh) and in the tlsdesc asm the offset to
      access the dtv changed too.
      610c5a85
  7. 02 6月, 2018 2 次提交
    • R
      fix output size handling for multi-unicode-char big5-hkscs characters · 029c622a
      Rich Felker 提交于
      since this iconv implementation's output is stateless, it's necessary
      to know before writing anything to the output buffer whether the
      conversion of the current input character will fit.
      
      previously we used a hard-coded table of the output size needed for
      each supported output encoding, but failed to update the table when
      adding support for conversion to jis-based encodings and again when
      adding separate encoding identifiers for implicit-endianness utf-16/32
      and ucs-2/4 variants, resulting in out-of-bound table reads and
      incorrect size checks. no buffer overflow was possible, but the
      affected characters could be converted incorrectly, and iconv could
      potentially produce an incorrect return value as a result.
      
      remove the hard-coded table, and instead perform the recursive iconv
      conversion to a temporary buffer, measuring the output size and
      transferring it to the actual output buffer only if the whole
      converted result fits.
      029c622a
    • R
      fix iconv mapping of big5-hkscs characters that map to two unicode chars · 165a1e37
      Rich Felker 提交于
      this case is handled with a recursive call to iconv using a
      specially-constructed conversion descriptor. the constant 0 was used
      as the offset for utf-8, since utf-8 appears first in the charmaps
      table, but the offset used needs to point into the charmap entry, past
      the name/aliases at the beginning, to the byte identifying the
      encoding. as a result of this error, junk was produced.
      
      instead, call find_charmap so we don't have to hard-code a nontrivial
      offset. with this change, the code has been tested and found to work
      in the case of converting the affected hkscs characters to utf-8.
      165a1e37
  8. 10 5月, 2018 2 次提交
    • W
      fix iconv conversion to UTF-32 with implicit (big) endianness · 99f4237a
      Will Dietz 提交于
      maintainer's notes:
      
      commit 95c6044e split UTF-32 and
      UTF-32BE but neglected to add a case for the former as a destination
      encoding, resulting in it wrongly being handled by the default case.
      the intent was that the value of the macro be chosen to encode "big
      endian" in the low bits, so that no code would be needed, but this was
      botched; instead, handle it the way UCS2 is handled.
      99f4237a
    • W
      fix iconv buffer overflow converting to legacy JIS-based encodings · 55a661ff
      Will Dietz 提交于
      maintainer's notes:
      
      commit a223dbd2 added the reverse
      conversions to JIS-based encodings, but omitted the check for remining
      buffer space in the case where the next character to be written was
      single-byte, allowing conversion to continue past the end of the
      destination buffer.
      55a661ff
  9. 09 5月, 2018 2 次提交
    • R
      make linking of thread-start with explicit scheduling conditional · 40bae2d3
      Rich Felker 提交于
      the wrapper start function that performs scheduling operations is
      unreachable if pthread_attr_setinheritsched is never called, so move
      it there rather than the pthread_create source file, saving some code
      size for static-linked programs.
      40bae2d3
    • R
      improve design of thread-start with explicit scheduling attributes · b8742f32
      Rich Felker 提交于
      eliminate the awkward startlock mechanism and corresponding fields of
      the pthread structure that were only used at startup.
      
      instead of having pthread_create perform the scheduling operations and
      having the new thread wait for them to be completed, start the new
      thread with a wrapper start function that performs its own scheduling,
      sending the result code back via a futex. this way the new thread can
      use storage from the calling thread's stack rather than permanent
      fields in the pthread structure.
      b8742f32
  10. 08 5月, 2018 1 次提交
    • R
      clean up and reduce size of internal pthread structure · 1db9a355
      Rich Felker 提交于
      over time the pthread structure has accumulated a lot of cruft taking
      up size. this commit removes unused fields and packs booleans and
      other small data more efficiently. changes which would also require
      changing code are not included at this time.
      
      non-volatile booleans are packed as unsigned char bitfield members.
      
      the canceldisable and cancelasync fields need volatile qualification
      due to how they're accessed from the cancellation signal handler and
      cancellable syscalls called from signal handlers. since volatile
      bitfield semantics are not clearly defined, discrete char objects are
      used instead.
      
      the pid field is completely removed; it has been unused since commit
      83dc6eb0.
      
      the tid field's type is changed to int because its use is as a value
      in futexes, which are defined as plain int. it has no conceptual
      relationship to pid_t. also, its position is not ABI.
      
      startlock is reduced to a length-1 array. the second element was
      presumably intended as a waiter count, but it was never used and made
      no sense, since there is at most one waiter.
      1db9a355
  11. 06 5月, 2018 1 次提交
    • R
      improve joinable/detached thread state handling · cdba6b25
      Rich Felker 提交于
      previously, some accesses to the detached state (from pthread_join and
      pthread_getattr_np) were unsynchronized; they were harmless in
      programs with well-defined behavior, but ugly. other accesses (in
      pthread_exit and pthread_detach) were synchronized by a poorly named
      "exitlock", with an ad-hoc trylock operation on it open-coded in
      pthread_detach, whose only purpose was establishing protocol for which
      thread is responsible for deallocation of detached-thread resources.
      
      instead, use an atomic detach_state and unify it with the futex used
      to wait for thread exit. this eliminates 2 members from the pthread
      structure, gets rid of the hackish lock usage, and makes rigorous the
      trap added in commit 80bf5952 for
      catching attempts to join detached threads. it should also make
      attempt to detach an already-detached thread reliably trap.
      cdba6b25
  12. 05 5月, 2018 2 次提交
    • R
      improve pthread_exit synchronization with functions targeting tid · 526e64f5
      Rich Felker 提交于
      if the last thread exited via pthread_exit, the logic that marked it
      dead did not account for the possibility of it targeting itself via
      atexit handlers. for example, an atexit handler calling
      pthread_kill(pthread_self(), SIGKILL) would return success
      (previously, ESRCH) rather than causing termination via the signal.
      
      move the release of killlock after the determination is made whether
      the exiting thread is the last thread. in the case where it's not,
      move the release all the way to the end of the function. this way we
      can clear the tid rather than spending storage on a dedicated
      dead-flag. clearing the tid is also preferable in that it hardens
      against inadvertent use of the value after the thread has terminated
      but before it is joined.
      526e64f5
    • R
      remove incorrect ESRCH error from pthread_kill · 4df42163
      Rich Felker 提交于
      posix documents in the rationale and future directions for
      pthread_kill that, since the lifetime of the thread id for a joinable
      thread lasts until it is joined, ESRCH is not a correct error for
      pthread_kill to produce when the target thread has exited but not yet
      been joined, and that conforming applications cannot attempt to detect
      this state. future versions of the standard may explicitly require
      that ESRCH not be returned for this case.
      4df42163
  13. 03 5月, 2018 1 次提交
    • R
      use a dedicated futex object for pthread_join instead of tid field · 9e2d820a
      Rich Felker 提交于
      the tid field in the pthread structure is not volatile, and really
      shouldn't be, so as not to limit the compiler's ability to reorder,
      merge, or split loads in code paths that may be relevant to
      performance (like controlling lock ownership).
      
      however, use of objects which are not volatile or atomic with futex
      wait is inherently broken, since the compiler is free to transform a
      single load into multiple loads, thereby using a different value for
      the controlling expression of the loop and the value passed to the
      futex syscall, leading the syscall to block instead of returning.
      
      reportedly glibc's pthread_join was actually affected by an equivalent
      issue in glibc on s390.
      
      add a separate, dedicated join_futex object for pthread_join to use.
      9e2d820a
  14. 02 5月, 2018 1 次提交
    • R
      optimize sigisemptyset · 941bd884
      Rich Felker 提交于
      the static const zero set ended up getting put in bss instead of
      rodata, wasting writable memory, and the call to memcmp was
      size-inefficient. generally for nonstandard extension functions we try
      to avoid poking at any internals directly, but the way the zero set
      was setup was arguably already doing so.
      941bd884