1. 06 11月, 2017 16 次提交
  2. 01 11月, 2017 1 次提交
  3. 25 10月, 2017 1 次提交
    • R
      fix build regression on ARM for ISA levels less than v5 · 1b9406b0
      Rich Felker 提交于
      commit 06fbefd1 (first included in
      release 1.1.17) introduced this regression.
      
      patch by Adrian Bunk. it fixes the regression in all cases, but
      spuriously prevents use of the clz instruction on very old compiler
      versions that don't define __ARM_ARCH. this may be fixed in a more
      general way at some point in the future. it also omits thumb1 logic
      since building as thumb1 code is currently not supported.
      1b9406b0
  4. 22 10月, 2017 1 次提交
    • R
      fix regression in glob with literal . or .. path component · ec04d122
      Rich Felker 提交于
      commit 8c4be3e2 was written to
      preclude the GLOB_PERIOD extension from matching these directory
      entries, but also precluded literal matches.
      
      adjust the check that excludes . and .. to check whether the
      GLOB_PERIOD flag is in effect, so that it cannot alter behavior in
      cases governed by the standard, and also don't exclude . or .. in any
      case where normal glob behavior (fnmatch's FNM_PERIOD flag) would have
      included one or both of them (patterns such as ".*").
      
      it's still not clear whether this is the preferred behavior for
      GLOB_PERIOD, but at least it's clear that it can no longer break
      applications which are not relying on quirks of a nonstandard feature.
      ec04d122
  5. 20 10月, 2017 2 次提交
    • W
      posix_spawn: use larger stack to cover worst-case in execvpe · 004dc954
      Will Dietz 提交于
      execvpe stack-allocates a buffer used to hold the full path
      (combination of a PATH entry and the program name)
      while searching through $PATH, so at least
      NAME_MAX+PATH_MAX is needed.
      
      The stack size can be made conditionally smaller
      (the current 1024 appears appropriate)
      should this larger size be burdensome in those situations.
      004dc954
    • R
      release 1.1.17 · 2cd663fb
      Rich Felker 提交于
      2cd663fb
  6. 19 10月, 2017 1 次提交
    • R
      in dns parsing callback, enforce MAXADDRS to preclude overflow · 45ca5d3f
      Rich Felker 提交于
      MAXADDRS was chosen not to need enforcement, but the logic used to
      compute it assumes the answers received match the RR types of the
      queries. specifically, it assumes that only one replu contains A
      record answers. if the replies to both the A and the AAAA query have
      their answer sections filled with A records, MAXADDRS can be exceeded
      and clobber the stack of the calling function.
      
      this bug was found and reported by Felix Wilhelm.
      45ca5d3f
  7. 14 10月, 2017 3 次提交
    • R
      fix incorrect base name offset from nftw when pathname ends in slash(es) · 5b5eb527
      Rich Felker 提交于
      the rightmost '/' character is not necessarily the delimiter before
      the basename; it could be a spurious trailing character on the
      directory name.
      
      this change does not introduce any normalization of pathnames or
      stripping of trailing slashes, contrary to at least glibc and perhaps
      other implementations; it jusst prevents their presence from breaking
      things. whether further changes should be made is an open question
      that may depend on conformance and/or application compatibility
      considerations.
      
      based loosely on patch by Joakim Sindholt.
      5b5eb527
    • R
      fix read-after-free type error in pthread_detach · c1e27367
      Rich Felker 提交于
      calling __unlock on t->exitlock is not valid because __unlock reads
      the waiters count after making the atomic store that could allow
      pthread_exit to continue and unmap the thread's stack and the object t
      points to. for now, inline the __unlock logic with an unconditional
      futex wake operation so that the waiters count is not needed.
      
      once __lock/__unlock have been made safe for self-synchronized
      destruction, we could switch back to using them.
      c1e27367
    • S
      math: rewrite fma with mostly int arithmetics · 90747692
      Szabolcs Nagy 提交于
      the freebsd fma code failed to raise underflow exception in some
      cases in nearest rounding mode (affects fmal too) e.g.
      
        fma(-0x1p-1000, 0x1.000001p-74, 0x1p-1022)
      
      and the inexact exception may be raised spuriously since the fenv
      is not saved/restored around the exact multiplication algorithm
      (affects x86 fma too).
      
      another issue is that the underflow behaviour when the rounded result
      is the minimal normal number is target dependent, ieee754 allows two
      ways to raise underflow for inexact results: raise if the result before
      rounding is in the subnormal range (e.g. aarch64, arm, powerpc) or if
      the result after rounding with infinite exponent range is in the
      subnormal range (e.g. x86, mips, sh).
      
      to avoid all these issues the algorithm was rewritten with mostly int
      arithmetics and float arithmetics is only used to get correct rounding
      and raise exceptions according to the behaviour of the target without
      any fenv.h dependency. it also unifies x86 and non-x86 fma.
      
      fmaf is not affected, fmal need to be fixed too.
      
      this algorithm depends on a_clz_64 and it required a few spurious
      instructions to make sure underflow exception is raised in a particular
      corner case. (normally FORCE_EVAL(tiny*tiny) would be used for this,
      but on i386 gcc is broken if the expression is constant
      https://gcc.gnu.org/bugzilla/show_bug.cgi?id=57245
      and there is no easy portable fix for the macro.)
      90747692
  8. 13 10月, 2017 2 次提交
    • R
      for executing init array functions, use function type with prototype · b3516058
      Rich Felker 提交于
      this is for consistency with the way it's done in in the dynamic
      linker, avoiding a deprecated C feature (non-prototype function
      types), and improving code generation. GCC unnecessarily uses the
      variadic calling convention (e.g. clearing rax on x86_64) when making
      a call where the argument types are not known for compatibility with
      wrong code which calls variadic functions this way. (C on the other
      hand is clear that such calls have undefined behavior.)
      b3516058
    • R
      fix access by setjmp and longjmp to __hwcap on arm built as thumb2 · e364774d
      Rich Felker 提交于
      this is a subtle issue with how the assembler/linker work. for the adr
      pseudo-instruction used to find __hwcap, the assembler in thumb mode
      generates a 16-bit thumb add instruction which can only represent
      word-aligned addresses, despite not knowing the alignment of the
      label. if the setjmp function is assigned a non-multiple-of-4 address
      at link time, the load then loads from the wrong address (the last
      instruction rather than the data containing the offset) and ends up
      reading nonsense instead of the value of __hwcap. this in turn causes
      the checks for floating-point/vector register sets (e.g. IWMMX) to
      evaluate incorrectly, crashing when setjmp/longjmp try to save/restore
      those registers.
      
      fix based on bug report by Felix Hädicke.
      e364774d
  9. 29 9月, 2017 1 次提交
  10. 12 9月, 2017 1 次提交
  11. 07 9月, 2017 5 次提交
    • R
      work around incorrect EPERM from mmap syscall · da438ee1
      Rich Felker 提交于
      under some conditions, the mmap syscall wrongly fails with EPERM
      instead of ENOMEM when memory is exhausted; this is probably the
      result of the kernel trying to fit the allocation somewhere that
      crosses into the kernel range or below mmap_min_addr. in any case it's
      a conformance bug, so work around it. for now, only handle the case of
      anonymous mappings with no requested address; in other cases EPERM may
      be a legitimate error.
      
      this indirectly fixes the possibility of malloc failing with the wrong
      errno value.
      da438ee1
    • R
      fix glob descent into . and .. with GLOB_PERIOD · 8c4be3e2
      Rich Felker 提交于
      GLOB_PERIOD is a gnu extension, and GNU glob does not seem to honor it
      except in the last path component. it's not clear whether this a bug
      or intentional, but it seems reasonable that it should exclude the
      special entries . and .. when walking.
      
      changes based on report and analysis by Julien Ramseier.
      8c4be3e2
    • R
      don't treat numeric port strings as servent records in getservby*() · 565dbee2
      Rich Felker 提交于
      some applications use getservbyport to find port numbers that are not
      assigned to a service; if getservbyport always succeeds with a numeric
      string as the result, they fail to find any available ports.
      
      POSIX doesn't seem to mandate the behavior one way or another. it
      specifies an abstract service database, which an implementation could
      define to include numeric port strings, but it makes more sense to
      align behavior with traditional implementations.
      
      based on patch by A. Wilcox. the original patch only changed
      getservbyport[_r]. to maintain a consistent view of the "service
      database", I have also modified getservbyname[_r] to exclude numeric
      port strings.
      565dbee2
    • R
      fix signal masking race in pthread_create with priority attributes · 9e01be6e
      Rich Felker 提交于
      if the parent thread was able to set the new thread's priority before
      it reached the check for 'startlock', the new thread failed to restore
      its signal mask and thus ran with all signals blocked.
      
      concept for patch by Sergei, who reported the issue; unnecessary
      changes were removed and comments added since the whole 'startlock'
      thing is non-idiomatic and confusing. eventually it should be replaced
      with use of idiomatic synchronization primitives.
      9e01be6e
    • S
      make syscall.h consistent with linux · 822dddfb
      Szabolcs Nagy 提交于
      most of the found naming differences don't matter to musl, because
      internally it unifies the syscall names that vary across targets,
      but for external code the names should match the kernel uapi.
      
      aarch64:
      	__NR_fstatat is called __NR_newfstatat in linux.
      	__NR_or1k_atomic got mistakenly copied from or1k.
      arm:
      	__NR_arm_sync_file_range is an alias for __NR_sync_file_range2
      	__NR_fadvise64_64 is called __NR_arm_fadvise64_64 in linux,
      	the old non-arm name is kept too, it should not cause issues.
      	(powerpc has similar nonstandard fadvise and it uses the
      	normal name.)
      i386:
      	__NR_madvise1 was removed from linux in commit
      	303395ac3bf3e2cb488435537d416bc840438fcb 2011-11-11
      microblaze:
      	__NR_fadvise, __NR_fstatat, __NR_pread, __NR_pwrite
      	had different name in linux.
      mips:
      	__NR_fadvise, __NR_fstatat, __NR_pread, __NR_pwrite, __NR_select
      	had different name in linux.
      mipsn32:
      	__NR_fstatat is called __NR_newfstatat in linux.
      or1k:
      	__NR__llseek is called __NR_llseek in linux.
      	the old name is kept too because that's the name musl uses
      	internally.
      powerpc:
      	__NR_{get,set}res{gid,uid}32 was never present in powerpc linux.
      	__NR_timerfd was briefly defined in linux but then got renamed.
      822dddfb
  12. 05 9月, 2017 4 次提交
    • B
      handle whitespace before %% in scanf · 9255dad9
      Bartosz Brachaczek 提交于
      this is mandated by C and POSIX standards and is in accordance with
      glibc behavior.
      9255dad9
    • A
      fix OOB reads in Xbyte_memmem · 51bdcdc4
      Alexander Monakov 提交于
      Reported by Leah Neukirchen.
      51bdcdc4
    • A
      free allocations in clearenv · cc0dbd5f
      Alexander Monakov 提交于
      This aligns clearenv with the Linux man page by setting 'environ'
      rather than '*environ' to NULL, and stops it from leaking entries
      allocated by the libc.
      cc0dbd5f
    • A
      overhaul environment functions · 8e932792
      Alexander Monakov 提交于
      Rewrite environment access functions to slim down code, fix bugs and
      avoid invoking undefined behavior.
      
      * avoid using int-typed iterators where size_t would be correct;
      * use strncmp instead of memcmp consistently;
      * tighten prologues by invoking __strchrnul;
      * handle NULL environ.
      
      putenv:
      * handle "=value" input via unsetenv too (will return -1/EINVAL);
      * rewrite and simplify __putenv; fix the leak caused by failure to
        deallocate entry added by preceding setenv when called from putenv.
      
      setenv:
      * move management of libc-allocated entries to this translation unit,
        and use no-op weak symbols in putenv/unsetenv;
      
      unsetenv:
      * rewrite; this fixes UB caused by testing a free'd pointer against
        NULL on entry to subsequent loops.
      
      Not changed:
      Failure to extend allocation tracking array (previously __env_map, now
      env_alloced) is ignored rather than causing to report -1/ENOMEM to the
      caller; the worst-case consequence is leaking this allocation when it
      is removed or replaced in a subsequent environment access.
      
      Initially UB in unsetenv was reported by Alexander Cherepanov.
      Using a weak alias to avoid pulling in malloc via unsetenv was
      suggested by Rich Felker.
      8e932792
  13. 02 9月, 2017 1 次提交
  14. 01 9月, 2017 1 次提交
    • R
      fix erroneous stop before input limit in mbsnrtowcs and wcsnrtombs · 11ddc314
      Rich Felker 提交于
      the value computed as an output limit that bounds the amount of input
      consumed below the input limit was incorrectly being used as the
      actual amount of input consumed. instead, compute the actual amount of
      input consumed as a difference of pointers before and after the
      conversion.
      
      patch by Mikhail Kremnyov.
      11ddc314