1. 21 6月, 2018 2 次提交
    • S
      add mlock2 linux syscall wrapper · b64d66d0
      Szabolcs Nagy 提交于
      mlock2 syscall was added in linux v4.4 and glibc has api for it.
      It falls back to mlock in case of flags==0, so that case works
      even on older kernels.
      
      MLOCK_ONFAULT is moved under _GNU_SOURCE following glibc.
      b64d66d0
    • R
      fix m68k float.h long double exponent range · 84b25160
      Rich Felker 提交于
      unlike the x86 variant, the m68k ld80 format allows (biased) exponent
      zero with mantissa msb set, thereby extending the normal range.
      84b25160
  2. 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
  3. 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
  4. 13 6月, 2018 1 次提交
  5. 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
  6. 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
  7. 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
  8. 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
  9. 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
  10. 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
  11. 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
  12. 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
  13. 02 5月, 2018 3 次提交
    • 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
    • R
      avoid excessive stack usage in getcwd · 375840c7
      Rich Felker 提交于
      to support the GNU extension of allocating a buffer for getcwd's
      result when a null pointer is passed without incurring a link
      dependency on free, we use a PATH_MAX-sized buffer on the stack and
      only duplicate it to allocated storage after the operation succeeds.
      unfortunately this imposed excessive stack usage on all callers,
      including those not making use of the GNU extension.
      
      instead, use a VLA to make stack allocation conditional.
      375840c7
    • R
      work around arm gcc's rejection of r7 asm constraints in thumb mode · e3c682ab
      Rich Felker 提交于
      in thumb mode, r7 is the ABI frame pointer register, and unless frame
      pointer is disabled, gcc insists on treating it as a fixed register,
      refusing to spill it to satisfy constraints. unfortunately, r7 is also
      used in the syscall ABI for passing the syscall number.
      
      up til now we just treated this as a requirement to disable frame
      pointer when generating code as thumb, but it turns out gcc forcibly
      enables frame pointer, and the fixed register constraint that goes
      with it, for functions which contain VLAs. this produces an
      unacceptable arch-specific constraint that (non-arm-specific) source
      files making syscalls cannot use VLAs.
      
      as a workaround, avoid r7 register constraints when producing thumb
      code and instead save/restore r7 in a temp register as part of the asm
      block. at some point we may want/need to support armv6-m/thumb1, so
      the asm has been tweaked to be thumb1-compatible while also
      near-optimal for thumb2: it allows the temp and/or syscall number to
      be in high registers (necessary since r0-r5 may all be used for
      syscalll args) and in thumb2 mode allows the syscall number to be an
      8-bit immediate.
      e3c682ab
  14. 27 4月, 2018 1 次提交
    • R
      getopt_long_only: don't prefix-match long-options that match short ones · 9be4ed5d
      Rich Felker 提交于
      for getopt_long, partial (prefix) matches of long options always begin
      with "--" and thus can never be ambiguous with a short option. for
      getopt_long_only, though, a single-character option can match both a
      short option and as a prefix for a long option. in this case, we
      wrongly interpreted it as a prefix for the long option.
      
      introduce a new pass, only in long-only mode, to check the prefix
      match against short options before accepting it. the only reason
      there's a slightly nontrivial loop being introduced rather than strchr
      is that our getopt already supports multibyte short options, and
      getopt_long_long should handle them consistently. a temp buffer and
      strstr could have been used, but the code to set it up would be just
      as large as what's introduced here and it would unnecessarily pull in
      relatively large code for strstr.
      9be4ed5d
  15. 20 4月, 2018 4 次提交
    • R
      reintroduce hardening against partially-replaced allocator · b4b1e103
      Rich Felker 提交于
      commit 618b18c7 removed the previous
      detection and hardening since it was incorrect. commit
      72141795 already handled all that
      remained for hardening the static-linked case. in the dynamic-linked
      case, have the dynamic linker check whether malloc was replaced and
      make that information available.
      
      with these changes, the properties documented in commit
      c9f415d7 are restored: if calloc is
      not provided, it will behave as malloc+memset, and any of the
      memalign-family functions not provided will fail with ENOMEM.
      b4b1e103
    • R
      return chunks split off by memalign using __bin_chunk instead of free · 72141795
      Rich Felker 提交于
      this change serves multiple purposes:
      
      1. it ensures that static linking of memalign-family functions will
      pull in the system malloc implementation, thereby causing link errors
      if an attempt is made to link the system memalign functions with a
      replacement malloc (incomplete allocator replacement).
      
      2. it eliminates calls to free that are unpaired with allocations,
      which are confusing when setting breakpoints or tracing execution.
      
      as a bonus, making __bin_chunk external may discourage aggressive and
      unnecessary inlining of it.
      72141795
    • R
      using malloc implementation types/macros/idioms for memalign · 3c2cbbe7
      Rich Felker 提交于
      the generated code should be mostly unchanged, except for explicit use
      of C_INUSE in place of copying the low bits from existing chunk
      headers/footers.
      
      these changes also remove mild UB due to dubious arithmetic on
      pointers into imaginary size_t[] arrays.
      3c2cbbe7
    • R
      23389b19