commit 5cd35f3eb5384f30d1a10d87f088bacd8839c22b
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Tue Apr 24 09:34:18 2018 +0200

    Linux 4.9.96

commit 8d7f1fde9d8df8ae9393c6902470222305ac03b0
Author: Wanpeng Li <wanpeng.li@hotmail.com>
Date:   Sun May 7 00:14:22 2017 -0700

    block/mq: fix potential deadlock during cpu hotplug
    
    commit 51d638b1f56a0bfd9219800620994794a1a2b219 upstream.
    
    This can be triggered by hot-unplug one cpu.
    
    ======================================================
     [ INFO: possible circular locking dependency detected ]
     4.11.0+ #17 Not tainted
     -------------------------------------------------------
     step_after_susp/2640 is trying to acquire lock:
      (all_q_mutex){+.+...}, at: [<ffffffffb33f95b8>] blk_mq_queue_reinit_work+0x18/0x110
    
     but task is already holding lock:
      (cpu_hotplug.lock){+.+.+.}, at: [<ffffffffb306d04f>] cpu_hotplug_begin+0x7f/0xe0
    
     which lock already depends on the new lock.
    
     the existing dependency chain (in reverse order) is:
    
     -> #1 (cpu_hotplug.lock){+.+.+.}:
            lock_acquire+0x11c/0x230
            __mutex_lock+0x92/0x990
            mutex_lock_nested+0x1b/0x20
            get_online_cpus+0x64/0x80
            blk_mq_init_allocated_queue+0x3a0/0x4e0
            blk_mq_init_queue+0x3a/0x60
            loop_add+0xe5/0x280
            loop_init+0x124/0x177
            do_one_initcall+0x53/0x1c0
            kernel_init_freeable+0x1e3/0x27f
            kernel_init+0xe/0x100
            ret_from_fork+0x31/0x40
    
     -> #0 (all_q_mutex){+.+...}:
            __lock_acquire+0x189a/0x18a0
            lock_acquire+0x11c/0x230
            __mutex_lock+0x92/0x990
            mutex_lock_nested+0x1b/0x20
            blk_mq_queue_reinit_work+0x18/0x110
            blk_mq_queue_reinit_dead+0x1c/0x20
            cpuhp_invoke_callback+0x1f2/0x810
            cpuhp_down_callbacks+0x42/0x80
            _cpu_down+0xb2/0xe0
            freeze_secondary_cpus+0xb6/0x390
            suspend_devices_and_enter+0x3b3/0xa40
            pm_suspend+0x129/0x490
            state_store+0x82/0xf0
            kobj_attr_store+0xf/0x20
            sysfs_kf_write+0x45/0x60
            kernfs_fop_write+0x135/0x1c0
            __vfs_write+0x37/0x160
            vfs_write+0xcd/0x1d0
            SyS_write+0x58/0xc0
            do_syscall_64+0x8f/0x710
            return_from_SYSCALL_64+0x0/0x7a
    
     other info that might help us debug this:
    
      Possible unsafe locking scenario:
    
            CPU0                    CPU1
            ----                    ----
       lock(cpu_hotplug.lock);
                                    lock(all_q_mutex);
                                    lock(cpu_hotplug.lock);
       lock(all_q_mutex);
    
      *** DEADLOCK ***
    
     8 locks held by step_after_susp/2640:
      #0:  (sb_writers#6){.+.+.+}, at: [<ffffffffb3244aed>] vfs_write+0x1ad/0x1d0
      #1:  (&of->mutex){+.+.+.}, at: [<ffffffffb32d3a51>] kernfs_fop_write+0x101/0x1c0
      #2:  (s_active#166){.+.+.+}, at: [<ffffffffb32d3a59>] kernfs_fop_write+0x109/0x1c0
      #3:  (pm_mutex){+.+...}, at: [<ffffffffb30d2ecd>] pm_suspend+0x21d/0x490
      #4:  (acpi_scan_lock){+.+.+.}, at: [<ffffffffb34dc3d7>] acpi_scan_lock_acquire+0x17/0x20
      #5:  (cpu_add_remove_lock){+.+.+.}, at: [<ffffffffb306d6d7>] freeze_secondary_cpus+0x27/0x390
      #6:  (cpu_hotplug.dep_map){++++++}, at: [<ffffffffb306cfd5>] cpu_hotplug_begin+0x5/0xe0
      #7:  (cpu_hotplug.lock){+.+.+.}, at: [<ffffffffb306d04f>] cpu_hotplug_begin+0x7f/0xe0
    
     stack backtrace:
     CPU: 3 PID: 2640 Comm: step_after_susp Not tainted 4.11.0+ #17
     Hardware name: Dell Inc. OptiPlex 7040/0JCTF8, BIOS 1.4.9 09/12/2016
     Call Trace:
      dump_stack+0x99/0xce
      print_circular_bug+0x1fa/0x270
      __lock_acquire+0x189a/0x18a0
      lock_acquire+0x11c/0x230
      ? lock_acquire+0x11c/0x230
      ? blk_mq_queue_reinit_work+0x18/0x110
      ? blk_mq_queue_reinit_work+0x18/0x110
      __mutex_lock+0x92/0x990
      ? blk_mq_queue_reinit_work+0x18/0x110
      ? kmem_cache_free+0x2cb/0x330
      ? anon_transport_class_unregister+0x20/0x20
      ? blk_mq_queue_reinit_work+0x110/0x110
      mutex_lock_nested+0x1b/0x20
      ? mutex_lock_nested+0x1b/0x20
      blk_mq_queue_reinit_work+0x18/0x110
      blk_mq_queue_reinit_dead+0x1c/0x20
      cpuhp_invoke_callback+0x1f2/0x810
      ? __flow_cache_shrink+0x160/0x160
      cpuhp_down_callbacks+0x42/0x80
      _cpu_down+0xb2/0xe0
      freeze_secondary_cpus+0xb6/0x390
      suspend_devices_and_enter+0x3b3/0xa40
      ? rcu_read_lock_sched_held+0x79/0x80
      pm_suspend+0x129/0x490
      state_store+0x82/0xf0
      kobj_attr_store+0xf/0x20
      sysfs_kf_write+0x45/0x60
      kernfs_fop_write+0x135/0x1c0
      __vfs_write+0x37/0x160
      ? rcu_read_lock_sched_held+0x79/0x80
      ? rcu_sync_lockdep_assert+0x2f/0x60
      ? __sb_start_write+0xd9/0x1c0
      ? vfs_write+0x1ad/0x1d0
      vfs_write+0xcd/0x1d0
      SyS_write+0x58/0xc0
      ? rcu_read_lock_sched_held+0x79/0x80
      do_syscall_64+0x8f/0x710
      ? trace_hardirqs_on_thunk+0x1a/0x1c
      entry_SYSCALL64_slow_path+0x25/0x25
    
    The cpu hotplug path will hold cpu_hotplug.lock and then reinit all exiting
    queues for blk mq w/ all_q_mutex, however, blk_mq_init_allocated_queue() will
    contend these two locks in the inversion order. This is due to commit eabe06595d62
    (blk/mq: Cure cpu hotplug lock inversion), it fixes a cpu hotplug lock inversion
    issue because of hotplug rework, however the hotplug rework is still work-in-progress
    and lives in a -tip branch and mainline cannot yet trigger that splat. The commit
    breaks the linus's tree in the merge window, so this patch reverts the lock order
    and avoids to splat linus's tree.
    
    Cc: Jens Axboe <axboe@kernel.dk>
    Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: Jens Axboe <axboe@fb.com>
    Cc: Thierry Escande <thierry.escande@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 18484eb932e2bdbdab83700c6d7d68f9f743f4c8
Author: Greg Thelen <gthelen@google.com>
Date:   Fri Apr 20 14:55:42 2018 -0700

    writeback: safer lock nesting
    
    commit 2e898e4c0a3897ccd434adac5abb8330194f527b upstream.
    
    lock_page_memcg()/unlock_page_memcg() use spin_lock_irqsave/restore() if
    the page's memcg is undergoing move accounting, which occurs when a
    process leaves its memcg for a new one that has
    memory.move_charge_at_immigrate set.
    
    unlocked_inode_to_wb_begin,end() use spin_lock_irq/spin_unlock_irq() if
    the given inode is switching writeback domains.  Switches occur when
    enough writes are issued from a new domain.
    
    This existing pattern is thus suspicious:
        lock_page_memcg(page);
        unlocked_inode_to_wb_begin(inode, &locked);
        ...
        unlocked_inode_to_wb_end(inode, locked);
        unlock_page_memcg(page);
    
    If both inode switch and process memcg migration are both in-flight then
    unlocked_inode_to_wb_end() will unconditionally enable interrupts while
    still holding the lock_page_memcg() irq spinlock.  This suggests the
    possibility of deadlock if an interrupt occurs before unlock_page_memcg().
    
        truncate
        __cancel_dirty_page
        lock_page_memcg
        unlocked_inode_to_wb_begin
        unlocked_inode_to_wb_end
        <interrupts mistakenly enabled>
                                        <interrupt>
                                        end_page_writeback
                                        test_clear_page_writeback
                                        lock_page_memcg
                                        <deadlock>
        unlock_page_memcg
    
    Due to configuration limitations this deadlock is not currently possible
    because we don't mix cgroup writeback (a cgroupv2 feature) and
    memory.move_charge_at_immigrate (a cgroupv1 feature).
    
    If the kernel is hacked to always claim inode switching and memcg
    moving_account, then this script triggers lockup in less than a minute:
    
      cd /mnt/cgroup/memory
      mkdir a b
      echo 1 > a/memory.move_charge_at_immigrate
      echo 1 > b/memory.move_charge_at_immigrate
      (
        echo $BASHPID > a/cgroup.procs
        while true; do
          dd if=/dev/zero of=/mnt/big bs=1M count=256
        done
      ) &
      while true; do
        sync
      done &
      sleep 1h &
      SLEEP=$!
      while true; do
        echo $SLEEP > a/cgroup.procs
        echo $SLEEP > b/cgroup.procs
      done
    
    The deadlock does not seem possible, so it's debatable if there's any
    reason to modify the kernel.  I suggest we should to prevent future
    surprises.  And Wang Long said "this deadlock occurs three times in our
    environment", so there's more reason to apply this, even to stable.
    Stable 4.4 has minor conflicts applying this patch.  For a clean 4.4 patch
    see "[PATCH for-4.4] writeback: safer lock nesting"
    https://lkml.org/lkml/2018/4/11/146
    
    Wang Long said "this deadlock occurs three times in our environment"
    
    [gthelen@google.com: v4]
      Link: http://lkml.kernel.org/r/20180411084653.254724-1-gthelen@google.com
    [akpm@linux-foundation.org: comment tweaks, struct initialization simplification]
    Change-Id: Ibb773e8045852978f6207074491d262f1b3fb613
    Link: http://lkml.kernel.org/r/20180410005908.167976-1-gthelen@google.com
    Fixes: 682aa8e1a6a1 ("writeback: implement unlocked_inode_to_wb transaction and use it for stat updates")
    Signed-off-by: Greg Thelen <gthelen@google.com>
    Reported-by: Wang Long <wanglong19@meituan.com>
    Acked-by: Wang Long <wanglong19@meituan.com>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: <stable@vger.kernel.org>    [v4.2+]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [natechancellor: Adjust context due to lack of b93b016313b3b]
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 71f24a91305670bb4f22f214608c2e75aa45f99e
Author: Amir Goldstein <amir73il@gmail.com>
Date:   Wed Apr 4 23:42:18 2018 +0300

    fanotify: fix logic of events on child
    
    commit 54a307ba8d3cd00a3902337ffaae28f436eeb1a4 upstream.
    
    When event on child inodes are sent to the parent inode mark and
    parent inode mark was not marked with FAN_EVENT_ON_CHILD, the event
    will not be delivered to the listener process. However, if the same
    process also has a mount mark, the event to the parent inode will be
    delivered regadless of the mount mark mask.
    
    This behavior is incorrect in the case where the mount mark mask does
    not contain the specific event type. For example, the process adds
    a mark on a directory with mask FAN_MODIFY (without FAN_EVENT_ON_CHILD)
    and a mount mark with mask FAN_CLOSE_NOWRITE (without FAN_ONDIR).
    
    A modify event on a file inside that directory (and inside that mount)
    should not create a FAN_MODIFY event, because neither of the marks
    requested to get that event on the file.
    
    Fixes: 1968f5eed54c ("fanotify: use both marks when possible")
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Amir Goldstein <amir73il@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    [natechancellor: Fix small conflict due to lack of 3cd5eca8d7a2f]
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f4c86fa0e2c3ed3eb4fbbb145ce9dabeec12c2c7
Author: Matthew Wilcox <mawilcox@microsoft.com>
Date:   Fri Apr 20 14:56:20 2018 -0700

    mm/filemap.c: fix NULL pointer in page_cache_tree_insert()
    
    commit abc1be13fd113ddef5e2d807a466286b864caed3 upstream.
    
    f2fs specifies the __GFP_ZERO flag for allocating some of its pages.
    Unfortunately, the page cache also uses the mapping's GFP flags for
    allocating radix tree nodes.  It always masked off the __GFP_HIGHMEM
    flag, and masks off __GFP_ZERO in some paths, but not all.  That causes
    radix tree nodes to be allocated with a NULL list_head, which causes
    backtraces like:
    
      __list_del_entry+0x30/0xd0
      list_lru_del+0xac/0x1ac
      page_cache_tree_insert+0xd8/0x110
    
    The __GFP_DMA and __GFP_DMA32 flags would also be able to sneak through
    if they are ever used.  Fix them all by using GFP_RECLAIM_MASK at the
    innermost location, and remove it from earlier in the callchain.
    
    Link: http://lkml.kernel.org/r/20180411060320.14458-2-willy@infradead.org
    Fixes: 449dd6984d0e ("mm: keep page cache radix tree nodes in check")
    Signed-off-by: Matthew Wilcox <mawilcox@microsoft.com>
    Reported-by: Chris Fries <cfries@google.com>
    Debugged-by: Minchan Kim <minchan@kernel.org>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 858052b1f2f2d6a07af920b670a31fc8d5043755
Author: Ian Kent <raven@themaw.net>
Date:   Fri Apr 20 14:55:59 2018 -0700

    autofs: mount point create should honour passed in mode
    
    commit 1e6306652ba18723015d1b4967fe9de55f042499 upstream.
    
    The autofs file system mkdir inode operation blindly sets the created
    directory mode to S_IFDIR | 0555, ingoring the passed in mode, which can
    cause selinux dac_override denials.
    
    But the function also checks if the caller is the daemon (as no-one else
    should be able to do anything here) so there's no point in not honouring
    the passed in mode, allowing the daemon to set appropriate mode when
    required.
    
    Link: http://lkml.kernel.org/r/152361593601.8051.14014139124905996173.stgit@pluto.themaw.net
    Signed-off-by: Ian Kent <raven@themaw.net>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3f68e22e9bd1f06a0b752c742bfab530fcd8bd74
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Apr 19 22:03:08 2018 -0400

    Don't leak MNT_INTERNAL away from internal mounts
    
    commit 16a34adb9392b2fe4195267475ab5b472e55292c upstream.
    
    We want it only for the stuff created by SB_KERNMOUNT mounts, *not* for
    their copies.  As it is, creating a deep stack of bindings of /proc/*/ns/*
    somewhere in a new namespace and exiting yields a stack overflow.
    
    Cc: stable@kernel.org
    Reported-by: Alexander Aring <aring@mojatatu.com>
    Bisected-by: Kirill Tkhai <ktkhai@virtuozzo.com>
    Tested-by: Kirill Tkhai <ktkhai@virtuozzo.com>
    Tested-by: Alexander Aring <aring@mojatatu.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 463f845986289852fa7a38a5ae78216a64b569c6
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Tue Apr 3 01:15:46 2018 -0400

    rpc_pipefs: fix double-dput()
    
    commit 4a3877c4cedd95543f8726b0a98743ed8db0c0fb upstream.
    
    if we ever hit rpc_gssd_dummy_depopulate() dentry passed to
    it has refcount equal to 1.  __rpc_rmpipe() drops it and
    dput() done after that hits an already freed dentry.
    
    Cc: stable@kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e2210c5414a8e05e14c5864180ec215dec343828
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Tue Apr 3 00:13:17 2018 -0400

    orangefs_kill_sb(): deal with allocation failures
    
    commit 659038428cb43a66e3eff71e2c845c9de3611a98 upstream.
    
    orangefs_fill_sb() might've failed to allocate ORANGEFS_SB(s); don't
    oops in that case.
    
    Cc: stable@kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f3ba3eaaee8bc8c07d58d2a6050f9892ba01c306
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Mon Apr 2 23:50:31 2018 -0400

    hypfs_kill_super(): deal with failed allocations
    
    commit a24cd490739586a7d2da3549a1844e1d7c4f4fc4 upstream.
    
    hypfs_fill_super() might fail to allocate sbi; hypfs_kill_super()
    should not oops on that.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 02d20e670e6ba449ff2d75c3c91771b68543bb71
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Mon Apr 2 23:56:44 2018 -0400

    jffs2_kill_sb(): deal with failed allocations
    
    commit c66b23c2840446a82c389e4cb1a12eb2a71fa2e4 upstream.
    
    jffs2_fill_super() might fail to allocate jffs2_sb_info;
    jffs2_kill_sb() must survive that.
    
    Cc: stable@kernel.org
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8c72cf489860f43bc974de9ecbc594c567bbe49a
Author: Jan Kara <jack@suse.cz>
Date:   Thu Apr 12 17:22:23 2018 +0200

    udf: Fix leak of UTF-16 surrogates into encoded strings
    
    commit 44f06ba8297c7e9dfd0e49b40cbe119113cca094 upstream.
    
    OSTA UDF specification does not mention whether the CS0 charset in case
    of two bytes per character encoding should be treated in UTF-16 or
    UCS-2. The sample code in the standard does not treat UTF-16 surrogates
    in any special way but on systems such as Windows which work in UTF-16
    internally, filenames would be treated as being in UTF-16 effectively.
    In Linux it is more difficult to handle characters outside of Base
    Multilingual plane (beyond 0xffff) as NLS framework works with 2-byte
    characters only. Just make sure we don't leak UTF-16 surrogates into the
    resulting string when loading names from the filesystem for now.
    
    CC: stable@vger.kernel.org # >= v4.6
    Reported-by: Mingye Wang <arthur200126@gmail.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 22578e220a870d7e677839eab207185faec3144a
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Mon Apr 16 23:25:19 2018 +1000

    powerpc/lib: Fix off-by-one in alternate feature patching
    
    commit b8858581febb050688e276b956796bc4a78299ed upstream.
    
    When we patch an alternate feature section, we have to adjust any
    relative branches that branch out of the alternate section.
    
    But currently we have a bug if we have a branch that points to past
    the last instruction of the alternate section, eg:
    
      FTR_SECTION_ELSE
      1:     b       2f
             or      6,6,6
      2:
      ALT_FTR_SECTION_END(...)
             nop
    
    This will result in a relative branch at 1 with a target that equals
    the end of the alternate section.
    
    That branch does not need adjusting when it's moved to the non-else
    location. Currently we do adjust it, resulting in a branch that goes
    off into the link-time location of the else section, which is junk.
    
    The fix is to not patch branches that have a target == end of the
    alternate section.
    
    Fixes: d20fe50a7b3c ("KVM: PPC: Book3S HV: Branch inside feature section")
    Fixes: 9b1a735de64c ("powerpc: Add logic to patch alternative feature sections")
    Cc: stable@vger.kernel.org # v2.6.27+
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 73de98fb50b077934776563c97b75d6f764a2066
Author: Michael Neuling <mikey@neuling.org>
Date:   Wed Apr 11 13:37:58 2018 +1000

    powerpc/eeh: Fix enabling bridge MMIO windows
    
    commit 13a83eac373c49c0a081cbcd137e79210fe78acd upstream.
    
    On boot we save the configuration space of PCIe bridges. We do this so
    when we get an EEH event and everything gets reset that we can restore
    them.
    
    Unfortunately we save this state before we've enabled the MMIO space
    on the bridges. Hence if we have to reset the bridge when we come back
    MMIO is not enabled and we end up taking an PE freeze when the driver
    starts accessing again.
    
    This patch forces the memory/MMIO and bus mastering on when restoring
    bridges on EEH. Ideally we'd do this correctly by saving the
    configuration space writes later, but that will have to come later in
    a larger EEH rewrite. For now we have this simple fix.
    
    The original bug can be triggered on a boston machine by doing:
      echo 0x8000000000000000 > /sys/kernel/debug/powerpc/PCI0001/err_injct_outbound
    On boston, this PHB has a PCIe switch on it.  Without this patch,
    you'll see two EEH events, 1 expected and 1 the failure we are fixing
    here. The second EEH event causes the anything under the PHB to
    disappear (i.e. the i40e eth).
    
    With this patch, only 1 EEH event occurs and devices properly recover.
    
    Fixes: 652defed4875 ("powerpc/eeh: Check PCIe link after reset")
    Cc: stable@vger.kernel.org # v3.11+
    Reported-by: Pridhiviraj Paidipeddi <ppaidipe@linux.vnet.ibm.com>
    Signed-off-by: Michael Neuling <mikey@neuling.org>
    Acked-by: Russell Currey <ruscur@russell.cc>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 95a9a529aeb82d88ca25449e1ebb25e5ecdafade
Author: Matt Redfearn <matt.redfearn@mips.com>
Date:   Tue Apr 17 16:40:00 2018 +0100

    MIPS: memset.S: Fix clobber of v1 in last_fixup
    
    commit c96eebf07692e53bf4dd5987510d8b550e793598 upstream.
    
    The label .Llast_fixup\@ is jumped to on page fault within the final
    byte set loop of memset (on < MIPSR6 architectures). For some reason, in
    this fault handler, the v1 register is randomly set to a2 & STORMASK.
    This clobbers v1 for the calling function. This can be observed with the
    following test code:
    
    static int __init __attribute__((optimize("O0"))) test_clear_user(void)
    {
      register int t asm("v1");
      char *test;
      int j, k;
    
      pr_info("\n\n\nTesting clear_user\n");
      test = vmalloc(PAGE_SIZE);
    
      for (j = 256; j < 512; j++) {
        t = 0xa5a5a5a5;
        if ((k = clear_user(test + PAGE_SIZE - 256, j)) != j - 256) {
            pr_err("clear_user (%px %d) returned %d\n", test + PAGE_SIZE - 256, j, k);
        }
        if (t != 0xa5a5a5a5) {
           pr_err("v1 was clobbered to 0x%x!\n", t);
        }
      }
    
      return 0;
    }
    late_initcall(test_clear_user);
    
    Which demonstrates that v1 is indeed clobbered (MIPS64):
    
    Testing clear_user
    v1 was clobbered to 0x1!
    v1 was clobbered to 0x2!
    v1 was clobbered to 0x3!
    v1 was clobbered to 0x4!
    v1 was clobbered to 0x5!
    v1 was clobbered to 0x6!
    v1 was clobbered to 0x7!
    
    Since the number of bytes that could not be set is already contained in
    a2, the andi placing a value in v1 is not necessary and actively
    harmful in clobbering v1.
    
    Reported-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: stable@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/19109/
    Signed-off-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6cd712bfbbf1957289ad906d4d6191c1a3fc31a1
Author: Matt Redfearn <matt.redfearn@mips.com>
Date:   Tue Apr 17 15:52:21 2018 +0100

    MIPS: memset.S: Fix return of __clear_user from Lpartial_fixup
    
    commit daf70d89f80c6e1772233da9e020114b1254e7e0 upstream.
    
    The __clear_user function is defined to return the number of bytes that
    could not be cleared. From the underlying memset / bzero implementation
    this means setting register a2 to that number on return. Currently if a
    page fault is triggered within the memset_partial block, the value
    loaded into a2 on return is meaningless.
    
    The label .Lpartial_fixup\@ is jumped to on page fault. In order to work
    out how many bytes failed to copy, the exception handler should find how
    many bytes left in the partial block (andi a2, STORMASK), add that to
    the partial block end address (a2), and subtract the faulting address to
    get the remainder. Currently it incorrectly subtracts the partial block
    start address (t1), which has additionally been clobbered to generate a
    jump target in memset_partial. Fix this by adding the block end address
    instead.
    
    This issue was found with the following test code:
          int j, k;
          for (j = 0; j < 512; j++) {
            if ((k = clear_user(NULL, j)) != j) {
               pr_err("clear_user (NULL %d) returned %d\n", j, k);
            }
          }
    Which now passes on Creator Ci40 (MIPS32) and Cavium Octeon II (MIPS64).
    
    Suggested-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: stable@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/19108/
    Signed-off-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7177f0b3a8585687abf28234edb80fe209ac2f62
Author: Matt Redfearn <matt.redfearn@mips.com>
Date:   Thu Mar 29 10:28:23 2018 +0100

    MIPS: memset.S: EVA & fault support for small_memset
    
    commit 8a8158c85e1e774a44fbe81106fa41138580dfd1 upstream.
    
    The MIPS kernel memset / bzero implementation includes a small_memset
    branch which is used when the region to be set is smaller than a long (4
    bytes on 32bit, 8 bytes on 64bit). The current small_memset
    implementation uses a simple store byte loop to write the destination.
    There are 2 issues with this implementation:
    
    1. When EVA mode is active, user and kernel address spaces may overlap.
    Currently the use of the sb instruction means kernel mode addressing is
    always used and an intended write to userspace may actually overwrite
    some critical kernel data.
    
    2. If the write triggers a page fault, for example by calling
    __clear_user(NULL, 2), instead of gracefully handling the fault, an OOPS
    is triggered.
    
    Fix these issues by replacing the sb instruction with the EX() macro,
    which will emit EVA compatible instuctions as required. Additionally
    implement a fault fixup for small_memset which sets a2 to the number of
    bytes that could not be cleared (as defined by __clear_user).
    
    Reported-by: Chuanhua Lei <chuanhua.lei@intel.com>
    Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: stable@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/18975/
    Signed-off-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1179774213638107fcaf8745435e39cd27babddb
Author: Matt Redfearn <matt.redfearn@mips.com>
Date:   Tue Apr 17 16:40:01 2018 +0100

    MIPS: uaccess: Add micromips clobbers to bzero invocation
    
    commit b3d7e55c3f886493235bfee08e1e5a4a27cbcce8 upstream.
    
    The micromips implementation of bzero additionally clobbers registers t7
    & t8. Specify this in the clobbers list when invoking bzero.
    
    Fixes: 26c5e07d1478 ("MIPS: microMIPS: Optimise 'memset' core library function.")
    Reported-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: <stable@vger.kernel.org> # 3.10+
    Patchwork: https://patchwork.linux-mips.org/patch/19110/
    Signed-off-by: James Hogan <jhogan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d385cc6917c4fb27f883694b5f53253a289b60c8
Author: Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
Date:   Fri Apr 6 01:09:36 2018 +0200

    HID: hidraw: Fix crash on HIDIOCGFEATURE with a destroyed device
    
    commit a955358d54695e4ad9f7d6489a7ac4d69a8fc711 upstream.
    
    Doing `ioctl(HIDIOCGFEATURE)` in a tight loop on a hidraw device
    and then disconnecting the device, or unloading the driver, can
    cause a NULL pointer dereference.
    
    When a hidraw device is destroyed it sets 0 to `dev->exist`.
    Most functions check 'dev->exist' before doing its work, but
    `hidraw_get_report()` was missing that check.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Rodrigo Rivas Costa <rodrigorivascosta@gmail.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1d49e2ab766df649c540959a96f1ab839471fbe8
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Wed Apr 11 16:32:17 2018 -0400

    random: add new ioctl RNDRESEEDCRNG
    
    commit d848e5f8e1ebdb227d045db55fe4f825e82965fa upstream.
    
    Add a new ioctl which forces the the crng to be reseeded.
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit befd00cfc189672adfdf6850cf460a7f53c56cf0
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Thu Apr 12 00:50:45 2018 -0400

    random: crng_reseed() should lock the crng instance that it is modifying
    
    commit 0bb29a849a6433b72e249eea7695477b02056e94 upstream.
    
    Reported-by: Jann Horn <jannh@google.com>
    Fixes: 1e7f583af67b ("random: make /dev/urandom scalable for silly...")
    Cc: stable@kernel.org # 4.8+
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jann Horn <jannh@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4dfb3442bb7e1fb80515df4a199ca5a7a8edf900
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Wed Apr 11 13:27:52 2018 -0400

    random: fix crng_ready() test
    
    commit 43838a23a05fbd13e47d750d3dfd77001536dd33 upstream.
    
    The crng_init variable has three states:
    
    0: The CRNG is not initialized at all
    1: The CRNG has a small amount of entropy, hopefully good enough for
       early-boot, non-cryptographical use cases
    2: The CRNG is fully initialized and we are sure it is safe for
       cryptographic use cases.
    
    The crng_ready() function should only return true once we are in the
    last state.  This addresses CVE-2018-1108.
    
    Reported-by: Jann Horn <jannh@google.com>
    Fixes: e192be9d9a30 ("random: replace non-blocking pool...")
    Cc: stable@kernel.org # 4.8+
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jann Horn <jannh@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2e2389a07923a888d6e22337391b08092f213416
Author: David Wang <davidwang@zhaoxin.com>
Date:   Mon Apr 16 17:48:09 2018 +0800

    ALSA: hda - New VIA controller suppor no-snoop path
    
    commit af52f9982e410edac21ca4b49563053ffc9da1eb upstream.
    
    This patch is used to tell kernel that new VIA HDAC controller also
    support no-snoop path.
    
    [ minor coding style fix by tiwai ]
    
    Signed-off-by: David Wang <davidwang@zhaoxin.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b291c272c1ff23206e8338444735e3825f757b35
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Apr 19 18:16:15 2018 +0200

    ALSA: rawmidi: Fix missing input substream checks in compat ioctls
    
    commit 8a56ef4f3ffba9ebf4967b61ef600b0a7ba10f11 upstream.
    
    Some rawmidi compat ioctls lack of the input substream checks
    (although they do check only for rfile->output).  This many eventually
    lead to an Oops as NULL substream is passed to the rawmidi core
    functions.
    
    Fix it by adding the proper checks before each function call.
    
    The bug was spotted by syzkaller.
    
    Reported-by: syzbot+f7a0348affc3b67bc617@syzkaller.appspotmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f93f5adacfd2cd1e4234b5c5fd6316124c728dc0
Author: Fabián Inostroza <soulsonceonfire@gmail.com>
Date:   Thu Apr 12 00:37:35 2018 -0300

    ALSA: line6: Use correct endpoint type for midi output
    
    commit 7ecb46e9ee9af18e304eb9e7d6804c59a408e846 upstream.
    
    Sending MIDI messages to a PODxt through the USB connection shows
    "usb_submit_urb failed" in dmesg and the message is not received by
    the POD.
    
    The error is caused because in the funcion send_midi_async() in midi.c
    there is a call to usb_sndbulkpipe() for endpoint 3 OUT, but the PODxt
    USB descriptor shows that this endpoint it's an interrupt endpoint.
    
    Patch tested with PODxt only.
    
    [ The bug has been present from the very beginning in the staging
      driver time, but Fixes below points to the commit moving to sound/
      directory so that the fix can be cleanly applied -- tiwai ]
    
    Fixes: 61864d844c29 ("ALSA: move line6 usb driver into sound/usb")
    Signed-off-by: Fabián Inostroza <fabianinostroza@udec.cl>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9607290a18352cba4a7d015d826c1ce40bdb25bb
Author: Paul Parsons <lost.distance@yahoo.com>
Date:   Sat Apr 2 12:32:30 2016 +0100

    drm/radeon: Fix PCIe lane width calculation
    
    commit 85e290d92b4b794d0c758c53007eb4248d385386 upstream.
    
    Two years ago I tried an AMD Radeon E8860 embedded GPU with the drm driver.
    The dmesg output included driver warnings about an invalid PCIe lane width.
    Tracking the problem back led to si_set_pcie_lane_width_in_smc().
    The calculation of the lane widths via ATOM_PPLIB_PCIE_LINK_WIDTH_MASK and
    ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT macros did not increment the resulting
    value, per the comment in pptable.h ("lanes - 1"), and per usage elsewhere.
    Applying the increment silenced the warnings.
    The code has not changed since, so either my analysis was incorrect or the
    bug has gone unnoticed. Hence submitting this as an RFC.
    
    Acked-by: Christian König <christian.koenig@amd.com>
    Acked-by: Chunming Zhou <david1.zhou@amd.com>
    Signed-off-by: Paul Parsons <lost.distance@yahoo.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7c320edaa4c8b5c864b11c5e5c51b9dfd36a19c4
Author: Marc Zyngier <marc.zyngier@arm.com>
Date:   Tue Feb 20 13:01:18 2018 +0000

    drm/rockchip: Clear all interrupts before requesting the IRQ
    
    commit 5f9e93fed4d45e9a8f84728aff1a8f2ab8922902 upstream.
    
    Calling request_irq() followed by disable_irq() is usually a bad idea,
    specially if the interrupt can be pending, and you're not yet in a
    position to handle it.
    
    This is exactly what happens on my kevin system when rebooting in a
    second kernel using kexec: Some interrupt is left pending from
    the previous kernel, and we take it too early, before disable_irq()
    could do anything.
    
    Let's clear the pending interrupts as we initialize the HW, and move
    the interrupt request after that point. This ensures that we're in
    a sane state when the interrupt is requested.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    [adapted to recent rockchip-drm changes]
    Signed-off-by: Heiko Stuebner <heiko@sntech.de>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180220130120.5254-2-marc.zyngier@arm.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit aab59482e65969b176e97bb6cff7e443d3115ec8
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Apr 2 12:29:26 2018 -0500

    drm/amdgpu: Fix PCIe lane width calculation
    
    commit 41212e2fe72b26ded7ed78224d9eab720c2891e2 upstream.
    
    The calculation of the lane widths via ATOM_PPLIB_PCIE_LINK_WIDTH_MASK and
    ATOM_PPLIB_PCIE_LINK_WIDTH_SHIFT macros did not increment the resulting
    value, per the comment in pptable.h ("lanes - 1"), and per usage elsewhere.
    Port of the radeon fix to amdgpu.
    
    Acked-by: Christian König <christian.koenig@amd.com>
    Acked-by: Chunming Zhou <david1.zhou@amd.com>
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=102553
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 267e6921ca7c7e776804a8be6aa53fca37d68fd6
Author: Bas Nieuwenhuizen <basni@chromium.org>
Date:   Wed Jan 31 13:58:55 2018 +0100

    drm/amdgpu: Fix always_valid bos multiple LRU insertions.
    
    commit a20ee0b1f8b42e2568f3a4408003d22b2dfcc706 upstream.
    
    If these bos are evicted and are in the validated list
    things blow up, so do not put them in there. Notably,
    that tries to add the bo to the LRU twice, which results
    in a BUG_ON in ttm_bo.c.
    
    While for the bo_list an alternative would be to not allow
    always valid bos in there, that does not work for the user
    fence.
    
    v2: Fixed whitespace issue pointed out by checkpatch.pl
    
    Signed-off-by: Bas Nieuwenhuizen <basni@chromium.org>
    Reviewed-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 54279928a84d5fc6f9e15d43ad31170c7eae1c1d
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Mar 21 21:05:46 2018 -0500

    drm/amdgpu: Add an ATPX quirk for hybrid laptop
    
    commit 13b40935cf64f59b93cf1c716a2033488e5a228c upstream.
    
    _PR3 doesn't seem to work properly, use ATPX instead.
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=104064
    Reviewed-by: Huang Rui <ray.huang@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 68e3579a5fef4b45e14802808476baac5797e741
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Thu Mar 29 22:10:35 2018 -0400

    ext4: don't allow r/w mounts if metadata blocks overlap the superblock
    
    commit 18db4b4e6fc31eda838dd1c1296d67dbcb3dc957 upstream.
    
    If some metadata block, such as an allocation bitmap, overlaps the
    superblock, it's very likely that if the file system is mounted
    read/write, the results will not be pretty.  So disallow r/w mounts
    for file systems corrupted in this particular way.
    
    Backport notes:
    3.18.y is missing bc98a42c1f7d ("VFS: Convert sb->s_flags & MS_RDONLY to sb_rdonly(sb)")
    and e462ec50cb5f ("VFS: Differentiate mount flags (MS_*) from internal superblock flags")
    so we simply use the sb MS_RDONLY check from pre bc98a42c1f7d in place of the sb_rdonly
    function used in the upstream variant of the patch.
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Harsh Shandilya <harsh@prjkt.io>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ad811550b1248d19af77724b77cb83bf0ab8b5dc
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Apr 7 11:48:58 2018 +0200

    ALSA: pcm: Fix endless loop for XRUN recovery in OSS emulation
    
    commit e15dc99dbb9cf99f6432e8e3c0b3a8f7a3403a86 upstream.
    
    The commit 02a5d6925cd3 ("ALSA: pcm: Avoid potential races between OSS
    ioctls and read/write") split the PCM preparation code to a locked
    version, and it added a sanity check of runtime->oss.prepare flag
    along with the change.  This leaded to an endless loop when the stream
    gets XRUN: namely, snd_pcm_oss_write3() and co call
    snd_pcm_oss_prepare() without setting runtime->oss.prepare flag and
    the loop continues until the PCM state reaches to another one.
    
    As the function is supposed to execute the preparation
    unconditionally, drop the invalid state check there.
    
    The bug was triggered by syzkaller.
    
    Fixes: 02a5d6925cd3 ("ALSA: pcm: Avoid potential races between OSS ioctls and read/write")
    Reported-by: syzbot+150189c103427d31a053@syzkaller.appspotmail.com
    Reported-by: syzbot+7e3f31a52646f939c052@syzkaller.appspotmail.com
    Reported-by: syzbot+4f2016cf5185da7759dc@syzkaller.appspotmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 24fd21ae8ea69d9f9d25efb4292c46d5bc19e15d
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Mar 27 14:32:23 2018 +0200

    ALSA: pcm: Fix mutex unbalance in OSS emulation ioctls
    
    commit f6d297df4dd47ef949540e4a201230d0c5308325 upstream.
    
    The previous fix 40cab6e88cb0 ("ALSA: pcm: Return -EBUSY for OSS
    ioctls changing busy streams") introduced some mutex unbalance; the
    check of runtime->oss.rw_ref was inserted in a wrong place after the
    mutex lock.
    
    This patch fixes the inconsistency by rewriting with the helper
    functions to lock/unlock parameters with the stream check.
    
    Fixes: 40cab6e88cb0 ("ALSA: pcm: Return -EBUSY for OSS ioctls changing busy streams")
    Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3724f9c7dd1e7373d5db4098b1e17a48b2fe2421
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Mar 23 08:03:26 2018 +0100

    ALSA: pcm: Return -EBUSY for OSS ioctls changing busy streams
    
    commit 40cab6e88cb0b6c56d3f30b7491a20e803f948f6 upstream.
    
    OSS PCM stream management isn't modal but it allows ioctls issued at
    any time for changing the parameters.  In the previous hardening
    patch ("ALSA: pcm: Avoid potential races between OSS ioctls and
    read/write"), we covered these races and prevent the corruption by
    protecting the concurrent accesses via params_lock mutex.  However,
    this means that some ioctls that try to change the stream parameter
    (e.g. channels or format) would be blocked until the read/write
    finishes, and it may take really long.
    
    Basically changing the parameter while reading/writing is an invalid
    operation, hence it's even more user-friendly from the API POV if it
    returns -EBUSY in such a situation.
    
    This patch adds such checks in the relevant ioctls with the addition
    of read/write access refcount.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 159a13647f3fafa26809b939bd9a5f0a54c87118
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Mar 22 18:10:14 2018 +0100

    ALSA: pcm: Avoid potential races between OSS ioctls and read/write
    
    commit 02a5d6925cd34c3b774bdb8eefb057c40a30e870 upstream.
    
    Although we apply the params_lock mutex to the whole read and write
    operations as well as snd_pcm_oss_change_params(), we may still face
    some races.
    
    First off, the params_lock is taken inside the read and write loop.
    This is intentional for avoiding the too long locking, but it allows
    the in-between parameter change, which might lead to invalid
    pointers.  We check the readiness of the stream and set up via
    snd_pcm_oss_make_ready() at the beginning of read and write, but it's
    called only once, by assuming that it remains ready in the rest.
    
    Second, many ioctls that may change the actual parameters
    (i.e. setting runtime->oss.params=1) aren't protected, hence they can
    be processed in a half-baked state.
    
    This patch is an attempt to plug these holes.  The stream readiness
    check is moved inside the read/write inner loop, so that the stream is
    always set up in a proper state before further processing.  Also, each
    ioctl that may change the parameter is wrapped with the params_lock
    for avoiding the races.
    
    The issues were triggered by syzkaller in a few different scenarios,
    particularly the one below appearing as GPF in loopback_pos_update.
    
    Reported-by: syzbot+c4227aec125487ec3efa@syzkaller.appspotmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8ede8ba723630f9200f72f5cb63900a42b5799f8
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Jan 9 08:51:02 2018 +0100

    ALSA: pcm: Use ERESTARTSYS instead of EINTR in OSS emulation
    
    commit c64ed5dd9feba193c76eb460b451225ac2a0d87b upstream.
    
    Fix the last standing EINTR in the whole subsystem.  Use more correct
    ERESTARTSYS for pending signals.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 502b50e87038e63011dbe83f210292b1c505b6c9
Author: Alex Williamson <alex.williamson@redhat.com>
Date:   Mon Oct 2 12:39:10 2017 -0600

    vfio/pci: Virtualize Maximum Read Request Size
    
    commit cf0d53ba4947aad6e471491d5b20a567cbe92e56 upstream.
    
    MRRS defines the maximum read request size a device is allowed to
    make.  Drivers will often increase this to allow more data transfer
    with a single request.  Completions to this request are bound by the
    MPS setting for the bus.  Aside from device quirks (none known), it
    doesn't seem to make sense to set an MRRS value less than MPS, yet
    this is a likely scenario given that user drivers do not have a
    system-wide view of the PCI topology.  Virtualize MRRS such that the
    user can set MRRS >= MPS, but use MPS as the floor value that we'll
    write to hardware.
    
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4076d92cc204fde02b07ca3a399c89d217c9ff0f
Author: Igor Pylypiv <igor.pylypiv@gmail.com>
Date:   Tue Mar 6 23:47:25 2018 -0800

    watchdog: f71808e_wdt: Fix WD_EN register read
    
    commit 977f6f68331f94bb72ad84ee96b7b87ce737d89d upstream.
    
    F71808FG_FLAG_WD_EN defines bit position, not a bitmask
    
    Signed-off-by: Igor Pylypiv <igor.pylypiv@gmail.com>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e58d3bccad82019ec63a628dd52756c298bd2be1
Author: Sean Wang <sean.wang@mediatek.com>
Date:   Thu Mar 1 11:27:50 2018 +0800

    dt-bindings: clock: mediatek: add binding for fixed-factor clock axisel_d4
    
    commit 55a5fcafe3a94e8a0777bb993d09107d362258d2 upstream.
    
    Just add binding for a fixed-factor clock axisel_d4, which would be
    referenced by PWM devices on MT7623 or MT2701 SoC.
    
    Cc: stable@vger.kernel.org
    Fixes: 1de9b21633d6 ("clk: mediatek: Add dt-bindings for MT2701 clocks")
    Signed-off-by: Sean Wang <sean.wang@mediatek.com>
    Reviewed-by: Rob Herring <robh@kernel.org>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: devicetree@vger.kernel.org
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a84a584c08783919a0e138e1e15ee2c45cdc0751
Author: Mikhail Lappo <mikhail.lappo@esrlabs.com>
Date:   Fri Feb 2 16:17:46 2018 -0200

    thermal: imx: Fix race condition in imx_thermal_probe()
    
    commit cf1ba1d73a33944d8c1a75370a35434bf146b8a7 upstream.
    
    When device boots with T > T_trip_1 and requests interrupt,
    the race condition takes place. The interrupt comes before
    THERMAL_DEVICE_ENABLED is set. This leads to an attempt to
    reading sensor value from irq and disabling the sensor, based on
    the data->mode field, which expected to be THERMAL_DEVICE_ENABLED,
    but still stays as THERMAL_DEVICE_DISABLED. Afher this issue
    sensor is never re-enabled, as the driver state is wrong.
    
    Fix this problem by setting the 'data' members prior to
    requesting the interrupts.
    
    Fixes: 37713a1e8e4c ("thermal: imx: implement thermal alarm interrupt handling")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Mikhail Lappo <mikhail.lappo@esrlabs.com>
    Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
    Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>
    Acked-by: Dong Aisheng <aisheng.dong@nxp.com>
    Signed-off-by: Zhang Rui <rui.zhang@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f6ed0ff4c7de070c630eac654627ce5a402712db
Author: Ryo Kodama <ryo.kodama.vz@renesas.com>
Date:   Fri Mar 9 20:24:21 2018 +0900

    pwm: rcar: Fix a condition to prevent mismatch value setting to duty
    
    commit 6225f9c64b40bc8a22503e9cda70f55d7a9dd3c6 upstream.
    
    This patch fixes an issue that is possible to set mismatch value to duty
    for R-Car PWM if we input the following commands:
    
     # cd /sys/class/pwm/<pwmchip>/
     # echo 0 > export
     # cd pwm0
     # echo 30 > period
     # echo 30 > duty_cycle
     # echo 0 > duty_cycle
     # cat duty_cycle
     0
     # echo 1 > enable
     --> Then, the actual duty_cycle is 30, not 0.
    
    So, this patch adds a condition into rcar_pwm_config() to fix this
    issue.
    
    Signed-off-by: Ryo Kodama <ryo.kodama.vz@renesas.com>
    [shimoda: revise the commit log and add Fixes and Cc tags]
    Fixes: ed6c1476bf7f ("pwm: Add support for R-Car PWM Timer")
    Cc: Cc: <stable@vger.kernel.org> # v4.4+
    Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Signed-off-by: Thierry Reding <thierry.reding@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6af2423153c430055c39947550ca341d75d0120f
Author: Boris Brezillon <boris.brezillon@bootlin.com>
Date:   Thu Mar 22 10:11:30 2018 +0100

    clk: bcm2835: De-assert/assert PLL reset signal when appropriate
    
    commit 753872373b599384ac7df809aa61ea12d1c4d5d1 upstream.
    
    In order to enable a PLL, not only the PLL has to be powered up and
    locked, but you also have to de-assert the reset signal. The last part
    was missing. Add it so PLLs that were not enabled by the FW/bootloader
    can be enabled from Linux.
    
    Fixes: 41691b8862e2 ("clk: bcm2835: Add support for programming the audio domain clocks")
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5971ee251010e1ce4969cded71800ce993a36a33
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Feb 16 16:27:47 2018 +0100

    clk: fix false-positive Wmaybe-uninitialized warning
    
    commit ce33f284935e08229046b30635e6aadcbab02b53 upstream.
    
    When we build this driver with on x86-32, gcc produces a false-positive warning:
    
    drivers/clk/renesas/clk-sh73a0.c: In function 'sh73a0_cpg_clocks_init':
    drivers/clk/renesas/clk-sh73a0.c:155:10: error: 'parent_name' may be used uninitialized in this function [-Werror=maybe-uninitialized]
       return clk_register_fixed_factor(NULL, name, parent_name, 0,
    
    We can work around that warning by adding a fake initialization, I tried
    and failed to come up with any better workaround. This is currently one
    of few remaining warnings for a 4.14.y randconfig build, so it would be
    good to also have it backported at least to that version. Older versions
    have more randconfig warnings, so we might not care.
    
    I had not noticed this earlier, because one patch in my randconfig test
    tree removes the '-ffreestanding' option on x86-32, and that avoids
    the warning. The -ffreestanding flag was originally global but moved
    into arch/i386 by Andi Kleen in commit 6edfba1b33c7 ("[PATCH] x86_64:
    Don't define string functions to builtin") as a 'temporary workaround'.
    
    Like many temporary hacks, this turned out to be rather long-lived, from
    all I can tell we still need a simple fix to asm/string_32.h before it
    can be removed, but I'm not sure about how to best do that.
    
    Cc: stable@vger.kernel.org
    Cc: Andi Kleen <ak@linux.intel.com>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Acked-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b2c89d89eefa43ab6dbfd09b3dc18f14125877f6
Author: Richard Genoud <richard.genoud@gmail.com>
Date:   Tue Mar 13 16:27:02 2018 +0100

    clk: mvebu: armada-38x: add support for missing clocks
    
    commit 6a4a4595804548e173f0763a0e7274a3521c59a9 upstream.
    
    Clearfog boards can come with a CPU clocked at 1600MHz (commercial)
    or 1333MHz (industrial).
    
    They have also some dip-switches to select a different clock (666, 800,
    1066, 1200).
    
    The funny thing is that the recovery button is on the MPP34 fq selector.
    So, when booting an industrial board with this button down, the frequency
    666MHz is selected (and the kernel didn't boot).
    
    This patch add all the missing clocks.
    
    The only mode I didn't test is 2GHz (uboot found 4294MHz instead :/ ).
    
    Fixes: 0e85aeced4d6 ("clk: mvebu: add clock support for Armada 380/385")
    Cc: <stable@vger.kernel.org> # 3.16.x: 9593f4f56cf5: clk: mvebu: armada-38x: add support for 1866MHz variants
    Cc: <stable@vger.kernel.org> # 3.16.x
    
    Signed-off-by: Richard Genoud <richard.genoud@gmail.com>
    Acked-by: Gregory CLEMENT <gregory.clement@bootlin.com>
    Signed-off-by: Stephen Boyd <sboyd@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1b22bdc3a303d26329abf3abbb441f97cfaecc3b
Author: Ralph Sennhauser <ralph.sennhauser@gmail.com>
Date:   Wed May 24 16:58:52 2017 +0200

    clk: mvebu: armada-38x: add support for 1866MHz variants
    
    commit 9593f4f56cf5d1c443f66660a0c7f01de38f979d upstream.
    
    The Linksys WRT3200ACM CPU is clocked at 1866MHz. Add 1866MHz to the
    list of supported CPU frequencies. Also update multiplier and divisor
    for the l2clk and ddrclk.
    
    Noticed by the following warning:
    [    0.000000] Selected CPU frequency (16) unsupported
    
    Signed-off-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
    Reviewed-by: Gregory CLEMENT <gregory.clement@free-electrons.com>
    Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4685f789b234f7e5e19f45b430becf1a723ce1d6
Author: Alex Smith <alex.smith@imgtec.com>
Date:   Wed Mar 28 18:00:43 2018 -0300

    mmc: jz4740: Fix race condition in IRQ mask update
    
    commit a04f0017c22453613d5f423326b190c61e3b4f98 upstream.
    
    A spinlock is held while updating the internal copy of the IRQ mask,
    but not while writing it to the actual IMASK register. After the lock
    is released, an IRQ can occur before the IMASK register is written.
    If handling this IRQ causes the mask to be changed, when the handler
    returns back to the middle of the first mask update, a stale value
    will be written to the mask register.
    
    If this causes an IRQ to become unmasked that cannot have its status
    cleared by writing a 1 to it in the IREG register, e.g. the SDIO IRQ,
    then we can end up stuck with the same IRQ repeatedly being fired but
    not handled. Normally the MMC IRQ handler attempts to clear any
    unexpected IRQs by writing IREG, but for those that cannot be cleared
    in this way then the IRQ will just repeatedly fire.
    
    This was resulting in lockups after a while of using Wi-Fi on the
    CI20 (GitHub issue #19).
    
    Resolve by holding the spinlock until after the IMASK register has
    been updated.
    
    Cc: stable@vger.kernel.org
    Link: https://github.com/MIPS/CI20_linux/issues/19
    Fixes: 61bfbdb85687 ("MMC: Add support for the controller on JZ4740 SoCs.")
    Tested-by: Mathieu Malaterre <malat@debian.org>
    Signed-off-by: Alex Smith <alex.smith@imgtec.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 94911a0cded960b5e85f9ef33e9861007e84cd16
Author: Lu Baolu <baolu.lu@linux.intel.com>
Date:   Sat Feb 24 13:42:27 2018 +0800

    iommu/vt-d: Fix a potential memory leak
    
    commit bbe4b3af9d9e3172fb9aa1f8dcdfaedcb381fc64 upstream.
    
    A memory block was allocated in intel_svm_bind_mm() but never freed
    in a failure path. This patch fixes this by free it to avoid memory
    leakage.
    
    Cc: Ashok Raj <ashok.raj@intel.com>
    Cc: Jacob Pan <jacob.jun.pan@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v4.4+
    Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
    Fixes: 2f26e0a9c9860 ('iommu/vt-d: Add basic SVM PASID support')
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2413ed888ab4c43311e5a16df3abdea2ab2df983
Author: Krzysztof Mazur <krzysiek@podlesie.net>
Date:   Wed Nov 15 11:12:39 2017 +0100

    um: Use POSIX ucontext_t instead of struct ucontext
    
    commit 4d1a535b8ec5e74b42dfd9dc809142653b2597f6 upstream.
    
    glibc 2.26 removed the 'struct ucontext' to "improve" POSIX compliance
    and break programs, including User Mode Linux. Fix User Mode Linux
    by using POSIX ucontext_t.
    
    This fixes:
    
    arch/um/os-Linux/signal.c: In function 'hard_handler':
    arch/um/os-Linux/signal.c:163:22: error: dereferencing pointer to incomplete type 'struct ucontext'
      mcontext_t *mc = &uc->uc_mcontext;
    arch/x86/um/stub_segv.c: In function 'stub_segv_handler':
    arch/x86/um/stub_segv.c:16:13: error: dereferencing pointer to incomplete type 'struct ucontext'
              &uc->uc_mcontext);
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Krzysztof Mazur <krzysiek@podlesie.net>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8280752089fb63d8c8043878a2bb68ba6854a54b
Author: Jason A. Donenfeld <Jason@zx2c4.com>
Date:   Thu Dec 14 03:23:37 2017 +0100

    um: Compile with modern headers
    
    commit 530ba6c7cb3c22435a4d26de47037bb6f86a5329 upstream.
    
    Recent libcs have gotten a bit more strict, so we actually need to
    include the right headers and use the right types. This enables UML to
    compile again.
    
    Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1c72e231eb06499e376842defa03e1e295d63ba0
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Mon Apr 2 16:40:04 2018 -0700

    nfit, address-range-scrub: fix scrub in-progress reporting
    
    commit 78727137fdf49edf9f731bde79d7189067b4047a upstream.
    
    There is a small window whereby ARS scan requests can schedule work that
    userspace will miss when polling scrub_show. Hold the init_mutex lock
    over calls to report the status to close this potential escape. Also,
    make sure that requests to cancel the ARS workqueue are treated as an
    idle event.
    
    Cc: <stable@vger.kernel.org>
    Cc: Vishal Verma <vishal.l.verma@intel.com>
    Fixes: 37b137ff8c83 ("nfit, libnvdimm: allow an ARS scrub...")
    Reviewed-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a1ada79437d7120050c38db6501ac1de62474da9
Author: Dan Williams <dan.j.williams@intel.com>
Date:   Fri Apr 6 16:37:21 2018 -0700

    libnvdimm, namespace: use a safe lookup for dimm device name
    
    commit 4f8672201b7e7ed4f5f6c3cf6dcd080648580582 upstream.
    
    The following NULL dereference results from incorrectly assuming that
    ndd is valid in this print:
    
      struct nvdimm_drvdata *ndd = to_ndd(&nd_region->mapping[i]);
    
      /*
       * Give up if we don't find an instance of a uuid at each
       * position (from 0 to nd_region->ndr_mappings - 1), or if we
       * find a dimm with two instances of the same uuid.
       */
      dev_err(&nd_region->dev, "%s missing label for %pUb\n",
                      dev_name(ndd->dev), nd_label->uuid);
    
     BUG: unable to handle kernel NULL pointer dereference at 0000000000000000
     IP: nd_region_register_namespaces+0xd67/0x13c0 [libnvdimm]
     PGD 0 P4D 0
     Oops: 0000 [#1] SMP PTI
     CPU: 43 PID: 673 Comm: kworker/u609:10 Not tainted 4.16.0-rc4+ #1
     [..]
     RIP: 0010:nd_region_register_namespaces+0xd67/0x13c0 [libnvdimm]
     [..]
     Call Trace:
      ? devres_add+0x2f/0x40
      ? devm_kmalloc+0x52/0x60
      ? nd_region_activate+0x9c/0x320 [libnvdimm]
      nd_region_probe+0x94/0x260 [libnvdimm]
      ? kernfs_add_one+0xe4/0x130
      nvdimm_bus_probe+0x63/0x100 [libnvdimm]
    
    Switch to using the nvdimm device directly.
    
    Fixes: 0e3b0d123c8f ("libnvdimm, namespace: allow multiple pmem...")
    Cc: <stable@vger.kernel.org>
    Reported-by: Dave Jiang <dave.jiang@intel.com>
    Signed-off-by: Dan Williams <dan.j.williams@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5d151871b1cb6338daac36e5c7c375c1f4b83ded
Author: Maxime Jayat <maxime.jayat@mobile-devices.fr>
Date:   Thu Feb 22 12:39:55 2018 +0100

    dmaengine: at_xdmac: fix rare residue corruption
    
    commit c5637476bbf9bb86c7f0413b8f4822a73d8d2d07 upstream.
    
    Despite the efforts made to correctly read the NDA and CUBC registers,
    the order in which the registers are read could sometimes lead to an
    inconsistent state.
    
    Re-using the timeline from the comments, this following timing of
    registers reads could lead to reading NDA with value "@desc2" and
    CUBC with value "MAX desc1":
    
     INITD --------                    ------------
                  |____________________|
           _______________________  _______________
     NDA       @desc2             \/   @desc3
           _______________________/\_______________
           __________  ___________  _______________
     CUBC       0    \/ MAX desc1 \/  MAX desc2
           __________/\___________/\_______________
            |  |          |  |
    Events:(1)(2)        (3)(4)
    
    (1) check_nda = @desc2
    (2) initd = 1
    (3) cur_ubc = MAX desc1
    (4) cur_nda = @desc2
    
    This is allowed by the condition ((check_nda == cur_nda) && initd),
    despite cur_ubc and cur_nda being in the precise state we don't want.
    
    This error leads to incorrect residue computation.
    
    Fix it by inversing the order in which CUBC and INITD are read. This
    makes sure that NDA and CUBC are always read together either _before_
    INITD goes to 0 or _after_ it is back at 1.
    The case where NDA is read before INITD is at 0 and CUBC is read after
    INITD is back at 1 will be rejected by check_nda and cur_nda being
    different.
    
    Fixes: 53398f488821 ("dmaengine: at_xdmac: fix residue corruption")
    Cc: stable@vger.kernel.org
    Signed-off-by: Maxime Jayat <maxime.jayat@mobile-devices.fr>
    Acked-by: Ludovic Desroches <ludovic.desroches@microchip.com>
    Signed-off-by: Vinod Koul <vinod.koul@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 16757e775dd6db0fda7cf7da1eaa31d8e5a11ff1
Author: Bart Van Assche <bart.vanassche@wdc.com>
Date:   Mon Feb 12 09:50:25 2018 -0800

    IB/srp: Fix completion vector assignment algorithm
    
    commit 3a148896b24adf8688dc0c59af54531931677a40 upstream.
    
    Ensure that cv_end is equal to ibdev->num_comp_vectors for the
    NUMA node with the highest index. This patch improves spreading
    of RDMA channels over completion vectors and thereby improves
    performance, especially on systems with only a single NUMA node.
    This patch drops support for the comp_vector login parameter by
    ignoring the value of that parameter since I have not found a
    good way to combine support for that parameter and automatic
    spreading of RDMA channels over completion vectors.
    
    Fixes: d92c0da71a35 ("IB/srp: Add multichannel support")
    Reported-by: Alexander Schmid <alex@modula-shop-systems.de>
    Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
    Cc: Alexander Schmid <alex@modula-shop-systems.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f4374991ddd73e1b23a62decb9548a2d599716a4
Author: Bart Van Assche <bart.vanassche@wdc.com>
Date:   Fri Feb 23 14:09:24 2018 -0800

    IB/srp: Fix srp_abort()
    
    commit e68088e78d82920632eba112b968e49d588d02a2 upstream.
    
    Before commit e494f6a72839 ("[SCSI] improved eh timeout handler") it
    did not really matter whether or not abort handlers like srp_abort()
    called .scsi_done() when returning another value than SUCCESS. Since
    that commit however this matters. Hence only call .scsi_done() when
    returning SUCCESS.
    
    Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dd34b663a8a63050d87da428061b07a8253fa7ac
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Apr 2 22:41:43 2018 +0200

    ALSA: pcm: Fix UAF at PCM release via PCM timer access
    
    commit a820ccbe21e8ce8e86c39cd1d3bc8c7d1cbb949b upstream.
    
    The PCM runtime object is created and freed dynamically at PCM stream
    open / close time.  This is tracked via substream->runtime, and it's
    cleared at snd_pcm_detach_substream().
    
    The runtime object assignment is protected by PCM open_mutex, so for
    all PCM operations, it's safely handled.  However, each PCM substream
    provides also an ALSA timer interface, and user-space can access to
    this while closing a PCM substream.  This may eventually lead to a
    UAF, as snd_pcm_timer_resolution() tries to access the runtime while
    clearing it in other side.
    
    Fortunately, it's the only concurrent access from the PCM timer, and
    it merely reads runtime->timer_resolution field.  So, we can avoid the
    race by reordering kfree() and wrapping the substream->runtime
    clearance with the corresponding timer lock.
    
    Reported-by: syzbot+8e62ff4e07aa2ce87826@syzkaller.appspotmail.com
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4b37ec8703b3131c3f8b39735046c64d33ccb921
Author: Bart Van Assche <bart.vanassche@wdc.com>
Date:   Thu Mar 1 14:00:29 2018 -0800

    RDMA/rxe: Fix an out-of-bounds read
    
    commit a6544a624c3ff92a64e4aca3931fa064607bd3da upstream.
    
    This patch avoids that KASAN reports the following when the SRP initiator
    calls srp_post_send():
    
    ==================================================================
    BUG: KASAN: stack-out-of-bounds in rxe_post_send+0x5c4/0x980 [rdma_rxe]
    Read of size 8 at addr ffff880066606e30 by task 02-mq/1074
    
    CPU: 2 PID: 1074 Comm: 02-mq Not tainted 4.16.0-rc3-dbg+ #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.0.0-prebuilt.qemu-project.org 04/01/2014
    Call Trace:
    dump_stack+0x85/0xc7
    print_address_description+0x65/0x270
    kasan_report+0x231/0x350
    rxe_post_send+0x5c4/0x980 [rdma_rxe]
    srp_post_send.isra.16+0x149/0x190 [ib_srp]
    srp_queuecommand+0x94d/0x1670 [ib_srp]
    scsi_dispatch_cmd+0x1c2/0x550 [scsi_mod]
    scsi_queue_rq+0x843/0xa70 [scsi_mod]
    blk_mq_dispatch_rq_list+0x143/0xac0
    blk_mq_do_dispatch_ctx+0x1c5/0x260
    blk_mq_sched_dispatch_requests+0x2bf/0x2f0
    __blk_mq_run_hw_queue+0xdb/0x160
    __blk_mq_delay_run_hw_queue+0xba/0x100
    blk_mq_run_hw_queue+0xf2/0x190
    blk_mq_sched_insert_request+0x163/0x2f0
    blk_execute_rq+0xb0/0x130
    scsi_execute+0x14e/0x260 [scsi_mod]
    scsi_probe_and_add_lun+0x366/0x13d0 [scsi_mod]
    __scsi_scan_target+0x18a/0x810 [scsi_mod]
    scsi_scan_target+0x11e/0x130 [scsi_mod]
    srp_create_target+0x1522/0x19e0 [ib_srp]
    kernfs_fop_write+0x180/0x210
    __vfs_write+0xb1/0x2e0
    vfs_write+0xf6/0x250
    SyS_write+0x99/0x110
    do_syscall_64+0xee/0x2b0
    entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    The buggy address belongs to the page:
    page:ffffea0001998180 count:0 mapcount:0 mapping:0000000000000000 index:0x0
    flags: 0x4000000000000000()
    raw: 4000000000000000 0000000000000000 0000000000000000 00000000ffffffff
    raw: dead000000000100 dead000000000200 0000000000000000 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
    ffff880066606d00: 00 00 00 00 00 00 00 00 00 00 00 00 00 f1 f1 f1
    ffff880066606d80: f1 00 f2 f2 f2 f2 f2 f2 f2 00 00 f2 f2 f2 f2 f2
    >ffff880066606e00: f2 00 00 00 00 00 f2 f2 f2 f3 f3 f3 f3 00 00 00
                                        ^
    ffff880066606e80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    ffff880066606f00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    ==================================================================
    
    Fixes: 8700e3e7c485 ("Soft RoCE driver")
    Signed-off-by: Bart Van Assche <bart.vanassche@wdc.com>
    Cc: Moni Shoua <monis@mellanox.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8e455917885613ce6fdbbfb981364c983b29060d
Author: Roland Dreier <roland@purestorage.com>
Date:   Tue Apr 3 15:33:01 2018 -0700

    RDMA/ucma: Don't allow setting RDMA_OPTION_IB_PATH without an RDMA device
    
    commit 8435168d50e66fa5eae01852769d20a36f9e5e83 upstream.
    
    Check to make sure that ctx->cm_id->device is set before we use it.
    Otherwise userspace can trigger a NULL dereference by doing
    RDMA_USER_CM_CMD_SET_OPTION on an ID that is not bound to a device.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: <syzbot+a67bc93e14682d92fc2f@syzkaller.appspotmail.com>
    Signed-off-by: Roland Dreier <roland@purestorage.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6b289a7c34d72212bcd5a8ab9b6a657f2f44f0ee
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Thu Mar 29 21:56:09 2018 -0400

    ext4: fail ext4_iget for root directory if unallocated
    
    commit 8e4b5eae5decd9dfe5a4ee369c22028f90ab4c44 upstream.
    
    If the root directory has an i_links_count of zero, then when the file
    system is mounted, then when ext4_fill_super() notices the problem and
    tries to call iput() the root directory in the error return path,
    ext4_evict_inode() will try to free the inode on disk, before all of
    the file system structures are set up, and this will result in an OOPS
    caused by a NULL pointer dereference.
    
    This issue has been assigned CVE-2018-1092.
    
    https://bugzilla.kernel.org/show_bug.cgi?id=199179
    https://bugzilla.redhat.com/show_bug.cgi?id=1560777
    
    Reported-by: Wen Xu <wen.xu@gatech.edu>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c636feb8ffe56f1cc1fafce87a67b1020761d24d
Author: Eryu Guan <guaneryu@gmail.com>
Date:   Thu Mar 22 11:41:25 2018 -0400

    ext4: protect i_disksize update by i_data_sem in direct write path
    
    commit 73fdad00b208b139cf43f3163fbc0f67e4c6047c upstream.
    
    i_disksize update should be protected by i_data_sem, by either taking
    the lock explicitly or by using ext4_update_i_disksize() helper. But the
    i_disksize updates in ext4_direct_IO_write() are not protected at all,
    which may be racing with i_disksize updates in writeback path in
    delalloc buffer write path.
    
    This is found by code inspection, and I didn't hit any i_disksize
    corruption due to this bug. Thanks to Jan Kara for catching this bug and
    suggesting the fix!
    
    Reported-by: Jan Kara <jack@suse.cz>
    Suggested-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Eryu Guan <guaneryu@gmail.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a06b798c309ed8c919522c639e89613a013c13c4
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Mon Feb 19 14:16:47 2018 -0500

    ext4: don't update checksum of new initialized bitmaps
    
    commit 044e6e3d74a3d7103a0c8a9305dfd94d64000660 upstream.
    
    When reading the inode or block allocation bitmap, if the bitmap needs
    to be initialized, do not update the checksum in the block group
    descriptor.  That's because we're not set up to journal those changes.
    Instead, just set the verified bit on the bitmap block, so that it's
    not necessary to validate the checksum.
    
    When a block or inode allocation actually happens, at that point the
    checksum will be calculated, and update of the bg descriptor block
    will be properly journalled.
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 82aad4a72f154f48aacc6592779700b1bad0ae07
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Mon Feb 19 12:22:53 2018 -0500

    jbd2: if the journal is aborted then don't allow update of the log tail
    
    commit 85e0c4e89c1b864e763c4e3bb15d0b6d501ad5d9 upstream.
    
    This updates the jbd2 superblock unnecessarily, and on an abort we
    shouldn't truncate the log.
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bb6f26a637b4da6cb752c55635baa425d803f02d
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Sat Feb 25 18:21:33 2017 -0400

    random: use a tighter cap in credit_entropy_bits_safe()
    
    commit 9f886f4d1d292442b2f22a0a33321eae821bde40 upstream.
    
    This fixes a harmless UBSAN where root could potentially end up
    causing an overflow while bumping the entropy_total field (which is
    ignored once the entropy pool has been initialized, and this generally
    is completed during the boot sequence).
    
    This is marginal for the stable kernel series, but it's a really
    trivial patch, and it fixes UBSAN warning that might cause security
    folks to get overly excited for no reason.
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reported-by: Chen Feng <puck.chen@hisilicon.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 910d84009977441fcb5661683528f88ed1dcca93
Author: Aniruddha Banerjee <aniruddhab@nvidia.com>
Date:   Wed Mar 28 19:12:00 2018 +0530

    irqchip/gic: Take lock when updating irq type
    
    commit aa08192a254d362a4d5317647a81de6996961aef upstream.
    
    Most MMIO GIC register accesses use a 1-hot bit scheme that
    avoids requiring any form of locking. This isn't true for the
    GICD_ICFGRn registers, which require a RMW sequence.
    
    Unfortunately, we seem to be missing a lock for these particular
    accesses, which could result in a race condition if changing the
    trigger type on any two interrupts within the same set of 16
    interrupts (and thus controlled by the same CFGR register).
    
    Introduce a private lock in the GIC common comde for this
    particular case, making it cover both GIC implementations
    in one go.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Aniruddha Banerjee <aniruddhab@nvidia.com>
    [maz: updated changelog]
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c9bb6fb2df18eda60e8dc125232338a76ffb7163
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Tue Dec 19 12:44:56 2017 +0300

    thunderbolt: Resume control channel after hibernation image is created
    
    commit f2a659f7d8d5da803836583aa16df06bdf324252 upstream.
    
    The driver misses implementation of PM hook that undoes what
    ->freeze_noirq() does after the hibernation image is created. This means
    the control channel is not resumed properly and the Thunderbolt bus
    becomes useless in later stages of hibernation (when the image is stored
    or if the operation fails).
    
    Fix this by pointing ->thaw_noirq to driver nhi_resume_noirq(). This
    makes sure the control channel is resumed properly.
    
    Fixes: 23dd5bb49d98 ("thunderbolt: Add suspend/hibernate support")
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2e9feaf9feb84ab387ee10d8ced7d77b745b25d9
Author: James Kelly <jamespeterkelly@gmail.com>
Date:   Mon Mar 19 21:29:50 2018 +1100

    ASoC: ssm2602: Replace reg_default_raw with reg_default
    
    commit a01df75ce737951ad13a08d101306e88c3f57cb2 upstream.
    
    SSM2602 driver is broken on recent kernels (at least
    since 4.9). User space applications such as amixer or
    alsamixer get EIO when attempting to access codec
    controls via the relevant IOCTLs.
    
    Root cause of these failures is the regcache_hw_init
    function in drivers/base/regmap/regcache.c, which
    prevents regmap cache initalization from the
    reg_defaults_raw element of the regmap_config structure
    when registers are write only. It also disables the
    regmap cache entirely when all registers are write only
    or volatile as is the case for the SSM2602 driver.
    
    Using the reg_defaults element of the regmap_config
    structure rather than the reg_defaults_raw element to
    initalize the regmap cache avoids the logic in the
    regcache_hw_init function entirely. It also makes this
    driver consistent with other ASoC codec drivers, as
    this driver was the ONLY codec driver that used the
    reg_defaults_raw element to initalize the cache.
    
    Tested on Digilent Zybo Z7 development board which has
    a SSM2603 codec chip connected to a Xilinx Zynq SoC.
    
    Signed-off-by: James Kelly <jamespeterkelly@gmail.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4b43f4139e4054bc06a1f92be3018ebb6326f73f
Author: Aaron Ma <aaron.ma@canonical.com>
Date:   Mon Jan 8 10:41:41 2018 +0800

    HID: core: Fix size as type u32
    
    commit 6de0b13cc0b4ba10e98a9263d7a83b940720b77a upstream.
    
    When size is negative, calling memset will make segment fault.
    Declare the size as type u32 to keep memset safe.
    
    size in struct hid_report is unsigned, fix return type of
    hid_report_len to u32.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 10ab7c947d4921b962c7c2a6bffa2486d0cd127d
Author: Aaron Ma <aaron.ma@canonical.com>
Date:   Sat Feb 3 23:57:15 2018 +0800

    HID: Fix hid_report_len usage
    
    commit 3064a03b94e60388f0955fcc29f3e8a978d28f75 upstream.
    
    Follow the change of return type u32 of hid_report_len,
    fix all the types of variables those get the return value of
    hid_report_len to u32, and all other code already uses u32.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5aa8b5b8846e519015742c9592e50d2d13fa83de
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Tue Apr 10 21:49:33 2018 +1000

    powerpc/powernv: Fix OPAL NVRAM driver OPAL_BUSY loops
    
    commit 3b8070335f751aac9f1526ae2e012e6f5b8b0f21 upstream.
    
    The OPAL NVRAM driver does not sleep in case it gets OPAL_BUSY or
    OPAL_BUSY_EVENT from firmware, which causes large scheduling
    latencies, and various lockup errors to trigger (again, BMC reboot
    can cause it).
    
    Fix this by converting it to the standard form OPAL_BUSY loop that
    sleeps.
    
    Fixes: 628daa8d5abf ("powerpc/powernv: Add RTC and NVRAM support plus RTAS fallbacks")
    Depends-on: 34dd25de9fe3 ("powerpc/powernv: define a standard delay for OPAL_BUSY type retry loops")
    Cc: stable@vger.kernel.org # v3.2+
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 892314137104e42fefab454e09de6c2e8ae4fabb
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Tue Apr 10 21:49:31 2018 +1000

    powerpc/powernv: define a standard delay for OPAL_BUSY type retry loops
    
    commit 34dd25de9fe3f60bfdb31b473bf04b28262d0896 upstream.
    
    This is the start of an effort to tidy up and standardise all the
    delays. Existing loops have a range of delay/sleep periods from 1ms
    to 20ms, and some have no delay. They all loop forever except rtc,
    which times out after 10 retries, and that uses 10ms delays. So use
    10ms as our standard delay. The OPAL maintainer agrees 10ms is a
    reasonable starting point.
    
    The idea is to use the same recipe everywhere, once this is proven to
    work then it will be documented as an OPAL API standard. Then both
    firmware and OS can agree, and if a particular call needs something
    else, then that can be documented with reasoning.
    
    This is not the end-all of this effort, it's just a relatively easy
    change that fixes some existing high latency delays. There should be
    provision for standardising timeouts and/or interruptible loops where
    possible, so non-fatal firmware errors don't cause hangs.
    
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Cc: Nathan Chancellor <natechancellor@gmail.com>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 59f404e2f21ce5d1de156a17a411b00591ea89b7
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Thu Mar 22 20:41:46 2018 +1000

    powerpc/64: Fix smp_wmb barrier definition use use lwsync consistently
    
    commit 0bfdf598900fd62869659f360d3387ed80eb71cf upstream.
    
    asm/barrier.h is not always included after asm/synch.h, which meant
    it was missing __SUBARCH_HAS_LWSYNC, so in some files smp_wmb() would
    be eieio when it should be lwsync. kernel/time/hrtimer.c is one case.
    
    __SUBARCH_HAS_LWSYNC is only used in one place, so just fold it in
    to where it's used. Previously with my small simulator config, 377
    instances of eieio in the tree. After this patch there are 55.
    
    Fixes: 46d075be585e ("powerpc: Optimise smp_wmb")
    Cc: stable@vger.kernel.org # v2.6.29+
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f3ccc325ffa4e966a44019fe1a679f251ff206b9
Author: Nicholas Piggin <npiggin@gmail.com>
Date:   Tue Mar 27 01:02:33 2018 +1000

    powerpc/powernv: Handle unknown OPAL errors in opal_nvram_write()
    
    commit 741de617661794246f84a21a02fc5e327bffc9ad upstream.
    
    opal_nvram_write currently just assumes success if it encounters an
    error other than OPAL_BUSY or OPAL_BUSY_EVENT. Have it return -EIO
    on other errors instead.
    
    Fixes: 628daa8d5abf ("powerpc/powernv: Add RTC and NVRAM support plus RTAS fallbacks")
    Cc: stable@vger.kernel.org # v3.2+
    Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
    Reviewed-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
    Acked-by: Stewart Smith <stewart@linux.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b599902c30803a6b7f9818e6dc4710d4a64f55af
Author: Aaron Ma <aaron.ma@canonical.com>
Date:   Mon Jan 8 10:41:40 2018 +0800

    HID: i2c-hid: fix size check and type usage
    
    commit ac75a041048b8c1f7418e27621ca5efda8571043 upstream.
    
    When convert char array with signed int, if the inbuf[x] is negative then
    upper bits will be set to 1. Fix this by using u8 instead of char.
    
    ret_size has to be at least 3, hid_input_report use it after minus 2 bytes.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Aaron Ma <aaron.ma@canonical.com>
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c4bc658f90b8e6614c6d55d211005d9c49b0c317
Author: Steve French <stfrench@microsoft.com>
Date:   Sat Mar 31 18:13:38 2018 -0500

    smb3: Fix root directory when server returns inode number of zero
    
    commit 7ea884c77e5c97f1e0a1a422d961d27f78ca2745 upstream.
    
    Some servers return inode number zero for the root directory, which
    causes ls to display incorrect data (missing "." and "..").
    
    If the server returns zero for the inode number of the root directory,
    fake an inode number for it.
    
    Signed-off-by: Steve French <smfrench@gmail.com>
    Reviewed-by: Pavel Shilovsky <pshilov@microsoft.com>
    CC: Stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cd93ff92e1d71a2f13447ecc36e17e74bf897ef4
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Mon Mar 19 13:07:35 2018 -0700

    usb: dwc3: pci: Properly cleanup resource
    
    commit cabdf83dadfb3d83eec31e0f0638a92dbd716435 upstream.
    
    Platform device is allocated before adding resources. Make sure to
    properly cleanup on error case.
    
    Cc: <stable@vger.kernel.org>
    Fixes: f1c7e7108109 ("usb: dwc3: convert to pcim_enable_device()")
    Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 73300bd1fdedcb4f0e78aab61737bda5bf7b0c24
Author: Zhengjun Xing <zhengjun.xing@linux.intel.com>
Date:   Wed Mar 21 13:29:42 2018 +0800

    USB:fix USB3 devices behind USB3 hubs not resuming at hibernate thaw
    
    commit 64627388b50158fd24d6ad88132525b95a5ef573 upstream.
    
    USB3 hubs don't support global suspend.
    
    USB3 specification 10.10, Enhanced SuperSpeed hubs only support selective
    suspend and resume, they do not support global suspend/resume where the
    hub downstream facing ports states are not affected.
    
    When system enters hibernation it first enters freeze process where only
    the root hub enters suspend, usb_port_suspend() is not called for other
    devices, and suspend status flags are not set for them. Other devices are
    expected to suspend globally. Some external USB3 hubs will suspend the
    downstream facing port at global suspend. These devices won't be resumed
    at thaw as the suspend status flag is not set.
    
    A USB3 removable hard disk connected through a USB3 hub that won't resume
    at thaw will fail to synchronize SCSI cache, return “cmd cmplt err -71”
    error, and needs a 60 seconds timeout which causing system hang for 60s
    before the USB host reset the port for the USB3 removable hard disk to
    recover.
    
    Fix this by always calling usb_port_suspend() during freeze for USB3
    devices.
    
    Signed-off-by: Zhengjun Xing <zhengjun.xing@linux.intel.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b3b0809ac25c3ffedc58e7f83bc01a03193e7834
Author: Yavuz, Tuba <tuba@ece.ufl.edu>
Date:   Fri Mar 23 17:00:38 2018 +0000

    USB: gadget: f_midi: fixing a possible double-free in f_midi
    
    commit 7fafcfdf6377b18b2a726ea554d6e593ba44349f upstream.
    
    It looks like there is a possibility of a double-free vulnerability on an
    error path of the f_midi_set_alt function in the f_midi driver. If the
    path is feasible then free_ep_req gets called twice:
    
             req->complete = f_midi_complete;
             err = usb_ep_queue(midi->out_ep, req, GFP_ATOMIC);
                => ...
                 usb_gadget_giveback_request
                   =>
                     f_midi_complete (CALLBACK)
                       (inside f_midi_complete, for various cases of status)
                       free_ep_req(ep, req); // first kfree
             if (err) {
                     ERROR(midi, "%s: couldn't enqueue request: %d\n",
                                 midi->out_ep->name, err);
                     free_ep_req(midi->out_ep, req); // second kfree
                     return err;
             }
    
    The double-free possibility was introduced with commit ad0d1a058eac
    ("usb: gadget: f_midi: fix leak on failed to enqueue out requests").
    
    Found by MOXCAFE tool.
    
    Signed-off-by: Tuba Yavuz <tuba@ece.ufl.edu>
    Fixes: ad0d1a058eac ("usb: gadget: f_midi: fix leak on failed to enqueue out requests")
    Acked-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a59ba739a13f010eaecdd7a97e94dd94edefbfd8
Author: Mika Westerberg <mika.westerberg@linux.intel.com>
Date:   Mon Feb 12 13:55:23 2018 +0300

    ACPI / hotplug / PCI: Check presence of slot itself in get_slot_status()
    
    commit 13d3047c81505cc0fb9bdae7810676e70523c8bf upstream.
    
    Mike Lothian reported that plugging in a USB-C device does not work
    properly in his Dell Alienware system.  This system has an Intel Alpine
    Ridge Thunderbolt controller providing USB-C functionality.  In these
    systems the USB controller (xHCI) is hotplugged whenever a device is
    connected to the port using ACPI-based hotplug.
    
    The ACPI description of the root port in question is as follows:
    
      Device (RP01)
      {
          Name (_ADR, 0x001C0000)
    
          Device (PXSX)
          {
              Name (_ADR, 0x02)
    
              Method (_RMV, 0, NotSerialized)
              {
                  // ...
              }
          }
    
    Here _ADR 0x02 means device 0, function 2 on the bus under root port (RP01)
    but that seems to be incorrect because device 0 is the upstream port of the
    Alpine Ridge PCIe switch and it has no functions other than 0 (the bridge
    itself).  When we get ACPI Notify() to the root port resulting from
    connecting a USB-C device, Linux tries to read PCI_VENDOR_ID from device 0,
    function 2 which of course always returns 0xffffffff because there is no
    such function and we never find the device.
    
    In Windows this works fine.
    
    Now, since we get ACPI Notify() to the root port and not to the PXSX device
    we should actually start our scan from there as well and not from the
    non-existent PXSX device.  Fix this by checking presence of the slot itself
    (function 0) if we fail to do that otherwise.
    
    While there use pci_bus_read_dev_vendor_id() in get_slot_status(), which is
    the recommended way to read Device and Vendor IDs of devices on PCI buses.
    
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=198557
    Reported-by: Mike Lothian <mike@fireburn.co.uk>
    Signed-off-by: Mika Westerberg <mika.westerberg@linux.intel.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e324a44b0443ec91c86b417f3a34792d1bf58f14
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Mon Mar 19 18:01:45 2018 +0100

    ACPI / video: Add quirk to force acpi-video backlight on Samsung 670Z5E
    
    commit bbf038618a24d72e2efc19146ef421bb1e1eda1a upstream.
    
    Just like many other Samsung models, the 670Z5E needs to use the acpi-video
    backlight interface rather then the native one for backlight control to
    work, add a quirk for this.
    
    Buglink: https://bugzilla.redhat.com/show_bug.cgi?id=1557060
    Cc: All applicable <stable@vger.kernel.org>
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cddf0e1ce6c7d68e2f6e004079396a238de5f86a
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Thu Feb 8 10:23:44 2018 +0300

    regmap: Fix reversed bounds check in regmap_raw_write()
    
    commit f00e71091ab92eba52122332586c6ecaa9cd1a56 upstream.
    
    We're supposed to be checking that "val_len" is not too large but
    instead we check if it is smaller than the max.
    
    The only function affected would be regmap_i2c_smbus_i2c_write() in
    drivers/base/regmap/regmap-i2c.c.  Strangely that function has its own
    limit check which returns an error if (count >= I2C_SMBUS_BLOCK_MAX) so
    it doesn't look like it has ever been able to do anything except return
    an error.
    
    Fixes: c335931ed9d2 ("regmap: Add raw_write/read checks for max_raw_write/read sizes")
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9c78aeef4272a6ded4bbf500ae611050904daaa9
Author: Jason Andryuk <jandryuk@gmail.com>
Date:   Wed Feb 28 07:23:23 2018 -0500

    xen-netfront: Fix hang on device removal
    
    commit c2d2e6738a209f0f9dffa2dc8e7292fc45360d61 upstream.
    
    A toolstack may delete the vif frontend and backend xenstore entries
    while xen-netfront is in the removal code path.  In that case, the
    checks for xenbus_read_driver_state would return XenbusStateUnknown, and
    xennet_remove would hang indefinitely.  This hang prevents system
    shutdown.
    
    xennet_remove must be able to handle XenbusStateUnknown, and
    netback_changed must also wake up the wake_queue for that state as well.
    
    Fixes: 5b5971df3bc2 ("xen-netfront: remove warning when unloading module")
    
    Signed-off-by: Jason Andryuk <jandryuk@gmail.com>
    Cc: Eduardo Otubo <otubo@redhat.com>
    Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 34023ca384a75c064544b92bad7bd347afdb3067
Author: Maxime Chevallier <maxime.chevallier@bootlin.com>
Date:   Fri Mar 2 15:55:09 2018 +0100

    spi: Fix scatterlist elements size in spi_map_buf
    
    commit ce99319a182fe766be67f96338386f3ec73e321c upstream.
    
    When SPI transfers can be offloaded using DMA, the SPI core need to
    build a scatterlist to make sure that the buffer to be transferred is
    dma-able.
    
    This patch fixes the scatterlist entry size computation in the case
    where the maximum acceptable scatterlist entry supported by the DMA
    controller is less than PAGE_SIZE, when the buffer is vmalloced.
    
    For each entry, the actual size is given by the minimum between the
    desc_len (which is the max buffer size supported by the DMA controller)
    and the remaining buffer length until we cross a page boundary.
    
    Fixes: 65598c13fd66 ("spi: Fix per-page mapping of unaligned vmalloc-ed buffer")
    Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 61ec8502373923c3bcad5e3b35155922bfc07d75
Author: Santiago Esteban <Santiago.Esteban@microchip.com>
Date:   Thu Jan 18 15:38:47 2018 +0100

    ARM: dts: at91: sama5d4: fix pinctrl compatible string
    
    commit 9a06757dcc8509c162ac00488c8c82fc98e04227 upstream.
    
    The compatible string is incorrect. Add atmel,sama5d3-pinctrl since
    it's the appropriate compatible string. Remove the
    atmel,at91rm9200-pinctrl compatible string, this fallback is
    useless, there are too many changes.
    
    Signed-off-by: Santiago Esteban <Santiago.Esteban@microchip.com>
    Signed-off-by: Ludovic Desroches <ludovic.desroches@microchip.com>
    Cc: stable@vger.kernel.org #v3.18
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 50b4737023740a76641561ae9182485b998b1d85
Author: Marek Szyprowski <m.szyprowski@samsung.com>
Date:   Fri Mar 2 17:07:42 2018 +0100

    ARM: dts: exynos: Fix IOMMU support for GScaler devices on Exynos5250
    
    commit 6f4870753f29edf7dc39444246f9e39987b8b158 upstream.
    
    The proper name for the property, which assign given device to IOMMU is
    'iommus', not 'iommu'. Fix incorrect name and let all GScaler devices
    to be properly handled when IOMMU support is enabled.
    
    Reported-by: Andrzej Hajda <a.hajda@samsung.com>
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Fixes: 6cbfdd73a94f ("ARM: dts: add sysmmu nodes for exynos5250")
    Cc: <stable@vger.kernel.org> # v4.8+
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 078728522c49bb3bc0413cf265d1c72b6c4bf81c
Author: Nicolas Ferre <nicolas.ferre@microchip.com>
Date:   Tue Mar 13 16:20:05 2018 +0100

    ARM: dts: at91: at91sam9g25: fix mux-mask pinctrl property
    
    commit e8fd0adf105e132fd84545997bbef3d5edc2c9c1 upstream.
    
    There are only 19 PIOB pins having primary names PB0-PB18. Not all of them
    have a 'C' function. So the pinctrl property mask ends up being the same as the
    other SoC of the at91sam9x5 series.
    
    Reported-by: Marek Sieranski <marek.sieranski@microchip.com>
    Signed-off-by: Nicolas Ferre <nicolas.ferre@microchip.com>
    Cc: <stable@vger.kernel.org> # v3.8+
    Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ba260ce74cb8acef791563a7d3f1445fe06d6805
Author: Felipe Balbi <felipe.balbi@linux.intel.com>
Date:   Mon Mar 26 13:14:46 2018 +0300

    usb: gadget: udc: core: update usb_ep_queue() documentation
    
    commit eaa358c7790338d83bb6a31258bdc077de120414 upstream.
    
    Mention that ->complete() should never be called from within
    usb_ep_queue().
    
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a576d7fea68be666b2a0d2104ddf936d587e65de
Author: Heinrich Schuchardt <xypron.glpk@gmx.de>
Date:   Thu Mar 29 10:48:28 2018 -0500

    usb: musb: gadget: misplaced out of bounds check
    
    commit af6f8529098aeb0e56a68671b450cf74e7a64fcd upstream.
    
    musb->endpoints[] has array size MUSB_C_NUM_EPS.
    We must check array bounds before accessing the array and not afterwards.
    
    Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
    Signed-off-by: Bin Liu <b-liu@ti.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 75e6359a1be39ae7cc964603a112f38b9110655a
Author: Vlastimil Babka <vbabka@suse.cz>
Date:   Fri Apr 13 15:35:38 2018 -0700

    mm, slab: reschedule cache_reap() on the same CPU
    
    commit a9f2a846f0503e7d729f552e3ccfe2279010fe94 upstream.
    
    cache_reap() is initially scheduled in start_cpu_timer() via
    schedule_delayed_work_on(). But then the next iterations are scheduled
    via schedule_delayed_work(), i.e. using WORK_CPU_UNBOUND.
    
    Thus since commit ef557180447f ("workqueue: schedule WORK_CPU_UNBOUND
    work on wq_unbound_cpumask CPUs") there is no guarantee the future
    iterations will run on the originally intended cpu, although it's still
    preferred.  I was able to demonstrate this with
    /sys/module/workqueue/parameters/debug_force_rr_cpu.  IIUC, it may also
    happen due to migrating timers in nohz context.  As a result, some cpu's
    would be calling cache_reap() more frequently and others never.
    
    This patch uses schedule_delayed_work_on() with the current cpu when
    scheduling the next iteration.
    
    Link: http://lkml.kernel.org/r/20180411070007.32225-1-vbabka@suse.cz
    Fixes: ef557180447f ("workqueue: schedule WORK_CPU_UNBOUND work on wq_unbound_cpumask CPUs")
    Signed-off-by: Vlastimil Babka <vbabka@suse.cz>
    Acked-by: Pekka Enberg <penberg@kernel.org>
    Acked-by: Christoph Lameter <cl@linux.com>
    Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: Lai Jiangshan <jiangshanlai@gmail.com>
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Stephen Boyd <sboyd@kernel.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 570ef10de6304dc20239d30a47b36c12e341d4be
Author: Eric Biggers <ebiggers@google.com>
Date:   Fri Apr 13 15:35:30 2018 -0700

    ipc/shm: fix use-after-free of shm file via remap_file_pages()
    
    commit 3f05317d9889ab75c7190dcd39491d2a97921984 upstream.
    
    syzbot reported a use-after-free of shm_file_data(file)->file->f_op in
    shm_get_unmapped_area(), called via sys_remap_file_pages().
    
    Unfortunately it couldn't generate a reproducer, but I found a bug which
    I think caused it.  When remap_file_pages() is passed a full System V
    shared memory segment, the memory is first unmapped, then a new map is
    created using the ->vm_file.  Between these steps, the shm ID can be
    removed and reused for a new shm segment.  But, shm_mmap() only checks
    whether the ID is currently valid before calling the underlying file's
    ->mmap(); it doesn't check whether it was reused.  Thus it can use the
    wrong underlying file, one that was already freed.
    
    Fix this by making the "outer" shm file (the one that gets put in
    ->vm_file) hold a reference to the real shm file, and by making
    __shm_open() require that the file associated with the shm ID matches
    the one associated with the "outer" file.
    
    Taking the reference to the real shm file is needed to fully solve the
    problem, since otherwise sfd->file could point to a freed file, which
    then could be reallocated for the reused shm ID, causing the wrong shm
    segment to be mapped (and without the required permission checks).
    
    Commit 1ac0b6dec656 ("ipc/shm: handle removed segments gracefully in
    shm_mmap()") almost fixed this bug, but it didn't go far enough because
    it didn't consider the case where the shm ID is reused.
    
    The following program usually reproduces this bug:
    
            #include <stdlib.h>
            #include <sys/shm.h>
            #include <sys/syscall.h>
            #include <unistd.h>
    
            int main()
            {
                    int is_parent = (fork() != 0);
                    srand(getpid());
                    for (;;) {
                            int id = shmget(0xF00F, 4096, IPC_CREAT|0700);
                            if (is_parent) {
                                    void *addr = shmat(id, NULL, 0);
                                    usleep(rand() % 50);
                                    while (!syscall(__NR_remap_file_pages, addr, 4096, 0, 0, 0));
                            } else {
                                    usleep(rand() % 50);
                                    shmctl(id, IPC_RMID, NULL);
                            }
                    }
            }
    
    It causes the following NULL pointer dereference due to a 'struct file'
    being used while it's being freed.  (I couldn't actually get a KASAN
    use-after-free splat like in the syzbot report.  But I think it's
    possible with this bug; it would just take a more extraordinary race...)
    
            BUG: unable to handle kernel NULL pointer dereference at 0000000000000058
            PGD 0 P4D 0
            Oops: 0000 [#1] SMP NOPTI
            CPU: 9 PID: 258 Comm: syz_ipc Not tainted 4.16.0-05140-gf8cf2f16a7c95 #189
            Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.11.0-20171110_100015-anatol 04/01/2014
            RIP: 0010:d_inode include/linux/dcache.h:519 [inline]
            RIP: 0010:touch_atime+0x25/0xd0 fs/inode.c:1724
            [...]
            Call Trace:
             file_accessed include/linux/fs.h:2063 [inline]
             shmem_mmap+0x25/0x40 mm/shmem.c:2149
             call_mmap include/linux/fs.h:1789 [inline]
             shm_mmap+0x34/0x80 ipc/shm.c:465
             call_mmap include/linux/fs.h:1789 [inline]
             mmap_region+0x309/0x5b0 mm/mmap.c:1712
             do_mmap+0x294/0x4a0 mm/mmap.c:1483
             do_mmap_pgoff include/linux/mm.h:2235 [inline]
             SYSC_remap_file_pages mm/mmap.c:2853 [inline]
             SyS_remap_file_pages+0x232/0x310 mm/mmap.c:2769
             do_syscall_64+0x64/0x1a0 arch/x86/entry/common.c:287
             entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    [ebiggers@google.com: add comment]
      Link: http://lkml.kernel.org/r/20180410192850.235835-1-ebiggers3@gmail.com
    Link: http://lkml.kernel.org/r/20180409043039.28915-1-ebiggers3@gmail.com
    Reported-by: syzbot+d11f321e7f1923157eac80aa990b446596f46439@syzkaller.appspotmail.com
    Fixes: c8d78c1823f4 ("mm: replace remap_file_pages() syscall with emulation")
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Acked-by: Davidlohr Bueso <dbueso@suse.de>
    Cc: Manfred Spraul <manfred@colorfullife.com>
    Cc: "Eric W . Biederman" <ebiederm@xmission.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0df9b12d7790ccf259c24e8ad92abcfa8da2e0f7
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Apr 13 15:35:13 2018 -0700

    resource: fix integer overflow at reallocation
    
    commit 60bb83b81169820c691fbfa33a6a4aef32aa4b0b upstream.
    
    We've got a bug report indicating a kernel panic at booting on an x86-32
    system, and it turned out to be the invalid PCI resource assigned after
    reallocation.  __find_resource() first aligns the resource start address
    and resets the end address with start+size-1 accordingly, then checks
    whether it's contained.  Here the end address may overflow the integer,
    although resource_contains() still returns true because the function
    validates only start and end address.  So this ends up with returning an
    invalid resource (start > end).
    
    There was already an attempt to cover such a problem in the commit
    47ea91b4052d ("Resource: fix wrong resource window calculation"), but
    this case is an overseen one.
    
    This patch adds the validity check of the newly calculated resource for
    avoiding the integer overflow problem.
    
    Bugzilla: http://bugzilla.opensuse.org/show_bug.cgi?id=1086739
    Link: http://lkml.kernel.org/r/s5hpo37d5l8.wl-tiwai@suse.de
    Fixes: 23c570a67448 ("resource: ability to resize an allocated resource")
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Reported-by: Michael Henders <hendersm@shaw.ca>
    Tested-by: Michael Henders <hendersm@shaw.ca>
    Reviewed-by: Andrew Morton <akpm@linux-foundation.org>
    Cc: Ram Pai <linuxram@us.ibm.com>
    Cc: Bjorn Helgaas <bhelgaas@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 52b329d678e8495bda4d943df6444403f41c57ff
Author: Andrew Morton <akpm@linux-foundation.org>
Date:   Tue Apr 10 16:34:41 2018 -0700

    fs/reiserfs/journal.c: add missing resierfs_warning() arg
    
    commit 9ad553abe66f8be3f4755e9fa0a6ba137ce76341 upstream.
    
    One use of the reiserfs_warning() macro in journal_init_dev() is missing
    a parameter, causing the following warning:
    
      REISERFS warning (device loop0): journal_init_dev: Cannot open '%s': %i journal_init_dev:
    
    This also causes a WARN_ONCE() warning in the vsprintf code, and then a
    panic if panic_on_warn is set.
    
      Please remove unsupported %/ in format string
      WARNING: CPU: 1 PID: 4480 at lib/vsprintf.c:2138 format_decode+0x77f/0x830 lib/vsprintf.c:2138
      Kernel panic - not syncing: panic_on_warn set ...
    
    Just add another string argument to the macro invocation.
    
    Addresses https://syzkaller.appspot.com/bug?id=0627d4551fdc39bf1ef5d82cd9eef587047f7718
    
    Link: http://lkml.kernel.org/r/d678ebe1-6f54-8090-df4c-b9affad62293@infradead.org
    Signed-off-by: Randy Dunlap <rdunlap@infradead.org>
    Reported-by: <syzbot+6bd77b88c1977c03f584@syzkaller.appspotmail.com>
    Tested-by: Randy Dunlap <rdunlap@infradead.org>
    Acked-by: Jeff Mahoney <jeffm@suse.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Jan Kara <jack@suse.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c64c4c81aed52fc84be225ce47863a41eb4f7bb6
Author: Richard Weinberger <richard@nod.at>
Date:   Sat Mar 3 11:45:54 2018 +0100

    ubi: Reject MLC NAND
    
    commit b5094b7f135be34630e3ea8a98fa215715d0f29d upstream.
    
    While UBI and UBIFS seem to work at first sight with MLC NAND, you will
    most likely lose all your data upon a power-cut or due to read/write
    disturb.
    In order to protect users from bad surprises, refuse to attach to MLC
    NAND.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Acked-by: Boris Brezillon <boris.brezillon@bootlin.com>
    Acked-by: Artem Bityutskiy <dedekind1@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 434a1dd2c0e4f6af3fa4ca9cc3e88bbf07b8f41c
Author: Romain Izard <romain.izard.pro@gmail.com>
Date:   Mon Jan 29 11:18:20 2018 +0100

    ubi: Fix error for write access
    
    commit 78a8dfbabbece22bee58ac4cb26cab10e7a19c5d upstream.
    
    When opening a device with write access, ubiblock_open returns an error
    code. Currently, this error code is -EPERM, but this is not the right
    value.
    
    The open function for other block devices returns -EROFS when opening
    read-only devices with FMODE_WRITE set. When used with dm-verity, the
    veritysetup userspace tool is expecting EROFS, and refuses to use the
    ubiblock device.
    
    Use -EROFS for ubiblock as well. As a result, veritysetup accepts the
    ubiblock device as valid.
    
    Cc: stable@vger.kernel.org
    Fixes: 9d54c8a33eec (UBI: R/O block driver on top of UBI volumes)
    Signed-off-by: Romain Izard <romain.izard.pro@gmail.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 00f308c0eea4d2f7bc5bb3b9d0947f2219f53760
Author: Richard Weinberger <richard@nod.at>
Date:   Wed Jan 17 23:15:57 2018 +0100

    ubi: fastmap: Don't flush fastmap work on detach
    
    commit 29b7a6fa1ec07e8480b0d9caf635a4498a438bf4 upstream.
    
    At this point UBI volumes have already been free()'ed and fastmap can no
    longer access these data structures.
    
    Reported-by: Martin Townsend <mtownsend1973@gmail.com>
    Fixes: 74cdaf24004a ("UBI: Fastmap: Fix memory leaks while closing the WL sub-system")
    Cc: stable@vger.kernel.org
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cf1595d865e78fa2f5ecf314e403aa539d71529c
Author: Richard Weinberger <richard@nod.at>
Date:   Wed Jan 17 19:12:42 2018 +0100

    ubifs: Check ubifs_wbuf_sync() return code
    
    commit aac17948a7ce01fb60b9ee6cf902967a47b3ce26 upstream.
    
    If ubifs_wbuf_sync() fails we must not write a master node with the
    dirty marker cleared.
    Otherwise it is possible that in case of an IO error while syncing we
    mark the filesystem as clean and UBIFS refuses to recover upon next
    mount.
    
    Cc: <stable@vger.kernel.org>
    Fixes: 1e51764a3c2a ("UBIFS: add new flash file system")
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a7e19062d115e3acf71649a1fba6d5c7d65be3d1
Author: Tejun Heo <tj@kernel.org>
Date:   Tue Feb 13 07:38:08 2018 -0800

    tty: make n_tty_read() always abort if hangup is in progress
    
    commit 28b0f8a6962a24ed21737578f3b1b07424635c9e upstream.
    
    A tty is hung up by __tty_hangup() setting file->f_op to
    hung_up_tty_fops, which is skipped on ttys whose write operation isn't
    tty_write().  This means that, for example, /dev/console whose write
    op is redirected_tty_write() is never actually marked hung up.
    
    Because n_tty_read() uses the hung up status to decide whether to
    abort the waiting readers, the lack of hung-up marking can lead to the
    following scenario.
    
     1. A session contains two processes.  The leader and its child.  The
        child ignores SIGHUP.
    
     2. The leader exits and starts disassociating from the controlling
        terminal (/dev/console).
    
     3. __tty_hangup() skips setting f_op to hung_up_tty_fops.
    
     4. SIGHUP is delivered and ignored.
    
     5. tty_ldisc_hangup() is invoked.  It wakes up the waits which should
        clear the read lockers of tty->ldisc_sem.
    
     6. The reader wakes up but because tty_hung_up_p() is false, it
        doesn't abort and goes back to sleep while read-holding
        tty->ldisc_sem.
    
     7. The leader progresses to tty_ldisc_lock() in tty_ldisc_hangup()
        and is now stuck in D sleep indefinitely waiting for
        tty->ldisc_sem.
    
    The following is Alan's explanation on why some ttys aren't hung up.
    
     http://lkml.kernel.org/r/20171101170908.6ad08580@alans-desktop
    
     1. It broke the serial consoles because they would hang up and close
        down the hardware. With tty_port that *should* be fixable properly
        for any cases remaining.
    
     2. The console layer was (and still is) completely broken and doens't
        refcount properly. So if you turn on console hangups it breaks (as
        indeed does freeing consoles and half a dozen other things).
    
    As neither can be fixed quickly, this patch works around the problem
    by introducing a new flag, TTY_HUPPING, which is used solely to tell
    n_tty_read() that hang-up is in progress for the console and the
    readers should be aborted regardless of the hung-up status of the
    device.
    
    The following is a sample hung task warning caused by this issue.
    
      INFO: task agetty:2662 blocked for more than 120 seconds.
            Not tainted 4.11.3-dbg-tty-lockup-02478-gfd6c7ee-dirty #28
      "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disables this message.
          0  2662      1 0x00000086
      Call Trace:
       __schedule+0x267/0x890
       schedule+0x36/0x80
       schedule_timeout+0x23c/0x2e0
       ldsem_down_write+0xce/0x1f6
       tty_ldisc_lock+0x16/0x30
       tty_ldisc_hangup+0xb3/0x1b0
       __tty_hangup+0x300/0x410
       disassociate_ctty+0x6c/0x290
       do_exit+0x7ef/0xb00
       do_group_exit+0x3f/0xa0
       get_signal+0x1b3/0x5d0
       do_signal+0x28/0x660
       exit_to_usermode_loop+0x46/0x86
       do_syscall_64+0x9c/0xb0
       entry_SYSCALL64_slow_path+0x25/0x25
    
    The following is the repro.  Run "$PROG /dev/console".  The parent
    process hangs in D state.
    
      #include <sys/types.h>
      #include <sys/stat.h>
      #include <sys/wait.h>
      #include <sys/ioctl.h>
      #include <fcntl.h>
      #include <unistd.h>
      #include <stdio.h>
      #include <stdlib.h>
      #include <errno.h>
      #include <signal.h>
      #include <time.h>
      #include <termios.h>
    
      int main(int argc, char **argv)
      {
              struct sigaction sact = { .sa_handler = SIG_IGN };
              struct timespec ts1s = { .tv_sec = 1 };
              pid_t pid;
              int fd;
    
              if (argc < 2) {
                      fprintf(stderr, "test-hung-tty /dev/$TTY\n");
                      return 1;
              }
    
              /* fork a child to ensure that it isn't already the session leader */
              pid = fork();
              if (pid < 0) {
                      perror("fork");
                      return 1;
              }
    
              if (pid > 0) {
                      /* top parent, wait for everyone */
                      while (waitpid(-1, NULL, 0) >= 0)
                              ;
                      if (errno != ECHILD)
                              perror("waitpid");
                      return 0;
              }
    
              /* new session, start a new session and set the controlling tty */
              if (setsid() < 0) {
                      perror("setsid");
                      return 1;
              }
    
              fd = open(argv[1], O_RDWR);
              if (fd < 0) {
                      perror("open");
                      return 1;
              }
    
              if (ioctl(fd, TIOCSCTTY, 1) < 0) {
                      perror("ioctl");
                      return 1;
              }
    
              /* fork a child, sleep a bit and exit */
              pid = fork();
              if (pid < 0) {
                      perror("fork");
                      return 1;
              }
    
              if (pid > 0) {
                      nanosleep(&ts1s, NULL);
                      printf("Session leader exiting\n");
                      exit(0);
              }
    
              /*
               * The child ignores SIGHUP and keeps reading from the controlling
               * tty.  Because SIGHUP is ignored, the child doesn't get killed on
               * parent exit and the bug in n_tty makes the read(2) block the
               * parent's control terminal hangup attempt.  The parent ends up in
               * D sleep until the child is explicitly killed.
               */
              sigaction(SIGHUP, &sact, NULL);
              printf("Child reading tty\n");
              while (1) {
                      char buf[1024];
    
                      if (read(fd, buf, sizeof(buf)) < 0) {
                              perror("read");
                              return 1;
                      }
              }
    
              return 0;
      }
    
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Alan Cox <alan@llwyncelyn.cymru>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>