lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [day] [month] [year] [list]
Date:	Mon, 22 Jun 2015 07:47:37 +0100
From:	Al Viro <viro@...IV.linux.org.uk>
To:	Linus Torvalds <torvalds@...ux-foundation.org>
Cc:	linux-kernel@...r.kernel.org, linux-fsdevel@...r.kernel.org
Subject: [git pull] vfs pile 1

	In this pile: pathname resolution rewrite.
* recursion in link_path_walk() is gone.
* nesting limits on symlinks are gone (the only limit remaining is that
the total amount of symlinks is no more than 40, no matter how nested).
* "fast" (inline) symlinks are handled without leaving rcuwalk mode.
* stack footprint (independent of the nesting) is below kilobyte now -
about on par with what it used to be with one level of nested symlinks
and ~2.8 times lower than it used to be in the worst case.
* struct nameidata is entirely private to fs/namei.c now (not even opaque
pointers are being passed around).
* ->follow_link() and ->put_link() calling conventions had been changed;
all in-tree filesystems converted, out-of-tree should be able to follow
reasonably easy; see Documentation/filesystems/porting for details (and
in-tree filesystems for examples of conversion).

That has sat in -next since mid-May, seems to survive all testing without
regressions and merges clean with v4.1.  Please, pull from

git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs.git for-linus-1

Shortlog:
Al Viro (123):
      9p: don't bother with 4K allocation for 24-byte local array...
      9p: don't bother with __getname() in ->follow_link()
      ext4: split inode_operations for encrypted symlinks off the rest
      libfs: simple_follow_link()
      ext2: use simple_follow_link()
      befs: switch to simple_follow_link()
      ext3: switch to simple_follow_link()
      ext4: switch to simple_follow_link()
      jffs2: switch to simple_follow_link()
      shmem: switch to simple_follow_link()
      debugfs: switch to simple_follow_link()
      ufs: switch to simple_follow_link()
      ubifs: switch to simple_follow_link()
      sysv: switch to simple_follow_link()
      jfs: switch to simple_follow_link()
      freevxfs: switch to simple_follow_link()
      exofs: switch to {simple,page}_symlink_inode_operations
      ceph: switch to simple_follow_link()
      logfs: fix a pagecache leak for symlinks
      uninline walk_component()
      namei: take O_NOFOLLOW treatment into do_last()
      do_last: kill symlink_ok
      do_last: regularize the logics around following symlinks
      namei: get rid of lookup_hash()
      name: shift nameidata down into user_path_walk()
      namei: lift nameidata into filename_mountpoint()
      new ->follow_link() and ->put_link() calling conventions
      namei.c: separate the parts of follow_link() that find the link body
      namei: don't bother with ->follow_link() if ->i_link is set
      namei: introduce nameidata->link
      do_last: move path there from caller's stack frame
      namei: expand nested_symlink() in its only caller
      namei: expand the call of follow_link() in link_path_walk()
      namei: move the calls of may_follow_link() into follow_link()
      namei: rename follow_link to trailing_symlink, move it down
      link_path_walk: handle get_link() returning ERR_PTR() immediately
      link_path_walk: don't bother with walk_component() after jumping link
      link_path_walk: turn inner loop into explicit goto
      link_path_walk: massage a bit more
      link_path_walk: get rid of duplication
      link_path_walk: final preparations to killing recursion
      link_path_walk: kill the recursion
      link_path_walk: split "return from recursive call" path
      link_path_walk: cleanup - turn goto start; into continue;
      namei: move link/cookie pairs into nameidata
      namei: trim redundant arguments of trailing_symlink()
      namei: trim redundant arguments of fs/namei.c:put_link()
      namei: trim the arguments of get_link()
      namei: remove restrictions on nesting depth
      link_path_walk: nd->depth massage, part 1
      link_path_walk: nd->depth massage, part 2
      link_path_walk: nd->depth massage, part 3
      link_path_walk: nd->depth massage, part 4
      trailing_symlink: nd->depth massage, part 5
      get_link: nd->depth massage, part 6
      trailing_symlink: nd->depth massage, part 7
      put_link: nd->depth massage, part 8
      link_path_walk: nd->depth massage, part 9
      link_path_walk: nd->depth massage, part 10
      link_path_walk: end of nd->depth massage
      namei: we never need more than MAXSYMLINKS entries in nd->stack
      namei: lift (open-coded) terminate_walk() in follow_dotdot_rcu() into callers
      lift terminate_walk() into callers of walk_component()
      namei: lift (open-coded) terminate_walk() into callers of get_link()
      namei: take put_link() into {lookup,mountpoint,do}_last()
      namei: have terminate_walk() do put_link() on everything left
      link_path_walk: move the OK: inside the loop
      namei: new calling conventions for walk_component()
      namei: make should_follow_link() store the link in nd->link
      namei: move link count check and stack allocation into pick_link()
      lustre: rip the private symlink nesting limit out
      namei: simplify the callers of follow_managed()
      don't pass nameidata to ->follow_link()
      namei: simplify failure exits in get_link()
      namei: simpler treatment of symlinks with nothing other that / in the body
      namei: take the treatment of absolute symlinks to get_link()
      namei: fold put_link() into the failure case of complete_walk()
      namei: move bumping the refcount of link->mnt into pick_link()
      may_follow_link(): trim arguments
      namei: kill nd->link
      namei: take increment of nd->depth into pick_link()
      namei: may_follow_link() - lift terminate_walk() on failures into caller
      namei: split off filename_lookupat() with LOOKUP_PARENT
      namei: get rid of nameidata->base
      namei: path_init() calling conventions change
      namei: lift link_path_walk() call out of trailing_symlink()
      namei: lift terminate_walk() all the way up
      link_path_walk: use explicit returns for failure exits
      namei: explicitly pass seq number to unlazy_walk() when dentry != NULL
      namei: don't mangle nd->seq in lookup_fast()
      namei: store inode in nd->stack[]
      namei: pick_link() callers already have inode
      switch ->put_link() from dentry to inode
      new helper: free_page_put_link()
      namei: make put_link() RCU-safe
      namei: make may_follow_link() safe in RCU mode
      new helper: __legitimize_mnt()
      namei: store seq numbers in nd->stack[]
      namei: make unlazy_walk and terminate_walk handle nd->stack, add unlazy_link
      namei: don't unlazy until get_link()
      enable passing fast relative symlinks without dropping out of RCU mode
      namei: handle absolute symlinks without dropping out of RCU mode
      update Documentation/filesystems/ regarding the follow_link/put_link changes
      namei: unlazy_walk() doesn't need to mess with current->fs anymore
      lustre: kill unused macro (LOOKUP_CONTINUE)
      lustre: kill unused helper
      get rid of assorted nameidata-related debris
      namei: be careful with mountpoint crossings in follow_dotdot_rcu()
      namei: uninline set_root{,_rcu}()
      namei: pass the struct path to store the result down into path_lookupat()
      namei: move putname() call into filename_lookup()
      namei: shift nameidata inside filename_lookup()
      namei: make filename_lookup() reject ERR_PTR() passed as name
      namei: shift nameidata down into filename_parentat()
      namei: saner calling conventions for filename_create()
      namei: saner calling conventions for filename_parentat()
      namei: fold path_cleanup() into terminate_walk()
      namei: stash dfd and name into nameidata
      namei: trim do_last() arguments
      inline user_path_parent()
      inline user_path_create()
      namei: move saved_nd pointer into struct nameidata
      turn user_{path_at,path,lpath,path_dir}() into static inlines

David Howells (1):
      VFS: Handle lower layer dentry/inode in pathwalk

NeilBrown (7):
      ovl: rearrange ovl_follow_link to it doesn't need to call ->put_link
      SECURITY: remove nameidata arg from inode_follow_link.
      VFS: replace {, total_}link_count in task_struct with pointer to nameidata
      security/selinux: pass 'flags' arg to avc_audit() and avc_has_perm_flags()
      security: make inode_follow_link RCU-walk aware
      VFS/namei: make the use of touch_atime() in get_link() RCU-safe.
      Documentation: remove outdated information from automount-support.txt

Diffstat:
 Documentation/filesystems/Locking                  |    4 +-
 Documentation/filesystems/automount-support.txt    |   51 +-
 Documentation/filesystems/porting                  |   17 +
 Documentation/filesystems/vfs.txt                  |   22 +-
 .../lustre/lustre/include/linux/lustre_compat25.h  |   15 -
 .../staging/lustre/lustre/llite/llite_internal.h   |    6 -
 drivers/staging/lustre/lustre/llite/symlink.c      |   26 +-
 fs/9p/v9fs.h                                       |    2 -
 fs/9p/vfs_inode.c                                  |  123 +-
 fs/9p/vfs_inode_dotl.c                             |   39 +-
 fs/autofs4/symlink.c                               |    5 +-
 fs/befs/linuxvfs.c                                 |   57 +-
 fs/ceph/inode.c                                    |   11 +-
 fs/cifs/cifsfs.h                                   |    2 +-
 fs/cifs/link.c                                     |   28 +-
 fs/configfs/symlink.c                              |   31 +-
 fs/debugfs/file.c                                  |   12 -
 fs/debugfs/inode.c                                 |    6 +-
 fs/ecryptfs/inode.c                                |   11 +-
 fs/exofs/Kbuild                                    |    2 +-
 fs/exofs/exofs.h                                   |    4 -
 fs/exofs/inode.c                                   |    9 +-
 fs/exofs/namei.c                                   |    5 +-
 fs/exofs/symlink.c                                 |   55 -
 fs/ext2/inode.c                                    |    1 +
 fs/ext2/namei.c                                    |    3 +-
 fs/ext2/symlink.c                                  |   10 +-
 fs/ext3/inode.c                                    |    1 +
 fs/ext3/namei.c                                    |    3 +-
 fs/ext3/symlink.c                                  |   10 +-
 fs/ext4/ext4.h                                     |    1 +
 fs/ext4/inode.c                                    |    7 +-
 fs/ext4/namei.c                                    |   11 +-
 fs/ext4/symlink.c                                  |   48 +-
 fs/f2fs/namei.c                                    |   18 +-
 fs/freevxfs/vxfs_extern.h                          |    3 -
 fs/freevxfs/vxfs_immed.c                           |   34 -
 fs/freevxfs/vxfs_inode.c                           |    7 +-
 fs/fuse/dir.c                                      |   22 +-
 fs/gfs2/inode.c                                    |   10 +-
 fs/hostfs/hostfs_kern.c                            |   15 +-
 fs/hppfs/hppfs.c                                   |   13 +-
 fs/inode.c                                         |   31 +-
 fs/jffs2/dir.c                                     |    1 +
 fs/jffs2/fs.c                                      |    1 +
 fs/jffs2/symlink.c                                 |   45 +-
 fs/jfs/inode.c                                     |    3 +-
 fs/jfs/namei.c                                     |    5 +-
 fs/jfs/symlink.c                                   |   10 +-
 fs/kernfs/symlink.c                                |   25 +-
 fs/libfs.c                                         |   25 +-
 fs/logfs/dir.c                                     |    1 +
 fs/mount.h                                         |    1 +
 fs/namei.c                                         | 1453 ++++++++++----------
 fs/namespace.c                                     |   27 +-
 fs/nfs/symlink.c                                   |   19 +-
 fs/ntfs/namei.c                                    |    2 +-
 fs/open.c                                          |    2 +-
 fs/overlayfs/inode.c                               |   35 +-
 fs/proc/base.c                                     |    4 +-
 fs/proc/inode.c                                    |    9 +-
 fs/proc/namespaces.c                               |    4 +-
 fs/proc/self.c                                     |   24 +-
 fs/proc/thread_self.c                              |   22 +-
 fs/sysv/Makefile                                   |    2 +-
 fs/sysv/inode.c                                    |    5 +-
 fs/sysv/symlink.c                                  |   20 -
 fs/sysv/sysv.h                                     |    1 -
 fs/ubifs/dir.c                                     |    1 +
 fs/ubifs/file.c                                    |   11 +-
 fs/ubifs/super.c                                   |    1 +
 fs/ufs/inode.c                                     |    5 +-
 fs/ufs/namei.c                                     |    3 +-
 fs/ufs/symlink.c                                   |   13 +-
 fs/xfs/xfs_iops.c                                  |   11 +-
 include/linux/debugfs.h                            |    1 -
 include/linux/fs.h                                 |   16 +-
 include/linux/namei.h                              |   41 +-
 include/linux/sched.h                              |    3 +-
 include/linux/security.h                           |   13 +-
 mm/shmem.c                                         |   32 +-
 security/capability.c                              |    4 +-
 security/security.c                                |    7 +-
 security/selinux/avc.c                             |   18 +-
 security/selinux/hooks.c                           |   18 +-
 security/selinux/include/avc.h                     |    9 +-
 86 files changed, 1222 insertions(+), 1522 deletions(-)
 delete mode 100644 fs/exofs/symlink.c
 delete mode 100644 fs/sysv/symlink.c
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists