Commits on Jul 29, 2016
  1. Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    …/git/ebiederm/user-namespace
    
    Pull userns vfs updates from Eric Biederman:
     "This tree contains some very long awaited work on generalizing the
      user namespace support for mounting filesystems to include filesystems
      with a backing store.  The real world target is fuse but the goal is
      to update the vfs to allow any filesystem to be supported.  This
      patchset is based on a lot of code review and testing to approach that
      goal.
    
      While looking at what is needed to support the fuse filesystem it
      became clear that there were things like xattrs for security modules
      that needed special treatment.  That the resolution of those concerns
      would not be fuse specific.  That sorting out these general issues
      made most sense at the generic level, where the right people could be
      drawn into the conversation, and the issues could be solved for
      everyone.
    
      At a high level what this patchset does a couple of simple things:
    
       - Add a user namespace owner (s_user_ns) to struct super_block.
    
       - Teach the vfs to handle filesystem uids and gids not mapping into
         to kuids and kgids and being reported as INVALID_UID and
         INVALID_GID in vfs data structures.
    
      By assigning a user namespace owner filesystems that are mounted with
      only user namespace privilege can be detected.  This allows security
      modules and the like to know which mounts may not be trusted.  This
      also allows the set of uids and gids that are communicated to the
      filesystem to be capped at the set of kuids and kgids that are in the
      owning user namespace of the filesystem.
    
      One of the crazier corner casees this handles is the case of inodes
      whose i_uid or i_gid are not mapped into the vfs.  Most of the code
      simply doesn't care but it is easy to confuse the inode writeback path
      so no operation that could cause an inode write-back is permitted for
      such inodes (aka only reads are allowed).
    
      This set of changes starts out by cleaning up the code paths involved
      in user namespace permirted mounts.  Then when things are clean enough
      adds code that cleanly sets s_user_ns.  Then additional restrictions
      are added that are possible now that the filesystem superblock
      contains owner information.
    
      These changes should not affect anyone in practice, but there are some
      parts of these restrictions that are changes in behavior.
    
       - Andy's restriction on suid executables that does not honor the
         suid bit when the path is from another mount namespace (think
         /proc/[pid]/fd/) or when the filesystem was mounted by a less
         privileged user.
    
       - The replacement of the user namespace implicit setting of MNT_NODEV
         with implicitly setting SB_I_NODEV on the filesystem superblock
         instead.
    
         Using SB_I_NODEV is a stronger form that happens to make this state
         user invisible.  The user visibility can be managed but it caused
         problems when it was introduced from applications reasonably
         expecting mount flags to be what they were set to.
    
      There is a little bit of work remaining before it is safe to support
      mounting filesystems with backing store in user namespaces, beyond
      what is in this set of changes.
    
       - Verifying the mounter has permission to read/write the block device
         during mount.
    
       - Teaching the integrity modules IMA and EVM to handle filesystems
         mounted with only user namespace root and to reduce trust in their
         security xattrs accordingly.
    
       - Capturing the mounters credentials and using that for permission
         checks in d_automount and the like.  (Given that overlayfs already
         does this, and we need the work in d_automount it make sense to
         generalize this case).
    
      Furthermore there are a few changes that are on the wishlist:
    
       - Get all filesystems supporting posix acls using the generic posix
         acls so that posix_acl_fix_xattr_from_user and
         posix_acl_fix_xattr_to_user may be removed.  [Maintainability]
    
       - Reducing the permission checks in places such as remount to allow
         the superblock owner to perform them.
    
       - Allowing the superblock owner to chown files with unmapped uids and
         gids to something that is mapped so the files may be treated
         normally.
    
      I am not considering even obvious relaxations of permission checks
      until it is clear there are no more corner cases that need to be
      locked down and handled generically.
    
      Many thanks to Seth Forshee who kept this code alive, and putting up
      with me rewriting substantial portions of what he did to handle more
      corner cases, and for his diligent testing and reviewing of my
      changes"
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/ebiederm/user-namespace: (30 commits)
      fs: Call d_automount with the filesystems creds
      fs: Update i_[ug]id_(read|write) to translate relative to s_user_ns
      evm: Translate user/group ids relative to s_user_ns when computing HMAC
      dquot: For now explicitly don't support filesystems outside of init_user_ns
      quota: Handle quota data stored in s_user_ns in quota_setxquota
      quota: Ensure qids map to the filesystem
      vfs: Don't create inodes with a uid or gid unknown to the vfs
      vfs: Don't modify inodes with a uid or gid unknown to the vfs
      cred: Reject inodes with invalid ids in set_create_file_as()
      fs: Check for invalid i_uid in may_follow_link()
      vfs: Verify acls are valid within superblock's s_user_ns.
      userns: Handle -1 in k[ug]id_has_mapping when !CONFIG_USER_NS
      fs: Refuse uid/gid changes which don't map into s_user_ns
      selinux: Add support for unprivileged mounts from user namespaces
      Smack: Handle labels consistently in untrusted mounts
      Smack: Add support for unprivileged mounts from user namespaces
      fs: Treat foreign mounts as nosuid
      fs: Limit file caps to the user namespace of the super block
      userns: Remove the now unnecessary FS_USERNS_DEV_MOUNT flag
      userns: Remove implicit MNT_NODEV fragility.
      ...
    committed Jul 29, 2016
  2. Merge tag 'pm-urgent-4.8-rc1' of git://git.kernel.org/pub/scm/linux/k…

    …ernel/git/rafael/linux-pm
    
    Pull power management fix from Rafael Wysocki:
     "Fix a nasty (and really hard to debug) memory corruption during resume
      from hibernation on x86-64 (that leads to a kernel panic most of the
      time) due to the use of a stale stack pointer value in FRAME_BEGIN
      (Josh Poimboeuf)"
    
    * tag 'pm-urgent-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm:
      x86/power/64: Fix hibernation return address corruption
    committed Jul 29, 2016
  3. Merge branch 'for-4.7-fixes' of git://git.kernel.org/pub/scm/linux/ke…

    …rnel/git/tj/cgroup
    
    Pull more cgroup updates from Tejun Heo:
     "I forgot to include the patches which got applied to for-4.7-fixes
      late during last cycle.
    
      Eric's three patches fix bugs introduced with the namespace support"
    
    * 'for-4.7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/cgroup:
      cgroupns: Only allow creation of hierarchies in the initial cgroup namespace
      cgroupns: Close race between cgroup_post_fork and copy_cgroup_ns
      cgroupns: Fix the locking in copy_cgroup_ns
    committed Jul 29, 2016
  4. Merge branch 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/…

    …linux/kernel/git/tip/tip
    
    Pull smp hotplug updates from Thomas Gleixner:
     "This is the next part of the hotplug rework.
    
       - Convert all notifiers with a priority assigned
    
       - Convert all CPU_STARTING/DYING notifiers
    
         The final removal of the STARTING/DYING infrastructure will happen
         when the merge window closes.
    
      Another 700 hundred line of unpenetrable maze gone :)"
    
    * 'smp-hotplug-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: (70 commits)
      timers/core: Correct callback order during CPU hot plug
      leds/trigger/cpu: Move from CPU_STARTING to ONLINE level
      powerpc/numa: Convert to hotplug state machine
      arm/perf: Fix hotplug state machine conversion
      irqchip/armada: Avoid unused function warnings
      ARC/time: Convert to hotplug state machine
      clocksource/atlas7: Convert to hotplug state machine
      clocksource/armada-370-xp: Convert to hotplug state machine
      clocksource/exynos_mct: Convert to hotplug state machine
      clocksource/arm_global_timer: Convert to hotplug state machine
      rcu: Convert rcutree to hotplug state machine
      KVM/arm/arm64/vgic-new: Convert to hotplug state machine
      smp/cfd: Convert core to hotplug state machine
      x86/x2apic: Convert to CPU hotplug state machine
      profile: Convert to hotplug state machine
      timers/core: Convert to hotplug state machine
      hrtimer: Convert to hotplug state machine
      x86/tboot: Convert to hotplug state machine
      arm64/armv8 deprecated: Convert to hotplug state machine
      hwtracing/coresight-etm4x: Convert to hotplug state machine
      ...
    committed Jul 29, 2016
  5. Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide

    Pull IDE updates from David Miller:
     "Just a couple small bug fixes, nothing overly exciting in here"
    
    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/ide:
      ide: missing break statement in set_timings_mdma()
      ide: hpt366: fix incorrect mask when checking at cmd_high_time
      ide-tape: fix misprint in failure handling in idetape_init()
      cmd640: add __init attribute
    committed Jul 29, 2016
  6. Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc

    Pull sparc updates from David Miller:
    
     1) Double spin lock bug in sunhv serial driver, from Dan Carpenter.
    
     2) Use correct RSS estimate when determining whether to grow the huge
        TSB or not, from Mike Kravetz.
    
     3) Don't use full three level page tables for hugepages, PMD level is
        sufficient.  From Nitin Gupta.
    
     4) Mask out extraneous bits from TSB_TAG_ACCESS register, we only want
        the address bits.
    
    * git://git.kernel.org/pub/scm/linux/kernel/git/davem/sparc:
      sparc64: Trim page tables for 8M hugepages
      sparc64 mm: Fix base TSB sizing when hugetlb pages are used
      sparc: serial: sunhv: fix a double lock bug
      sparc32: off by ones in BUG_ON()
      sparc: Don't leak context bits into thread->fault_address
    committed Jul 29, 2016
  7. Merge tag 'arc-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/…

    …git/vgupta/arc
    
    Pull ARC updates from Vineet Gupta:
     "Things have been calm here - nothing much except for a few fixes"
    
    * tag 'arc-4.8-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc:
      ARC: mm: don't loose PTE_SPECIAL in pte_modify()
      ARC: dma: fix address translation in arc_dma_free
      ARC: typo fix in mm/ioremap.c
      ARC: fix linux-next build breakage
    committed Jul 29, 2016
  8. Merge branch 'pm-sleep'

    * pm-sleep:
      x86/power/64: Fix hibernation return address corruption
    Rafael J. Wysocki committed Jul 29, 2016
  9. Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    …/git/egtvedt/linux-avr32
    
    Pull AVR32 updates from Hans-Christian Noren Egtvedt.
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/egtvedt/linux-avr32:
      avr32: off by one in at32_init_pio()
      avr32: fixup code style in unistd.h and syscall_table.S
      avr32: wire up preadv2 and pwritev2 syscalls
    committed Jul 29, 2016
  10. Merge branch 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm

    Pull ARM updates from Russell King:
     "Included in this update are:
    
       - Patches from Gregory Clement to fix the coherent DMA cases in our
         dma-mapping code.
    
       - A number of CPU errata updates and fixes.
    
       - ARM cpuidle improvements from Jisheng Zhang.
    
       - Fix from Kees for the location of _etext.
    
       - Cleanups from Masahiro Yamada to avoid duplicated messages during
         the kernel build, and remove CONFIG_ARCH_HAS_BARRIERS.
    
       - Remove a udelay loop limitation, allowing for faster CPUs to
         calibrate the delay correctly.
    
       - Cleanup some left-overs from the SW PAN implementation.
    
       - Ensure that a modified address limit is not visible to exception
         handlers"
    
    * 'for-linus' of git://git.armlinux.org.uk/~rmk/linux-arm: (21 commits)
      ARM: 8586/1: cpuidle: make arm_cpuidle_suspend() a bit more efficient
      ARM: 8585/1: cpuidle: fix !cpuidle_ops[cpu].init case during init
      ARM: 8561/4: dma-mapping: Fix the coherent case when iommu is used
      ARM: 8561/3: dma-mapping: Don't use outer_flush_range when the L2C is coherent
      ARM: 8560/1: errata: Workaround errata A12 825619 / A17 852421
      ARM: 8559/1: errata: Workaround erratum A12 821420
      ARM: 8558/1: errata: Workaround errata A12 818325/852422 A17 852423
      ARM: save and reset the address limit when entering an exception
      ARM: 8577/1: Fix Cortex-A15 798181 errata initialization
      ARM: 8584/1: floppy: avoid gcc-6 warning
      ARM: 8583/1: mm: fix location of _etext
      ARM: 8582/1: remove unused CONFIG_ARCH_HAS_BARRIERS
      ARM: 8306/1: loop_udelay: remove bogomips value limitation
      ARM: 8581/1: add missing <asm/prom.h> to arch/arm/kernel/devtree.c
      ARM: 8576/1: avoid duplicating "Kernel: arch/arm/boot/*Image is ready"
      ARM: 8556/1: on a generic DT system: do not touch l2x0
      ARM: uaccess: remove put_user() code duplication
      ARM: 8580/1: Remove orphaned __addr_ok() definition
      ARM: get rid of horrible *(unsigned int *)(regs + 1)
      ARM: introduce svc_pt_regs structure
      ...
    committed Jul 29, 2016
  11. Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel…

    …/git/mszeredi/fuse
    
    Pull fuse updates from Miklos Szeredi:
     "This fixes error propagation from writeback to fsync/close for
      writeback cache mode as well as adding a missing capability flag to
      the INIT message.  The rest are cleanups.
    
      (The commits are recent but all the code actually sat in -next for a
      while now.  The recommits are due to conflict avoidance and the
      addition of Cc: stable@...)"
    
    * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/fuse:
      fuse: use filemap_check_errors()
      mm: export filemap_check_errors() to modules
      fuse: fix wrong assignment of ->flags in fuse_send_init()
      fuse: fuse_flush must check mapping->flags for errors
      fuse: fsync() did not return IO errors
      fuse: don't mess with blocking signals
      new helper: wait_event_killable_exclusive()
      fuse: improve aio directIO write performance for size extending writes
    committed Jul 29, 2016
  12. Revert "vfs: add lookup_hash() helper"

    This reverts commit 3c9fe8c.
    
    As Miklos points out in commit c1b2cc1, the "lookup_hash()" helper
    is now unused, and in fact, with the hash salting changes, since the
    hash of a dentry name now depends on the directory dentry it is in, the
    helper function isn't even really likely to be useful.
    
    So rather than keep it around in case somebody else might end up finding
    a use for it, let's just remove the helper and not trick people into
    thinking it might be a useful thing.
    
    For example, I had obviously completely missed how the helper didn't
    follow the normal dentry hashing patterns, and how the hash salting
    patch broke overlayfs.  Things would quietly build and look sane, but
    not work.
    
    Suggested-by: Miklos Szeredi <mszeredi@redhat.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    committed Jul 29, 2016
  13. Merge branch 'overlayfs-linus' of git://git.kernel.org/pub/scm/linux/…

    …kernel/git/mszeredi/vfs
    
    Pull overlayfs update from Miklos Szeredi:
     "First of all, this fixes a regression in overlayfs introduced by the
      dentry hash salting.  I've moved the patch fixing this to the front of
      the queue, so if (god forbid) something needs to be bisected in
      overlayfs this regression won't interfere with that.
    
      The biggest part is preparation for selinux support, done by Vivek
      Goyal.  Essentially this makes all operations on underlying
      filesystems be done with credentials of mounter.  This makes
      everything nicely consistent.
    
      There are also fixes for a number of known and recently discovered
      non-standard behavior (thanks to Eryu Guan for testing and improving
      the test suites)"
    
    * 'overlayfs-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mszeredi/vfs: (23 commits)
      ovl: simplify empty checking
      qstr: constify instances in overlayfs
      ovl: clear nlink on rmdir
      ovl: disallow overlayfs as upperdir
      ovl: fix warning
      ovl: remove duplicated include from super.c
      ovl: append MAY_READ when diluting write checks
      ovl: dilute permission checks on lower only if not special file
      ovl: fix POSIX ACL setting
      ovl: share inode for hard link
      ovl: store real inode pointer in ->i_private
      ovl: permission: return ECHILD instead of ENOENT
      ovl: update atime on upper
      ovl: fix sgid on directory
      ovl: simplify permission checking
      ovl: do not require mounter to have MAY_WRITE on lower
      ovl: do operations on underlying file system in mounter's context
      ovl: modify ovl_permission() to do checks on two inodes
      ovl: define ->get_acl() for overlay inodes
      ovl: move some common code in a function
      ...
    committed Jul 29, 2016
  14. Merge tag 'freevxfs-for-4.8' of git://git.infradead.org/users/hch/fre…

    …evxfs
    
    Pull freevxfs updates from Christoph Hellwig:
     "Support for foreign endianess and HP-UP superblocks from
      Krzysztof Błaszkowski"
    
    * tag 'freevxfs-for-4.8' of git://git.infradead.org/users/hch/freevxfs:
      freevxfs: update Kconfig information
      freevxfs: refactor readdir and lookup code
      freevxfs: fix lack of inode initialization
      freevxfs: fix memory leak in vxfs_read_fshead()
      freevxfs: update documentation and cresdits for HP-UX support
      freevxfs: implement ->alloc_inode and ->destroy_inode
      freevxfs: avoid the need for forward declaring the super operations
      freevxfs: move VFS inode allocation into vxfs_blkiget and vxfs_stiget
      freevxfs: remove vxfs_put_fake_inode
      freevxfs: handle big endian HP-UX file systems
    committed Jul 29, 2016
  15. Merge tag 'configfs-for-4.8' of git://git.infradead.org/users/hch/con…

    …figfs
    
    Pull configfs update from Christoph Hellwig:
     "A simple error handling fix from Tal Shorer"
    
    * tag 'configfs-for-4.8' of git://git.infradead.org/users/hch/configfs:
      configfs: don't set buffer_needs_fill to zero if show() returns error
    committed Jul 29, 2016
  16. Merge branch 'for-next' of git://git.samba.org/sfrench/cifs-2.6

    Pull CIFS/SMB3 fixes from Steve French:
     "Various CIFS/SMB3 fixes, most for stable"
    
    * 'for-next' of git://git.samba.org/sfrench/cifs-2.6:
      CIFS: Fix a possible invalid memory access in smb2_query_symlink()
      fs/cifs: make share unaccessible at root level mountable
      cifs: fix crash due to race in hmac(md5) handling
      cifs: unbreak TCP session reuse
      cifs: Check for existing directory when opening file with O_CREAT
      Add MF-Symlinks support for SMB 2.0
    committed Jul 29, 2016
  17. @davem330

    sparc64: Trim page tables for 8M hugepages

    For PMD aligned (8M) hugepages, we currently allocate
    all four page table levels which is wasteful. We now
    allocate till PMD level only which saves memory usage
    from page tables.
    
    Also, when freeing page table for 8M hugepage backed region,
    make sure we don't try to access non-existent PTE level.
    
    Orabug: 22630259
    
    Signed-off-by: Nitin Gupta <nitin.m.gupta@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Nitin Gupta committed with davem330 Jul 29, 2016
  18. fuse: use filemap_check_errors()

    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  19. mm: export filemap_check_errors() to modules

    Can be used by fuse, btrfs and f2fs to replace opencoded variants.
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  20. @FWei-HW

    fuse: fix wrong assignment of ->flags in fuse_send_init()

    FUSE_HAS_IOCTL_DIR should be assigned to ->flags, it may be a typo.
    
    Signed-off-by: Wei Fang <fangwei1@huawei.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Fixes: 69fe05c ("fuse: add missing INIT flags")
    Cc: <stable@vger.kernel.org>
    FWei-HW committed with Miklos Szeredi Jul 25, 2016
  21. fuse: fuse_flush must check mapping->flags for errors

    fuse_flush() calls write_inode_now() that triggers writeback, but actual
    writeback will happen later, on fuse_sync_writes(). If an error happens,
    fuse_writepage_end() will set error bit in mapping->flags. So, we have to
    check mapping->flags after fuse_sync_writes().
    
    Signed-off-by: Maxim Patlasov <mpatlasov@virtuozzo.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Fixes: 4d99ff8 ("fuse: Turn writeback cache on")
    Cc: <stable@vger.kernel.org> # v3.15+
    Maxim Patlasov committed with Miklos Szeredi Jul 19, 2016
  22. fuse: fsync() did not return IO errors

    Due to implementation of fuse writeback filemap_write_and_wait_range() does
    not catch errors. We have to do this directly after fuse_sync_writes()
    
    Signed-off-by: Alexey Kuznetsov <kuznet@virtuozzo.com>
    Signed-off-by: Maxim Patlasov <mpatlasov@virtuozzo.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Fixes: 4d99ff8 ("fuse: Turn writeback cache on")
    Cc: <stable@vger.kernel.org> # v3.15+
    Alexey Kuznetsov committed with Miklos Szeredi Jul 19, 2016
  23. @jpoimboe

    x86/power/64: Fix hibernation return address corruption

    In kernel bug 150021, a kernel panic was reported when restoring a
    hibernate image.  Only a picture of the oops was reported, so I can't
    paste the whole thing here.  But here are the most interesting parts:
    
      kernel tried to execute NX-protected page - exploit attempt? (uid: 0)
      BUG: unable to handle kernel paging request at ffff8804615cfd78
      ...
      RIP: ffff8804615cfd78
      RSP: ffff8804615f0000
      RBP: ffff8804615cfdc0
      ...
      Call Trace:
       do_signal+0x23
       exit_to_usermode_loop+0x64
       ...
    
    The RIP is on the same page as RBP, so it apparently started executing
    on the stack.
    
    The bug was bisected to commit ef0f3ed (x86/asm/power: Create
    stack frames in hibernate_asm_64.S), which in retrospect seems quite
    dangerous, since that code saves and restores the stack pointer from a
    global variable ('saved_context').
    
    There are a lot of moving parts in the hibernate save and restore paths,
    so I don't know exactly what caused the panic.  Presumably, a FRAME_END
    was executed without the corresponding FRAME_BEGIN, or vice versa.  That
    would corrupt the return address on the stack and would be consistent
    with the details of the above panic.
    
    [ rjw: One major problem is that by the time the FRAME_BEGIN in
      restore_registers() is executed, the stack pointer value may not
      be valid any more.  Namely, the stack area pointed to by it
      previously may have been overwritten by some image memory contents
      and that page frame may now be used for whatever different purpose
      it had been allocated for before hibernation.  In that case, the
      FRAME_BEGIN will corrupt that memory. ]
    
    Instead of doing the frame pointer save/restore around the bounds of the
    affected functions, just do it around the call to swsusp_save().
    
    That has the same effect of ensuring that if swsusp_save() sleeps, the
    frame pointers will be correct.  It's also a much more obviously safe
    way to do it than the original patch.  And objtool still doesn't report
    any warnings.
    
    Fixes: ef0f3ed (x86/asm/power: Create stack frames in hibernate_asm_64.S)
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=150021
    Cc: 4.6+ <stable@vger.kernel.org> # 4.6+
    Reported-by: Andre Reinke <andre.reinke@mailbox.org>
    Tested-by: Andre Reinke <andre.reinke@mailbox.org>
    Signed-off-by: Josh Poimboeuf <jpoimboe@redhat.com>
    Acked-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    jpoimboe committed with Rafael J. Wysocki Jul 28, 2016
  24. ovl: simplify empty checking

    The empty checking logic is duplicated in ovl_check_empty_and_clear() and
    ovl_remove_and_whiteout(), except the condition for clearing whiteouts is
    different:
    
    ovl_check_empty_and_clear() checked for being upper
    
    ovl_remove_and_whiteout() checked for merge OR lower
    
    Move the intersection of those checks (upper AND merge) into
    ovl_check_empty_and_clear() and simplify ovl_remove_and_whiteout().
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  25. qstr: constify instances in overlayfs

    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Al Viro committed with Miklos Szeredi Jul 20, 2016
  26. ovl: clear nlink on rmdir

    To make delete notification work on fa/inotify.
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  27. ovl: disallow overlayfs as upperdir

    This does not work and does not make sense.  So instead of fixing it
    (probably not hard) just disallow.
    
    Reported-by: Andrei Vagin <avagin@gmail.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Cc: <stable@vger.kernel.org>
    Miklos Szeredi committed Jul 29, 2016
  28. ovl: fix warning

    There's a superfluous newline in the warning message in ovl_d_real().
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  29. ovl: remove duplicated include from super.c

    Remove duplicated include.
    
    Signed-off-by: Wei Yongjun <yongjun_wei@trendmicro.com.cn>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Wei Yongjun committed with Miklos Szeredi Jul 6, 2016
  30. @rhvgoyal

    ovl: append MAY_READ when diluting write checks

    Right now we remove MAY_WRITE/MAY_APPEND bits from mask if realfile is on
    lower/. This is done as files on lower will never be written and will be
    copied up. But to copy up a file, mounter should have MAY_READ permission
    otherwise copy up will fail. So set MAY_READ in mask when MAY_WRITE is
    reset.
    
    Dan Walsh noticed this when he did access(lowerfile, W_OK) and it returned
    True (context mounts) but when he tried to actually write to file, it
    failed as mounter did not have permission on lower file.
    
    [SzM] don't set MAY_READ if only MAY_APPEND is set without MAY_WRITE; this
    won't trigger a copy-up.
    
    Reported-by: Dan Walsh <dwalsh@redhat.com>
    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    rhvgoyal committed with Miklos Szeredi Jul 13, 2016
  31. @rhvgoyal

    ovl: dilute permission checks on lower only if not special file

    Right now if file is on lower/, we remove MAY_WRITE/MAY_APPEND bits from
    mask as lower/ will never be written and file will be copied up. But this
    is not true for special files. These files are not copied up and are opened
    in place. So don't dilute the checks for these types of files.
    
    Reported-by: Dan Walsh <dwalsh@redhat.com>
    Signed-off-by: Vivek Goyal <vgoyal@redhat.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    rhvgoyal committed with Miklos Szeredi Jul 13, 2016
  32. ovl: fix POSIX ACL setting

    Setting POSIX ACL needs special handling:
    
    1) Some permission checks are done by ->setxattr() which now uses mounter's
    creds ("ovl: do operations on underlying file system in mounter's
    context").  These permission checks need to be done with current cred as
    well.
    
    2) Setting ACL can fail for various reasons.  We do not need to copy up in
    these cases.
    
    In the mean time switch to using generic_setxattr.
    
    [Arnd Bergmann] Fix link error without POSIX ACL. posix_acl_from_xattr()
    doesn't have a 'static inline' implementation when CONFIG_FS_POSIX_ACL is
    disabled, and I could not come up with an obvious way to do it.
    
    This instead avoids the link error by defining two sets of ACL operations
    and letting the compiler drop one of the two at compile time depending
    on CONFIG_FS_POSIX_ACL. This avoids all references to the ACL code,
    also leading to smaller code.
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  33. ovl: share inode for hard link

    Inode attributes are copied up to overlay inode (uid, gid, mode, atime,
    mtime, ctime) so generic code using these fields works correcty.  If a hard
    link is created in overlayfs separate inodes are allocated for each link.
    If chmod/chown/etc. is performed on one of the links then the inode
    belonging to the other ones won't be updated.
    
    This patch attempts to fix this by sharing inodes for hard links.
    
    Use inode hash (with real inode pointer as a key) to make sure overlay
    inodes are shared for hard links on upper.  Hard links on lower are still
    split (which is not user observable until the copy-up happens, see
    Documentation/filesystems/overlayfs.txt under "Non-standard behavior").
    
    The inode is only inserted in the hash if it is non-directoy and upper.
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  34. ovl: store real inode pointer in ->i_private

    To get from overlay inode to real inode we currently use 'struct
    ovl_entry', which has lifetime connected to overlay dentry.  This is okay,
    since each overlay dentry had a new overlay inode allocated.
    
    Following patch will break that assumption, so need to leave out ovl_entry.
    This patch stores the real inode directly in i_private, with the lowest bit
    used to indicate whether the inode is upper or lower.
    
    Lifetime rules remain, using ovl_inode_real() must only be done while
    caller holds ref on overlay dentry (and hence on real dentry), or within
    RCU protected regions.
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016
  35. ovl: permission: return ECHILD instead of ENOENT

    The error is due to RCU and is temporary.
    
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Miklos Szeredi committed Jul 29, 2016