1. 08 8月, 2014 3 次提交
  2. 01 8月, 2014 4 次提交
    • R
      release 1.1.4 · 00733dd1
      Rich Felker 提交于
      00733dd1
    • R
      update notice on broken gcc versions in INSTALL file · 60276b99
      Rich Felker 提交于
      60276b99
    • R
      update COPYRIGHT file to reflect new contributors · 4272602a
      Rich Felker 提交于
      4272602a
    • R
      harden locale name handling and prevent slashes in LC_MESSAGES · 5059deb1
      Rich Felker 提交于
      the code which loads locale files was already rejecting locale names
      containing slashes. however, LC_MESSAGES records a locale name even if
      libc does not have a matching locale file, so that gettext or
      application code can use the recorded locale name for message
      translations to languages that libc does not support. this recorded
      name was not being checked for slashes, meaning that such code could
      potentially be tricked into directory traversal.
      
      in addition, since the value of a locale category is sometimes used as
      a pathname component by callers, the improved code rejects any value
      beginning with a dot. this prevents traversal to the parent directory
      via "..", use of the top-level locale directory via ".", and also
      avoids "hidden" directories as a side effect.
      
      finally, overly long locale names are now rejected (treated as an
      unrecognized name and thus as an alias for C.UTF-8) rather than being
      truncated.
      5059deb1
  3. 31 7月, 2014 6 次提交
  4. 30 7月, 2014 4 次提交
    • T
      reimplement if_nameindex and getifaddrs using netlink · 08e4052c
      Timo Teräs 提交于
      the previous implementations had several deficiencies, the most severe
      of which was the inability to report unconfigured interfaces or
      interfaces without ipv4 addresses. among the options discussed for
      fixing this, using netlink turned out to be the one with the least
      cost and most additional advantages. other improvements include:
      
      if_nameindex now avoids duplicates in the list it produces, but still
      includes legacy-style interface aliases if any are in use.
      
      getifaddrs now reports hardware addresses and includes the scope_id
      for link-local ipv6 addresses in the resulting address.
      08e4052c
    • R
      fix terminal control ioctl constants for sh · cbb609b3
      Rich Felker 提交于
      this commit changes the names to match the kernel names, exposing
      under the normal names the "old" versions which work with a smaller
      termios structure compatible with the userspace structure, and
      renaming the "new" versions with "2" on the end like the kernel has.
      
      this fixes spurious warnings "Unsupported ioctl: cmd=0x802c542a" from
      qemu-sh4 and should be more correct anyway, since our userspace
      termios structure does not have meaningful information in the part
      which the kernel would be interpreting as speeds with the new ioctl.
      cbb609b3
    • S
      tweaks to plural rules evaluator · a126188f
      Szabolcs Nagy 提交于
      const parsing, depth accounting and failure handling was changed
      a bit so the generated code is slightly smaller.
      a126188f
    • R
      harden dcngettext plural processing · e4dd0ab8
      Rich Felker 提交于
      while the __mo_lookup backend can verify that the translated message
      ends with a null terminator, is has no way to know nplurals and thus
      no way to verify that sufficiently many null terminators are present
      in the string to satisfy all plural forms. the code in dcngettext was
      already attempting to avoid reading past the end of the mo file
      mapping, but failed to do so because the strlen call itself could
      over-read. using strnlen instead allows us to avoid the problem.
      e4dd0ab8
  5. 29 7月, 2014 2 次提交
    • R
      harden mo file processing for locale/translations · 6e892106
      Rich Felker 提交于
      rather than just checking that the start of the string lies within the
      mapping, also check that the nominal length remains within the
      mapping, and that the null terminator is present at the nominal
      length. this ensures that the caller, using the result as a C string,
      will not read past the end of the mapping.
      
      the nominal length is never exposed to the caller, but it's useful
      internally to find where the null terminator should be without having
      to restort to linear search via strnlen/memchr.
      6e892106
    • R
      implement non-default plural rules for ngettext translations · 73d2a3bf
      Rich Felker 提交于
      the new code in dcngettext was written by me, and the expression
      evaluator by Szabolcs Nagy (nsz).
      73d2a3bf
  6. 28 7月, 2014 3 次提交
    • R
      remove unused a_cas_l from or1k atomic.h · c0284b37
      Rich Felker 提交于
      this follows the same logic as in the previous commit for other archs.
      c0284b37
    • R
      clean up unused and inconsistent atomics in arch dirs · 90e51e45
      Rich Felker 提交于
      the a_cas_l, a_swap_l, a_swap_p, and a_store_l operations were
      probably used a long time ago when only i386 and x86_64 were
      supported. as other archs were added, support for them was
      inconsistent, and they are obviously not in use at present. having
      them around potentially confuses readers working on new ports, and the
      type-punning hacks and inconsistent use of types in their definitions
      is not a style I wish to perpetuate in the source tree, so removing
      them seems appropriate.
      90e51e45
    • R
      fix insufficient synchronization in sh atomic asm · c394763d
      Rich Felker 提交于
      while other usage I've seen only has the synco instruction after the
      atomic operation, I cannot find any documentation indicating that this
      is correct. certainly all stores before the atomic need to have been
      synchronized before the atomic operation takes place.
      c394763d
  7. 27 7月, 2014 1 次提交
    • R
      implement gettext message translation functions · 2068b4e8
      Rich Felker 提交于
      this commit replaces the stub implementations with working message
      translation functions. translation units are factored so as to prevent
      pulling in the legacy, non-library-safe functions which use a global
      textdomain in modern code which is using the versions with an explicit
      domain argument. bind_textdomain_codeset is also placed in its own
      file since it should not be needed by most programs.
      
      this implementation is still missing some features: the LANGUAGE
      environment variable (for multiple fallback languages) is not honored,
      and non-default plural-form rules are not supported. these issues will
      be addressed in a later commit.
      
      one notable difference from the GNU implementation is that there is no
      default path for loading translation files. in principle one could be
      added, but since the documented correct usage is to call the
      bindtextdomain function, a default path is probably unnecessary.
      2068b4e8
  8. 26 7月, 2014 4 次提交
    • R
      add support for LC_TIME and LC_MESSAGES translations · c5b8f193
      Rich Felker 提交于
      for LC_MESSAGES, translation of strerror and similar literal message
      functions is supported. for messages in other places (particularly the
      dynamic linker) that use format strings, translation is not yet
      supported. in order to make it possible and safe, such messages will
      need to be refactored to separate the textual content from the format.
      
      for LC_TIME, the day and month names and strftime-style format strings
      provided by nl_langinfo are supported for translation. however there
      may be limitations, as some of the original C-locale nl_langinfo
      strings are non-unique and thus perhaps non-suitable as keys.
      
      overall, the locale support activated by this commit should not be
      seen as complete and polished but as a basis for beginning to test
      locale functionality and implement locales.
      c5b8f193
    • R
      add missing yes/no strings to nl_langinfo · 0206f596
      Rich Felker 提交于
      these were removed from the standard but still offered as an extension
      in langinfo.h, so nl_langinfo should support them.
      0206f596
    • R
      fix nl_langinfo table for LC_TIME era-related items · a19cd2b6
      Rich Felker 提交于
      due to a skipped slot and missing null terminator, the last few
      strings were off by one or two slots from their item codes.
      a19cd2b6
    • R
      implement mo file string lookup for translations · 41421d6b
      Rich Felker 提交于
      the core is based on a binary search; hash table is not used. both
      native and reverse-endian mo files are supported. all offsets read
      from the mapped mo file are checked against the mapping size to
      prevent the possibility of reads outside the mapping.
      
      this commit has no observable effects since there are not yet any
      callers to the message translation code.
      41421d6b
  9. 24 7月, 2014 2 次提交
  10. 21 7月, 2014 5 次提交
  11. 20 7月, 2014 6 次提交
    • R
      fix mips struct stat dev_t members for big endian · f61be1f8
      Rich Felker 提交于
      the mips version of this structure on the kernel side wrongly has
      32-bit type rather than 64-bit type. fortunately there is adjacent
      padding to bring it up to 64 bits, and on little-endian, this allows
      us to treat the adjacent kernel st_dev and st_pad0[0] as as single
      64-bit dev_t. however, on big endian, such treatment results in the
      upper and lower 32-bit parts of the dev_t value being swapped. for the
      purpose of just comparing st_dev values this did not break anything,
      but it precluded actually processing the device numbers as major/minor
      values.
      
      since the broken kernel behavior that needs to be worked around is
      isolated to one arch, I put the workarounds in syscall_arch.h rather
      than adding a stat fixup path in the common code. on little endian
      mips, the added code optimizes out completely.
      
      the changes necessary were incompatible with the way the __asm_syscall
      macro was factored so I just removed it and flattened the individual
      __syscallN functions. this arguably makes the code easier to read and
      understand, anyway.
      f61be1f8
    • B
      add issetugid function to check for elevated privilege · ddddec10
      Brent Cook 提交于
      this function provides a way for third-party library code to use the
      same logic that's used internally in libc for suppressing untrusted
      input/state (e.g. the environment) when the application is running
      with privleges elevated by the setuid or setgid bit or some other
      mechanism. its semantics are intended to match the openbsd function by
      the same name.
      
      there was some question as to whether this function is necessary:
      getauxval(AT_SECURE) was proposed as an alternative. however, this has
      several drawbacks. the most obvious is that it asks programmers to be
      aware of an implementation detail of ELF-based systems (the aux
      vector) rather than simply the semantic predicate to be checked. and
      trying to write a safe, reliable version of issetugid in terms of
      getauxval is difficult. for example, early versions of the glibc
      getauxval did not report ENOENT, which could lead to false negatives
      if AT_SECURE was not present in the aux vector (this could probably
      only happen when running on non-linux kernels under linux emulation,
      since glibc does not support linux versions old enough to lack
      AT_SECURE). as for musl, getauxval has always properly reported
      errors, but prior to commit 7bece9c2,
      the musl implementation did not emulate AT_SECURE if missing, which
      would result in a false positive. since musl actually does partially
      support kernels that lack AT_SECURE, this was problematic.
      
      the intent is that library authors will use issetugid if its
      availability is detected at build time, and only fall back to the
      unreliable alternatives on systems that lack it.
      
      patch by Brent Cook. commit message/rationale by Rich Felker.
      ddddec10
    • R
      fix or1k atomic store · cec33b2c
      Rich Felker 提交于
      at the very least, a compiler barrier is required no matter what, and
      that was missing. current or1k implementations have strong ordering,
      but this is not guaranteed as part of the ISA, so some sort of
      synchronizing operation is necessary.
      
      in principle we should use l.msync, but due to misinterpretation of
      the spec, it was wrongly treated as an optional instruction and is not
      supported by some implementations. if future kernels trap it and treat
      it as a nop (rather than illegal instruction) when the
      hardware/emulator does not support it, we could consider using it.
      
      in the absence of l.msync support, the l.lwa/l.swa instructions, which
      are specified to have a built-in l.msync, need to be used. the easiest
      way to use them to implement atomic store is to perform an atomic swap
      and throw away the result. using compare-and-swap would be lighter,
      and would probably be sufficient for all actual usage cases, but
      checking this is difficult and error-prone:
      
      with store implemented in terms of swap, it's guaranteed that, when
      another atomic operation is performed at the same time as the store,
      either the result of the store followed by the other operation, or
      just the store (clobbering the other operation's result) is seen. if
      store were implemented in terms of cas, there are cases where this
      invariant would fail to hold, and we would need detailed rules for the
      situations in which the store operation is well-defined.
      cec33b2c
    • R
      fix missing barriers in powerpc atomic store · 522a0de2
      Rich Felker 提交于
      522a0de2
    • R
      fix microblaze atomic store · 884cc0c7
      Rich Felker 提交于
      as far as I can tell, microblaze is strongly ordered, but this does
      not seem to be well-documented and the assumption may need revisiting.
      even with strong ordering, however, a volatile C assignment is not
      sufficient to implement atomic store, since it does not preclude
      reordering by the compiler with respect to non-volatile stores and
      loads.
      
      simply flanking a C store with empty volatile asm blocks with memory
      clobbers would achieve the desired result, but is likely to result in
      worse code generation, since the address and value for the store may
      need to be spilled. actually writing the store in asm, so that there's
      only one asm block, should give optimal code generation while
      satisfying the requirement for having a compiler barrier.
      884cc0c7
    • R
      1456b7ae