1. 13 10月, 2013 1 次提交
    • R
      fix uid/gid-setting error in faccessat with AT_EACCESS flag · 51635856
      Rich Felker 提交于
      this fixes an issue reported by Daniel Thau whereby faccessat with the
      AT_EACCESS flag did not work in cases where the process is running
      suid or sgid but without root privileges. per POSIX, when the process
      does not have "appropriate privileges", setuid changes the euid, not
      the real uid, and the target uid must be equal to the current real or
      saved uid; if this condition is not met, EPERM results. this caused
      the faccessat child process to fail.
      
      using the setreuid syscall rather than setuid works. POSIX leaves it
      unspecified whether setreuid can set the real user id to the effective
      user id on processes without "appropriate privileges", but Linux
      allows this; if it's not allowed, there would be no way for this
      function to work.
      51635856
  2. 01 9月, 2013 1 次提交
  3. 10 8月, 2013 1 次提交
  4. 03 8月, 2013 1 次提交
    • R
      fix faccessat to support AT_EACCESS flag · 0a05eace
      Rich Felker 提交于
      this is another case of the kernel syscall failing to support flags
      where it needs to, leading to horrible workarounds in userspace. this
      time the workaround requires changing uid/gid, and that's not safe to
      do in the current process. in the worst case, kernel resource limits
      might prevent recovering the original values, and then there would be
      no way to safely return. so, use the safe but horribly inefficient
      alternative: forking. clone is used instead of fork to suppress
      signals from the child.
      
      fortunately this worst-case code is only needed when effective and
      real ids mismatch, which mainly happens in suid programs.
      0a05eace
  5. 20 3月, 2011 1 次提交
  6. 12 2月, 2011 1 次提交