1. 25 3月, 2020 9 次提交
  2. 22 3月, 2020 2 次提交
    • S
      fix parsing offsets after long timezone names · 33338ebc
      Samuel Holland 提交于
      TZ containg a timezone name with >TZNAME_MAX characters currently
      breaks musl's timezone parsing. getname() stops after TZNAME_MAX
      characters. getoff() will consume no characters (because the next
      character is not a digit) and incorrectly return 0. Then, because
      there are remaining alphabetic characters, __daylight == 1, and
      dst_off == -3600.
      
      getname() must consume the entire timezone name, even if it will not
      fit in d/__tzname, so when it returns, s points to the offset digits.
      33338ebc
    • S
      avoid out-of-bounds read for invalid quoted timezone · 8e452aba
      Samuel Holland 提交于
      Parsing the timezone name must stop when reaching the null terminator.
      In that case, there is no '>' to skip.
      8e452aba
  3. 21 3月, 2020 2 次提交
  4. 15 3月, 2020 7 次提交
    • S
      define MAP_SYNC on powerpc/powerpc64 · 3e9d3386
      Samuel Holland 提交于
      Linux defines MAP_SYNC on powerpc and powerpc64 as of commit
      22fcea6f85f2 ("mm: move MAP_SYNC to asm-generic/mman-common.h"),
      so we can stop undefining it on those architectures.
      3e9d3386
    • T
      improve strerror speed · 8343334d
      Timo Teräs 提交于
      change the current O(n) lookup to O(1) based on the machinery
      described in "How To Write Shared Libraries" (Appendix B).
      8343334d
    • R
      fix corrupt sysvipc timestamps on 32-bit archs with old kernels · 2b2c8aaf
      Rich Felker 提交于
      kernel commit 4693916846269d633a3664586650dbfac2c5562f (first included
      in release v4.14) silently fixed a bug whereby the reserved space
      (which was later used for high bits of time) in IPC_STAT structures
      was left untouched rather than zeroed. this means that a caller that
      wants to read the high bits needs to pre-zero the memory.
      
      since it's not clear that these operations are permitted to modify the
      destination buffer on failure, use a temp buffer and copy back to the
      caller's buffer on success.
      2b2c8aaf
    • R
      work around negated error code bug on some mips kernels · 5db475f0
      Rich Felker 提交于
      on all mips variants, Linux did (and maybe still does) have some
      syscall return paths that wrongly return both the error flag in r7 and
      a negated error code in r2. in particular this happened for at least
      some causes of ENOSYS.
      
      add an extra check to only negate the error code if it's positive to
      begin with.
      
      bug report and concept for patch by Andreas Dröscher.
      5db475f0
    • R
      remove useless mips syscall asm constraint, align style with mips64/n32 · db86ec10
      Rich Felker 提交于
      commit 4221f154 added the r7
      constraint apparently out of a misunderstanding of the breakage it was
      addressing, and did so because the asm was in a shared macro used by
      all the __syscallN inline functions. now "+r" is used in the output
      section for the forms 4-argument and up, so having it in input is
      redundant, and the forms with 0-3 arguments don't need it as an input
      at all.
      
      the r2 constraint is kept because without it most gcc versions (seems
      to be all prior to 9.x) fail to honor the output register binding for
      r2. this seems to be a variant of gcc bug #87733.
      
      both the r7 and r2 input constraints look useless, but the r2 one was
      a quiet workaround for gcc bug 87733, which affects all modern
      versions prior to 9.x, so it's kept and documented.
      db86ec10
    • R
      revert mips (32-bit, o32) syscall asm clean-up due to regressions · 972b5fde
      Rich Felker 提交于
      exactly revert commit 604f8d3d which
      was wrong; it caused a major regression on Linux versions prior to
      2.6.36. old kernels did not properly preserve r2 across syscall
      restart, and instead restarted with the instruction right before
      syscall, imposing a contract that the previous instruction must load
      r2 from an immediate or a register (or memory) not clobbered by the
      syscall.
      972b5fde
    • R
      revert mips64/n32 syscall asm clean-up due to regressions · 5053fd26
      Rich Felker 提交于
      effectivly revert commit ddc7c4f9
      which was wrong; it caused a major regression on Linux versions prior
      to 2.6.36. old kernels did not properly preserve r2 across syscall
      restart, and instead restarted with the instruction right before
      syscall, imposing a contract that the previous instruction must load
      r2 from an immediate or a register (or memory) not clobbered by the
      syscall.
      
      since other changes were made since, including removal of the struct
      stat conversion that was replaced by separate struct kstat, this is
      not a direct revert, only a functional one.
      
      the "0"(r2) input constraint added back seems useless/erroneous, but
      without it most gcc versions (seems to be all prior to 9.x) fail to
      honor the output register binding for r2. this seems to be a variant
      of gcc bug #87733. further changes should be made later if a better
      workaround is found, but this one has been working since 2012. it
      seems this issue was encountered but misidentified then, when it
      inspired commit 4221f154.
      5053fd26
  5. 05 3月, 2020 1 次提交
  6. 26 2月, 2020 1 次提交
    • R
      add PTHREAD_NULL · 4e0796df
      Rich Felker 提交于
      this is added for POSIX-future as the outcome of Austin Group issue
      599. since it's in the reserved namespace for pthread.h, there are no
      namespace considerations for adding it early.
      4e0796df
  7. 23 2月, 2020 1 次提交
    • R
      use __socketcall to simplify socket() · 7063c459
      Rich Felker 提交于
      commit 59324c8b added __socketcall
      analogous to __syscall, returning the negated error rather than
      setting errno. use it to simplify the fallback path of socket(),
      avoiding extern calls and access to errno.
      
      Author: Rich Felker <dalias@aerifal.cx>
      Date:   Tue Jul 30 17:51:16 2019 -0400
      
          make __socketcall analogous to __syscall, error-returning
      7063c459
  8. 22 2月, 2020 3 次提交
    • R
      remove wrap_write helper from vdprintf · a01f1fe6
      Rich Felker 提交于
      this reverts commit 4ee039f3, which
      added the helper as a hack to make vdprintf usable before relocation,
      contingent on strong assumptions about the arch and tooling, back when
      the dynamic linker did not have a real staged model for
      self-relocation. since commit f3ddd173
      this has been unnecessary and the function was just wasting size and
      execution time.
      a01f1fe6
    • S
      math: fix sinh overflows in non-nearest rounding · d2055814
      Szabolcs Nagy 提交于
      The final rounding operation should be done with the correct sign
      otherwise huge results may incorrectly get rounded to or away from
      infinity in upward or downward rounding modes.
      
      This affected sinh and sinhf which set the sign on the result after
      a potentially overflowing mul. There may be other non-nearest rounding
      issues, but this was a known long standing issue with large ulp error
      (depending on how ulp is defined near infinity).
      
      The fix should have no effect on sinh and sinhf performance but may
      have a tiny effect on cosh and coshf.
      d2055814
    • S
      math: fix __rem_pio2 in non-nearest rounding modes · b3797d3b
      Szabolcs Nagy 提交于
      Handle when after reduction |y| > pi/4+tiny. This happens in directed
      rounding modes because the fast round to int code does not give the
      nearest integer. In such cases the reduction may not be symmetric
      between x and -x so e.g. cos(x)==cos(-x) may not hold (but polynomial
      evaluation is not symmetric either with directed rounding so fixing
      that would require more changes with bigger performance impact).
      
      The fix only adds two predictable branches in nearest rounding mode,
      simple ubenchmark does not show relevant performance regression in
      nearest rounding mode.
      
      The code could be improved: e.g reducing the medium size threshold
      such that two step reduction is enough instead of three, and the
      single precision case can avoid the issue by doing the round to int
      differently, but this fix was kept minimal.
      b3797d3b
  9. 21 2月, 2020 1 次提交
  10. 13 2月, 2020 1 次提交
    • R
      fix remaining direct use of stat syscalls outside fstatat.c · c9ebff47
      Rich Felker 提交于
      because struct stat is no longer assumed to correspond to the
      structure used by the stat-family syscalls, it's not valid to make any
      of these syscalls directly using a buffer of type struct stat.
      
      commit 94938920 moved all logic around
      this change for stat-family functions into fstatat.c, making the
      others wrappers for it. but a few other direct uses of the syscall
      were overlooked. the ones in tmpnam/tempnam are harmless since the
      syscalls are just used to test for file existence. however, the uses
      in fchmodat and __map_file depend on getting accurate file properties,
      and these functions may actually have been broken one or more mips
      variants due to removal of conversion hacks from syscall_arch.h.
      
      as a low-risk fix, simply use struct kstat in place of struct stat in
      the affected places.
      c9ebff47
  11. 07 2月, 2020 5 次提交
  12. 05 2月, 2020 3 次提交
  13. 04 2月, 2020 1 次提交
    • R
      move riscv64 register index constants to signal.h · 329e7929
      Rich Felker 提交于
      under _GNU_SOURCE for namespace cleanliness, analogous to other archs.
      the original placement in sys/reg.h seems not to have been motivated;
      such a header isn't even present on other implementations.
      329e7929
  14. 31 1月, 2020 1 次提交
    • R
      remove legacy clock_gettime and gettimeofday from public syscall.h · 5a105f19
      Rich Felker 提交于
      some nontrivial number of applications have historically performed
      direct syscalls for these operations rather than using the public
      functions. such usage is invalid now that time_t is 64-bit and these
      syscalls no longer match the types they are used with, and it was
      already harmful before (by suppressing use of vdso).
      
      since syscall() has no type safety, incorrect usage of these syscalls
      can't be caught at compile-time. so, without manually inspecting or
      running additional tools to check sources, the risk of such errors
      slipping through is high.
      
      this patch renames the syscalls on 32-bit archs to clock_gettime32 and
      gettimeofday_time32, so that applications using the original names
      will fail to build without being fixed.
      
      note that there are a number of other syscalls that may also be unsafe
      to use directly after the time64 switchover, but (1) these are the
      main two that seem to be in widespread use, and (2) most of the others
      continue to have valid usage with a null timeval/timespec argument, as
      the argument is an optional timeout or similar.
      5a105f19
  15. 29 1月, 2020 2 次提交