1. 09 1月, 2015 1 次提交
    • R
      check for connect failure in syslog log opening · c574321d
      Rich Felker 提交于
      based on patch by Dima Krasner, with minor improvements for code size.
      connect can fail if there is no listening syslogd, in which case a
      useless socket was kept open, preventing subsequent syslog call from
      attempting to connect again.
      c574321d
  2. 12 7月, 2014 4 次提交
    • R
      implement the LOG_CONS option in syslog · 781f26bc
      Rich Felker 提交于
      this was previously a no-op, somewhat intentionally, because I failed
      to understand that it only has an effect when sending to the logging
      facility fails and thus is not the nuisance that it would be if always
      sent output to the console.
      781f26bc
    • R
      suppress early syslog return when log socket cannot be opened · a64a045d
      Rich Felker 提交于
      this behavior is no longer valid in general, and was never necessary.
      if the LOG_PERROR option is set, output to stderr could still succeed.
      also, when the LOG_CONS option is added, it will need syslog to
      proceed even if opening the log socket fails.
      a64a045d
    • R
      implement the LOG_PERROR option in syslog · b8c4cf61
      Rich Felker 提交于
      this is a nonstandard feature, but easy and inexpensive to add. since
      the corresponding macro has always been defined in our syslog.h, it
      makes sense to actually support it. applications may reasonably be
      using the presence of the macro to assume that the feature is
      supported.
      
      the behavior of omitting the 'header' part of the log message does not
      seem to be well-documented, but matches other implementations (at
      least glibc) which have this option.
      
      based on a patch by Clément Vasseur, but simplified using %n.
      b8c4cf61
    • C
      fix the %m specifier in syslog · da271181
      Clément Vasseur 提交于
      errno must be saved upon vsyslog entry, otherwise its value could be
      changed by some libc function before reaching the %m handler in
      vsnprintf.
      da271181
  3. 12 12月, 2013 1 次提交
  4. 24 3月, 2013 1 次提交
    • R
      fix multiple bugs in syslog interfaces · 427c0ca7
      Rich Felker 提交于
      1. as reported by William Haddon, the value returned by snprintf was
      wrongly used as a length passed to sendto, despite it possibly
      exceeding the buffer length. this could lead to invalid reads and
      leaking additional data to syslog.
      
      2. openlog was storing a pointer to the ident string passed by the
      caller, rather than copying it. this bug is shared with (and even
      documented in) other implementations like glibc, but such behavior
      does not seem to meet the requirements of the standard.
      
      3. extremely long ident provided to openlog, or corrupt ident due to
      the above issue, could possibly have resulted in buffer overflows.
      despite having the potential for smashing the stack, i believe the
      impact is low since ident points to a short string literal in typical
      application usage (and per the above bug, other usages will break
      horribly on other implementations).
      
      4. when used with LOG_NDELAY, openlog was not connecting the
      newly-opened socket; sendto was being used instead. this defeated the
      main purpose of LOG_NDELAY: preparing for chroot.
      
      5. the default facility was not being used at all, so all messages
      without an explicit facility passed to syslog were getting logged at
      the kernel facility.
      
      6. setlogmask was not thread-safe; no synchronization was performed
      updating the mask. the fix uses atomics rather than locking to avoid
      introducing a lock in the fast path for messages whose priority is not
      in the mask.
      
      7. in some code paths, the syslog lock was being unlocked twice; this
      could result in releasing a lock that was actually held by a different
      thread.
      
      some additional enhancements to syslog such as a default identifier
      based on argv[0] or similar may still be desired; at this time, only
      the above-listed bugs have been fixed.
      427c0ca7
  5. 30 9月, 2012 1 次提交
    • R
      emulate SOCK_CLOEXEC and SOCK_NONBLOCK for old (pre-2.6.27) kernels · 79a5e73e
      Rich Felker 提交于
      also update syslog to use SOCK_CLOEXEC rather than separate fcntl
      step, to make it safe in multithreaded programs that run external
      programs.
      
      emulation is not atomic; it could be made atomic by holding a lock on
      forking during the operation, but this seems like overkill. my goal is
      not to achieve perfect behavior on old kernels (which have plenty of
      other imperfect behavior already) but to avoid catastrophic breakage
      in (1) syslog, which would give no output on old kernels with the
      change to use SOCK_CLOEXEC, and (2) programs built on a new kernel
      where configure scripts detected a working SOCK_CLOEXEC, which later
      get run on older kernels (they may otherwise fail to work completely).
      79a5e73e
  6. 25 4月, 2012 1 次提交
    • R
      ditch the priority inheritance locks; use malloc's version of lock · 4750cf42
      Rich Felker 提交于
      i did some testing trying to switch malloc to use the new internal
      lock with priority inheritance, and my malloc contention test got
      20-100 times slower. if priority inheritance futexes are this slow,
      it's simply too high a price to pay for avoiding priority inversion.
      maybe we can consider them somewhere down the road once the kernel
      folks get their act together on this (and perferably don't link it to
      glibc's inefficient lock API)...
      
      as such, i've switch __lock to use malloc's implementation of
      lightweight locks, and updated all the users of the code to use an
      array with a waiter count for their locks. this should give optimal
      performance in the vast majority of cases, and it's simple.
      
      malloc is still using its own internal copy of the lock code because
      it seems to yield measurably better performance with -O3 when it's
      inlined (20% or more difference in the contention stress test).
      4750cf42
  7. 19 4月, 2011 1 次提交
    • R
      protect syslog against cancellation · d2c604d5
      Rich Felker 提交于
      these functions are allowed to be cancellation points, but then we
      would have to install cleanup handlers to avoid termination with locks
      held.
      d2c604d5
  8. 14 4月, 2011 3 次提交
  9. 12 2月, 2011 1 次提交