1. 23 2月, 2013 1 次提交
  2. 21 12月, 2012 12 次提交
  3. 30 11月, 2012 1 次提交
  4. 27 10月, 2012 1 次提交
    • L
      VFS: don't do protected {sym,hard}links by default · 561ec64a
      Linus Torvalds 提交于
      In commit 800179c9 ("This adds symlink and hardlink restrictions to
      the Linux VFS"), the new link protections were enabled by default, in
      the hope that no actual application would care, despite it being
      technically against legacy UNIX (and documented POSIX) behavior.
      
      However, it does turn out to break some applications.  It's rare, and
      it's unfortunate, but it's unacceptable to break existing systems, so
      we'll have to default to legacy behavior.
      
      In particular, it has broken the way AFD distributes files, see
      
        http://www.dwd.de/AFD/
      
      along with some legacy scripts.
      
      Distributions can end up setting this at initrd time or in system
      scripts: if you have security problems due to link attacks during your
      early boot sequence, you have bigger problems than some kernel sysctl
      setting. Do:
      
      	echo 1 > /proc/sys/fs/protected_symlinks
      	echo 1 > /proc/sys/fs/protected_hardlinks
      
      to re-enable the link protections.
      
      Alternatively, we may at some point introduce a kernel config option
      that sets these kinds of "more secure but not traditional" behavioural
      options automatically.
      Reported-by: NNick Bowler <nbowler@elliptictech.com>
      Reported-by: NHolger Kiehl <Holger.Kiehl@dwd.de>
      Cc: Kees Cook <keescook@chromium.org>
      Cc: Ingo Molnar <mingo@elte.hu>
      Cc: Andrew Morton <akpm@linux-foundation.org>
      Cc: Al Viro <viro@zeniv.linux.org.uk>
      Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>
      Cc: Theodore Ts'o <tytso@mit.edu>
      Cc: stable@kernel.org # v3.6
      Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
      561ec64a
  5. 13 10月, 2012 6 次提交
  6. 12 10月, 2012 6 次提交
    • J
      vfs: unexport getname and putname symbols · 8e377d15
      Jeff Layton 提交于
      I see no callers in module code.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      8e377d15
    • J
      audit: overhaul __audit_inode_child to accomodate retrying · 4fa6b5ec
      Jeff Layton 提交于
      In order to accomodate retrying path-based syscalls, we need to add a
      new "type" argument to audit_inode_child. This will tell us whether
      we're looking for a child entry that represents a create or a delete.
      
      If we find a parent, don't automatically assume that we need to create a
      new entry. Instead, use the information we have to try to find an
      existing entry first. Update it if one is found and create a new one if
      not.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      4fa6b5ec
    • J
      audit: set the name_len in audit_inode for parent lookups · bfcec708
      Jeff Layton 提交于
      Currently, this gets set mostly by happenstance when we call into
      audit_inode_child. While that might be a little more efficient, it seems
      wrong. If the syscall ends up failing before audit_inode_child ever gets
      called, then you'll have an audit_names record that shows the full path
      but has the parent inode info attached.
      
      Fix this by passing in a parent flag when we call audit_inode that gets
      set to the value of LOOKUP_PARENT. We can then fix up the pathname for
      the audit entry correctly from the get-go.
      
      While we're at it, clean up the no-op macro for audit_inode in the
      !CONFIG_AUDITSYSCALL case.
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      bfcec708
    • J
      audit: reverse arguments to audit_inode_child · c43a25ab
      Jeff Layton 提交于
      Most of the callers get called with an inode and dentry in the reverse
      order. The compiler then has to reshuffle the arg registers and/or
      stack in order to pass them on to audit_inode_child.
      
      Reverse those arguments for a micro-optimization.
      Reported-by: NEric Paris <eparis@redhat.com>
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      c43a25ab
    • J
      audit: remove unnecessary NULL ptr checks from do_path_lookup · f78570dd
      Jeff Layton 提交于
      As best I can tell, whenever retval == 0, nd->path.dentry and nd->inode
      are also non-NULL. Eliminate those checks and the superfluous
      audit_context check.
      Signed-off-by: NEric Paris <eparis@redhat.com>
      Signed-off-by: NJeff Layton <jlayton@redhat.com>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      f78570dd
    • A
      vfs: bogus warnings in fs/namei.c · 98f6ef64
      Arnd Bergmann 提交于
      The follow_link() function always initializes its *p argument,
      or returns an error, but when building with 'gcc -s', the compiler
      gets confused by the __always_inline attribute to the function
      and can no longer detect where the cookie was initialized.
      
      The solution is to always initialize the pointer from follow_link,
      even in the error path. When building with -O2, this has zero impact
      on generated code and adds a single instruction in the error path
      for a -Os build on ARM.
      
      Without this patch, building with gcc-4.6 through gcc-4.8 and
      CONFIG_CC_OPTIMIZE_FOR_SIZE results in:
      
      fs/namei.c: In function 'link_path_walk':
      fs/namei.c:649:24: warning: 'cookie' may be used uninitialized in this function [-Wuninitialized]
      fs/namei.c:1544:9: note: 'cookie' was declared here
      fs/namei.c: In function 'path_lookupat':
      fs/namei.c:649:24: warning: 'cookie' may be used uninitialized in this function [-Wuninitialized]
      fs/namei.c:1934:10: note: 'cookie' was declared here
      fs/namei.c: In function 'path_openat':
      fs/namei.c:649:24: warning: 'cookie' may be used uninitialized in this function [-Wuninitialized]
      fs/namei.c:2899:9: note: 'cookie' was declared here
      Signed-off-by: NArnd Bergmann <arnd@arndb.de>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      98f6ef64
  7. 10 10月, 2012 1 次提交
  8. 27 9月, 2012 2 次提交
  9. 22 8月, 2012 1 次提交
  10. 17 8月, 2012 1 次提交
  11. 15 8月, 2012 2 次提交
  12. 04 8月, 2012 1 次提交
  13. 31 7月, 2012 2 次提交
    • J
      fs: Push mnt_want_write() outside of i_mutex · c30dabfe
      Jan Kara 提交于
      Currently, mnt_want_write() is sometimes called with i_mutex held and sometimes
      without it. This isn't really a problem because mnt_want_write() is a
      non-blocking operation (essentially has a trylock semantics) but when the
      function starts to handle also frozen filesystems, it will get a full lock
      semantics and thus proper lock ordering has to be established. So move
      all mnt_want_write() calls outside of i_mutex.
      
      One non-trivial case needing conversion is kern_path_create() /
      user_path_create() which didn't include mnt_want_write() but now needs to
      because it acquires i_mutex.  Because there are virtual file systems which
      don't bother with freeze / remount-ro protection we actually provide both
      versions of the function - one which calls mnt_want_write() and one which does
      not.
      
      [AV: scratch the previous, mnt_want_write() has been moved to kern_path_create()
      by now]
      Signed-off-by: NJan Kara <jack@suse.cz>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      c30dabfe
    • A
      simplify lookup_open()/atomic_open() - do the temporary mnt_want_write() early · 64894cf8
      Al Viro 提交于
      The write ref to vfsmount taken in lookup_open()/atomic_open() is going to
      be dropped; we take the one to stay in dentry_open().  Just grab the temporary
      in caller if it looks like we are going to need it (create/truncate/writable open)
      and pass (by value) "has it succeeded" flag.  Instead of doing mnt_want_write()
      inside, check that flag and treat "false" as "mnt_want_write() has just failed".
      mnt_want_write() is cheap and the things get considerably simpler and more robust
      that way - we get it and drop it in the same function, to start with, rather
      than passing a "has something in the guts of really scary functions taken it"
      back to caller.
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      64894cf8
  14. 30 7月, 2012 3 次提交
    • A
      fix O_EXCL handling for devices · f8310c59
      Al Viro 提交于
      O_EXCL without O_CREAT has different semantics; it's "fail if already opened",
      not "fail if already exists".  commit 71574865 broke that...
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      f8310c59
    • K
      fs: add link restriction audit reporting · a51d9eaa
      Kees Cook 提交于
      Adds audit messages for unexpected link restriction violations so that
      system owners will have some sort of potentially actionable information
      about misbehaving processes.
      Signed-off-by: NKees Cook <keescook@chromium.org>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      a51d9eaa
    • K
      fs: add link restrictions · 800179c9
      Kees Cook 提交于
      This adds symlink and hardlink restrictions to the Linux VFS.
      
      Symlinks:
      
      A long-standing class of security issues is the symlink-based
      time-of-check-time-of-use race, most commonly seen in world-writable
      directories like /tmp. The common method of exploitation of this flaw
      is to cross privilege boundaries when following a given symlink (i.e. a
      root process follows a symlink belonging to another user). For a likely
      incomplete list of hundreds of examples across the years, please see:
      http://cve.mitre.org/cgi-bin/cvekey.cgi?keyword=/tmp
      
      The solution is to permit symlinks to only be followed when outside
      a sticky world-writable directory, or when the uid of the symlink and
      follower match, or when the directory owner matches the symlink's owner.
      
      Some pointers to the history of earlier discussion that I could find:
      
       1996 Aug, Zygo Blaxell
        http://marc.info/?l=bugtraq&m=87602167419830&w=2
       1996 Oct, Andrew Tridgell
        http://lkml.indiana.edu/hypermail/linux/kernel/9610.2/0086.html
       1997 Dec, Albert D Cahalan
        http://lkml.org/lkml/1997/12/16/4
       2005 Feb, Lorenzo Hernández García-Hierro
        http://lkml.indiana.edu/hypermail/linux/kernel/0502.0/1896.html
       2010 May, Kees Cook
        https://lkml.org/lkml/2010/5/30/144
      
      Past objections and rebuttals could be summarized as:
      
       - Violates POSIX.
         - POSIX didn't consider this situation and it's not useful to follow
           a broken specification at the cost of security.
       - Might break unknown applications that use this feature.
         - Applications that break because of the change are easy to spot and
           fix. Applications that are vulnerable to symlink ToCToU by not having
           the change aren't. Additionally, no applications have yet been found
           that rely on this behavior.
       - Applications should just use mkstemp() or O_CREATE|O_EXCL.
         - True, but applications are not perfect, and new software is written
           all the time that makes these mistakes; blocking this flaw at the
           kernel is a single solution to the entire class of vulnerability.
       - This should live in the core VFS.
         - This should live in an LSM. (https://lkml.org/lkml/2010/5/31/135)
       - This should live in an LSM.
         - This should live in the core VFS. (https://lkml.org/lkml/2010/8/2/188)
      
      Hardlinks:
      
      On systems that have user-writable directories on the same partition
      as system files, a long-standing class of security issues is the
      hardlink-based time-of-check-time-of-use race, most commonly seen in
      world-writable directories like /tmp. The common method of exploitation
      of this flaw is to cross privilege boundaries when following a given
      hardlink (i.e. a root process follows a hardlink created by another
      user). Additionally, an issue exists where users can "pin" a potentially
      vulnerable setuid/setgid file so that an administrator will not actually
      upgrade a system fully.
      
      The solution is to permit hardlinks to only be created when the user is
      already the existing file's owner, or if they already have read/write
      access to the existing file.
      
      Many Linux users are surprised when they learn they can link to files
      they have no access to, so this change appears to follow the doctrine
      of "least surprise". Additionally, this change does not violate POSIX,
      which states "the implementation may require that the calling process
      has permission to access the existing file"[1].
      
      This change is known to break some implementations of the "at" daemon,
      though the version used by Fedora and Ubuntu has been fixed[2] for
      a while. Otherwise, the change has been undisruptive while in use in
      Ubuntu for the last 1.5 years.
      
      [1] http://pubs.opengroup.org/onlinepubs/9699919799/functions/linkat.html
      [2] http://anonscm.debian.org/gitweb/?p=collab-maint/at.git;a=commitdiff;h=f4114656c3a6c6f6070e315ffdf940a49eda3279
      
      This patch is based on the patches in Openwall and grsecurity, along with
      suggestions from Al Viro. I have added a sysctl to enable the protected
      behavior, and documentation.
      Signed-off-by: NKees Cook <keescook@chromium.org>
      Acked-by: NIngo Molnar <mingo@elte.hu>
      Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
      Signed-off-by: NAl Viro <viro@zeniv.linux.org.uk>
      800179c9