commit 8e2def054b2b088d18d7009aecf470aa62ab360e
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Tue Apr 24 09:32:12 2018 +0200

    Linux 4.4.129

commit 6f051f8986a89d0c482ea1dfc96bc226fb12389f
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: Applied to 4.4 based on Greg's backport on lkml.org]
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 87d7ccbf09a7846818c30edf9bc8192719bfb05f
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 a529f29a3ea9cb7e2c90053c02c8213f527374df
Author: wangguang <wang.guang55@zte.com.cn>
Date:   Thu Sep 15 11:32:46 2016 -0400

    ext4: bugfix for mmaped pages in mpage_release_unused_pages()
    
    commit 4e800c0359d9a53e6bf0ab216954971b2515247f upstream.
    
    Pages clear buffers after ext4 delayed block allocation failed,
    However, it does not clean its pte_dirty flag.
    if the pages unmap ,in cording to the pte_dirty ,
    unmap_page_range may try to call __set_page_dirty,
    
    which may lead to the bugon at
    mpage_prepare_extent_to_map:head = page_buffers(page);.
    
    This patch just call clear_page_dirty_for_io to clean pte_dirty
    at mpage_release_unused_pages for pages mmaped.
    
    Steps to reproduce the bug:
    
    (1) mmap a file in ext4
            addr = (char *)mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_SHARED,
                                fd, 0);
            memset(addr, 'i', 4096);
    
    (2) return EIO at
    
            ext4_writepages->mpage_map_and_submit_extent->mpage_map_one_extent
    
    which causes this log message to be print:
    
                    ext4_msg(sb, KERN_CRIT,
                            "Delayed block allocation failed for "
                            "inode %lu at logical offset %llu with"
                            " max blocks %u with error %d",
                            inode->i_ino,
                            (unsigned long long)map->m_lblk,
                            (unsigned)map->m_len, -err);
    
    (3)Unmap the addr cause warning at
    
            __set_page_dirty:WARN_ON_ONCE(warn && !PageUptodate(page));
    
    (4) wait for a minute,then bugon happen.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: wangguang <wangguang03@zte.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    [@nathanchance: Resolved conflict from lack of 09cbfeaf1a5a6]
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d47a5ca386aaa6b8d17c7b8cdbdc7d2631c68278
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 820ca5772277c6690e18d48042a9569942d336bd
Author: Michal Hocko <mhocko@suse.com>
Date:   Thu Jan 14 15:20:12 2016 -0800

    mm: allow GFP_{FS,IO} for page_cache_read page cache allocation
    
    commit c20cd45eb01748f0fba77a504f956b000df4ea73 upstream.
    
    page_cache_read has been historically using page_cache_alloc_cold to
    allocate a new page.  This means that mapping_gfp_mask is used as the
    base for the gfp_mask.  Many filesystems are setting this mask to
    GFP_NOFS to prevent from fs recursion issues.  page_cache_read is called
    from the vm_operations_struct::fault() context during the page fault.
    This context doesn't need the reclaim protection normally.
    
    ceph and ocfs2 which call filemap_fault from their fault handlers seem
    to be OK because they are not taking any fs lock before invoking generic
    implementation.  xfs which takes XFS_MMAPLOCK_SHARED is safe from the
    reclaim recursion POV because this lock serializes truncate and punch
    hole with the page faults and it doesn't get involved in the reclaim.
    
    There is simply no reason to deliberately use a weaker allocation
    context when a __GFP_FS | __GFP_IO can be used.  The GFP_NOFS protection
    might be even harmful.  There is a push to fail GFP_NOFS allocations
    rather than loop within allocator indefinitely with a very limited
    reclaim ability.  Once we start failing those requests the OOM killer
    might be triggered prematurely because the page cache allocation failure
    is propagated up the page fault path and end up in
    pagefault_out_of_memory.
    
    We cannot play with mapping_gfp_mask directly because that would be racy
    wrt.  parallel page faults and it might interfere with other users who
    really rely on NOFS semantic from the stored gfp_mask.  The mask is also
    inode proper so it would even be a layering violation.  What we can do
    instead is to push the gfp_mask into struct vm_fault and allow fs layer
    to overwrite it should the callback need to be called with a different
    allocation context.
    
    Initialize the default to (mapping_gfp_mask | __GFP_FS | __GFP_IO)
    because this should be safe from the page fault path normally.  Why do
    we care about mapping_gfp_mask at all then? Because this doesn't hold
    only reclaim protection flags but it also might contain zone and
    movability restrictions (GFP_DMA32, __GFP_MOVABLE and others) so we have
    to respect those.
    
    Signed-off-by: Michal Hocko <mhocko@suse.com>
    Reported-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Acked-by: Jan Kara <jack@suse.com>
    Acked-by: Vlastimil Babka <vbabka@suse.cz>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Dave Chinner <david@fromorbit.com>
    Cc: Mark Fasheh <mfasheh@suse.com>
    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 ce98dd37cc5d5bcfde9ae899113e5f90d93f8acf
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 d10a274ada79aa5612126a77f10fa0c3af33bdb6
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 20e96d9038ca54a738561aa8b4c06fd84349e730
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 873b214be5693bdafcfe5ff205d6ace37e1e3ecd
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 2154ecea6d72f9290d201fed637afb5178db5665
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 263b8d4ebe5b0632a82a7cfe9e82e49af85b2a91
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 286427ed951d5673f171f007a29deb7b4abee694
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 d37aca471b6fa59cd7d52a9c4d1de12149d713cd
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 af878d5176be5df2c2d84d1e86a3722c8f638207
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 be204694cad3827d230b6dcd9f6fc83f3c7caeab
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 6a5722cb3043570b6d9664634ca5fed9188fd027
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 7c3a5626fd5c704c8deaeedcbf837579781dc6d2
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 cebd9b67fe0bdbb55b45533a3d911b86bde88174
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 fc338748e3e7740113c1c26e2248d919dd8cc05c
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 68fc6f74b516447bbbddde1b08437787d0063c6d
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 9b06cce3ca4d60d442c39bfa7c058b71b1cee6c2
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Wed Jan 11 21:50:46 2017 -0500

    ext4: fix deadlock between inline_data and ext4_expand_extra_isize_ea()
    
    commit c755e251357a0cee0679081f08c3f4ba797a8009 upstream.
    
    The xattr_sem deadlock problems fixed in commit 2e81a4eeedca: "ext4:
    avoid deadlock when expanding inode size" didn't include the use of
    xattr_sem in fs/ext4/inline.c.  With the addition of project quota
    which added a new extra inode field, this exposed deadlocks in the
    inline_data code similar to the ones fixed by 2e81a4eeedca.
    
    The deadlock can be reproduced via:
    
       dmesg -n 7
       mke2fs -t ext4 -O inline_data -Fq -I 256 /dev/vdc 32768
       mount -t ext4 -o debug_want_extra_isize=24 /dev/vdc /vdc
       mkdir /vdc/a
       umount /vdc
       mount -t ext4 /dev/vdc /vdc
       echo foo > /vdc/a/foo
    
    and looks like this:
    
    [   11.158815]
    [   11.160276] =============================================
    [   11.161960] [ INFO: possible recursive locking detected ]
    [   11.161960] 4.10.0-rc3-00015-g011b30a8a3cf #160 Tainted: G        W
    [   11.161960] ---------------------------------------------
    [   11.161960] bash/2519 is trying to acquire lock:
    [   11.161960]  (&ei->xattr_sem){++++..}, at: [<c1225a4b>] ext4_expand_extra_isize_ea+0x3d/0x4cd
    [   11.161960]
    [   11.161960] but task is already holding lock:
    [   11.161960]  (&ei->xattr_sem){++++..}, at: [<c1227941>] ext4_try_add_inline_entry+0x3a/0x152
    [   11.161960]
    [   11.161960] other info that might help us debug this:
    [   11.161960]  Possible unsafe locking scenario:
    [   11.161960]
    [   11.161960]        CPU0
    [   11.161960]        ----
    [   11.161960]   lock(&ei->xattr_sem);
    [   11.161960]   lock(&ei->xattr_sem);
    [   11.161960]
    [   11.161960]  *** DEADLOCK ***
    [   11.161960]
    [   11.161960]  May be due to missing lock nesting notation
    [   11.161960]
    [   11.161960] 4 locks held by bash/2519:
    [   11.161960]  #0:  (sb_writers#3){.+.+.+}, at: [<c11a2414>] mnt_want_write+0x1e/0x3e
    [   11.161960]  #1:  (&type->i_mutex_dir_key){++++++}, at: [<c119508b>] path_openat+0x338/0x67a
    [   11.161960]  #2:  (jbd2_handle){++++..}, at: [<c123314a>] start_this_handle+0x582/0x622
    [   11.161960]  #3:  (&ei->xattr_sem){++++..}, at: [<c1227941>] ext4_try_add_inline_entry+0x3a/0x152
    [   11.161960]
    [   11.161960] stack backtrace:
    [   11.161960] CPU: 0 PID: 2519 Comm: bash Tainted: G        W       4.10.0-rc3-00015-g011b30a8a3cf #160
    [   11.161960] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.1-1 04/01/2014
    [   11.161960] Call Trace:
    [   11.161960]  dump_stack+0x72/0xa3
    [   11.161960]  __lock_acquire+0xb7c/0xcb9
    [   11.161960]  ? kvm_clock_read+0x1f/0x29
    [   11.161960]  ? __lock_is_held+0x36/0x66
    [   11.161960]  ? __lock_is_held+0x36/0x66
    [   11.161960]  lock_acquire+0x106/0x18a
    [   11.161960]  ? ext4_expand_extra_isize_ea+0x3d/0x4cd
    [   11.161960]  down_write+0x39/0x72
    [   11.161960]  ? ext4_expand_extra_isize_ea+0x3d/0x4cd
    [   11.161960]  ext4_expand_extra_isize_ea+0x3d/0x4cd
    [   11.161960]  ? _raw_read_unlock+0x22/0x2c
    [   11.161960]  ? jbd2_journal_extend+0x1e2/0x262
    [   11.161960]  ? __ext4_journal_get_write_access+0x3d/0x60
    [   11.161960]  ext4_mark_inode_dirty+0x17d/0x26d
    [   11.161960]  ? ext4_add_dirent_to_inline.isra.12+0xa5/0xb2
    [   11.161960]  ext4_add_dirent_to_inline.isra.12+0xa5/0xb2
    [   11.161960]  ext4_try_add_inline_entry+0x69/0x152
    [   11.161960]  ext4_add_entry+0xa3/0x848
    [   11.161960]  ? __brelse+0x14/0x2f
    [   11.161960]  ? _raw_spin_unlock_irqrestore+0x44/0x4f
    [   11.161960]  ext4_add_nondir+0x17/0x5b
    [   11.161960]  ext4_create+0xcf/0x133
    [   11.161960]  ? ext4_mknod+0x12f/0x12f
    [   11.161960]  lookup_open+0x39e/0x3fb
    [   11.161960]  ? __wake_up+0x1a/0x40
    [   11.161960]  ? lock_acquire+0x11e/0x18a
    [   11.161960]  path_openat+0x35c/0x67a
    [   11.161960]  ? sched_clock_cpu+0xd7/0xf2
    [   11.161960]  do_filp_open+0x36/0x7c
    [   11.161960]  ? _raw_spin_unlock+0x22/0x2c
    [   11.161960]  ? __alloc_fd+0x169/0x173
    [   11.161960]  do_sys_open+0x59/0xcc
    [   11.161960]  SyS_open+0x1d/0x1f
    [   11.161960]  do_int80_syscall_32+0x4f/0x61
    [   11.161960]  entry_INT80_32+0x2f/0x2f
    [   11.161960] EIP: 0xb76ad469
    [   11.161960] EFLAGS: 00000286 CPU: 0
    [   11.161960] EAX: ffffffda EBX: 08168ac8 ECX: 00008241 EDX: 000001b6
    [   11.161960] ESI: b75e46bc EDI: b7755000 EBP: bfbdb108 ESP: bfbdafc0
    [   11.161960]  DS: 007b ES: 007b FS: 0000 GS: 0033 SS: 007b
    
    Cc: stable@vger.kernel.org # 3.10 (requires 2e81a4eeedca as a prereq)
    Reported-by: George Spelvin <linux@sciencehorizons.net>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b9b98c26705b8d5fba8f15faeb923b1c6f48d223
Author: Jan Kara <jack@suse.cz>
Date:   Fri Feb 19 00:33:21 2016 -0500

    ext4: fix crashes in dioread_nolock mode
    
    commit 74dae4278546b897eb81784fdfcce872ddd8b2b8 upstream.
    
    Competing overwrite DIO in dioread_nolock mode will just overwrite
    pointer to io_end in the inode. This may result in data corruption or
    extent conversion happening from IO completion interrupt because we
    don't properly set buffer_defer_completion() when unlocked DIO races
    with locked DIO to unwritten extent.
    
    Since unlocked DIO doesn't need io_end for anything, just avoid
    allocating it and corrupting pointer from inode for locked DIO.
    A cleaner fix would be to avoid these games with io_end pointer from the
    inode but that requires more intrusive changes so we leave that for
    later.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Nathan Chancellor <natechancellor@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ba250be92484186b63ad52b7f9bcb66662e7ff2d
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 4845fefe6d13a28702f92102dff11c1b773f00d0
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 7b0278ca9f280cab9a6fe2ca8c868db8df951427
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 737e33da96b4bcd54bc7cc98d4d27cc694f67024
Author: Alex Williamson <alex.williamson@redhat.com>
Date:   Mon Oct 2 12:39:09 2017 -0600

    vfio/pci: Virtualize Maximum Payload Size
    
    commit 523184972b282cd9ca17a76f6ca4742394856818 upstream.
    
    With virtual PCI-Express chipsets, we now see userspace/guest drivers
    trying to match the physical MPS setting to a virtual downstream port.
    Of course a lone physical device surrounded by virtual interconnects
    cannot make a correct decision for a proper MPS setting.  Instead,
    let's virtualize the MPS control register so that writes through to
    hardware are disallowed.  Userspace drivers like QEMU assume they can
    write anything to the device and we'll filter out anything dangerous.
    Since mismatched MPS can lead to AER and other faults, let's add it
    to the kernel side rather than relying on userspace virtualization to
    handle it.
    
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Reviewed-by: Eric Auger <eric.auger@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1639df89e6b5841975bbf2f98200248df3210f85
Author: Alex Williamson <alex.williamson@redhat.com>
Date:   Mon Sep 26 13:52:16 2016 -0600

    vfio-pci: Virtualize PCIe & AF FLR
    
    commit ddf9dc0eb5314d6dac8b19b1cc37c739c6896e7e upstream.
    
    We use a BAR restore trick to try to detect when a user has performed
    a device reset, possibly through FLR or other backdoors, to put things
    back into a working state.  This is important for backdoor resets, but
    we can actually just virtualize the "front door" resets provided via
    PCIe and AF FLR.  Set these bits as virtualized + writable, allowing
    the default write to set them in vconfig, then we can simply check the
    bit, perform an FLR of our own, and clear the bit.  We don't actually
    have the granularity in PCI to specify the type of reset we want to
    do, but generally devices don't implement both PCIe and AF FLR and
    we'll favor these over other types of reset, so we should generally
    lineup.  We do test whether the device provides the requested FLR type
    to stay consistent with hardware capabilities though.
    
    This seems to fix several instance of devices getting into bad states
    with userspace drivers, like dpdk, running inside a VM.
    
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    Reviewed-by: Greg Rose <grose@lightfleet.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0c8c443eb10937f98b47a4c82a75982593359ee0
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 a2b3309a2c1c58560abd3eef1f2a0ff47713e3bd
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 68ba825a3988d4c491953f3792f13da74e302963
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 f3e4c937c8b7c309abc6d8b98ddcc5bfabd0a653
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 60dd12fdf0e80e4399783f622392c1db84c5d8f6
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 4a12b4e2bb49518eba08bf269df8f8d0bb163e55
Author: Nicholas Mc Guire <hofrat@osadl.org>
Date:   Sat Dec 19 15:23:13 2015 +0100

    ALSA: oss: consolidate kmalloc/memset 0 call to kzalloc
    
    commit 46325371b230cc66c743925c930a17e7d0b8211e upstream.
    
    This is an API consolidation only. The use of kmalloc + memset to 0
    is equivalent to kzalloc.
    
    Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4533f7e1785faab49c867ae19bf00840fe351b0c
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 8af69306a7b7286d98d0354e9128f3e3bc30f07e
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 5fd7232783fcbf8945a5cabb4276467a6b87750c
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 b7b4411c8990623148aa97e5ca8c99abef11d28e
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 caf996ebc7962864978043add39deed63881e0cc
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 3f0491bb892eaa8a5364b38c651f02744b47ce63
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 a7e67521c4f2074a8a2d21dd5bd3fb01d86c4d6f
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 4cc90ae05e9b0520edef9aa756edb400bef6838e
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 5c90515d520a6c23ed0605d7185f8cc2b47f799d
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 7a113a311b135b5e07410499074c3ab1d91999c6
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 6931ced5d5ad430f2c7f6d2d7ca52c1058482a3c
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 bb256eeaec50d26413822ab8ef1fa51789fa0a2c
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 fe8fd32fb234272097104fe0a88fe126becfe5ff
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 990251318b97ed7153d9adbf633035536c7d685b
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 51e3b81b386104e1e088dd3abfb3d0c2a93d7631
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 10c624084758db770986de190dc9b387dfdb49c0
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 010f0fb42c2a19b71405ead2009164e4dcf78a00
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 00cf298fae0bcee000bad030574b70307175219b
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 9a8b65d4aaacde8344acb9073900eeccedc69827
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 60f6c860c25892b4a1c8791cec0427af0d96bf86
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 8d7610e122885386c4004dd0b5aca3e8928a1e50
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 dace93d0f8d00412a1d13848a7958c9c7a634289
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 16d770bd91fc1c9659639adb2bd4c614934fc9be
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 dcc29e3f43fa46acd746203ea1153af39a60ecb1
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 c8d4770e46042457ebea2b1786d878f3e6831423
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 dbae9a8dae744af765527099e685e22e6fbc46eb
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 0ab6b8c91ecfbe8d2c4fb5119d6f67b12e1be2cc
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 b286fd4a7d0849dc9d48d099d7ba6250894a7536
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 63aa8d8968331fa53d05491f812879a8d7fe3c69
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 bd69c85f1f133d1a54b87ad30aef4e98e60c17e6
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 d8ad6cb0222cb8ef107af59e574614d5bd447a55
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 4c65e94eb476b8e7d806d7e36ca1f5f789e9804a
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 318a306c53d17fa333d888d29c45268c6a8b1783
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 31118e88019feb54b3457c57252d96a250d6d68b
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 e23007895028b0cb73dc28d5b4e7fa5976a0dfab
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 5a310ab03d5a8fc4fb2d90133a383c2a3474da38
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 b7e06a79c2e3a7e16ad1ed4887cad9a103ca355d
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 0a2f9fe1b663c9c8e9fee7436bfab013270451da
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 bc6305c0fa911d1af1be896e7222431a07112d15
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 78cc9472ae1995d50c1d1382bebbb906c8d02ac2
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 782635ba966ee2adc898adb9af2bc240b1aded43
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 75ee85667473444fe10765850e4edc2727f9da75
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 a4e98ec002e1c5d1691a2ef8a35c8b5006cdc87e
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 12ed237ccc0518a867bb6ba8d624865dfb44620c
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>

commit 34a6851c55f72b3121b2c3d2d26ce61cc5869182
Author: Ville Syrjälä <ville.syrjala@linux.intel.com>
Date:   Mon Aug 8 20:35:29 2016 +0300

    x86/hweight: Don't clobber %rdi
    
    commit 65ea11ec6a82b1d44aba62b59e9eb20247e57c6e upstream.
    
    The caller expects %rdi to remain intact, push+pop it make that happen.
    
    Fixes the following kind of explosions on my core2duo machine when
    trying to reboot or shut down:
    
      general protection fault: 0000 [#1] PREEMPT SMP
      Modules linked in: i915 i2c_algo_bit drm_kms_helper cfbfillrect syscopyarea cfbimgblt sysfillrect sysimgblt fb_sys_fops cfbcopyarea drm netconsole configfs binfmt_misc iTCO_wdt psmouse pcspkr snd_hda_codec_idt e100 coretemp hwmon snd_hda_codec_generic i2c_i801 mii i2c_smbus lpc_ich mfd_core snd_hda_intel uhci_hcd snd_hda_codec snd_hwdep snd_hda_core ehci_pci 8250 ehci_hcd snd_pcm 8250_base usbcore evdev serial_core usb_common parport_pc parport snd_timer snd soundcore
      CPU: 0 PID: 3070 Comm: reboot Not tainted 4.8.0-rc1-perf-dirty #69
      Hardware name:                  /D946GZIS, BIOS TS94610J.86A.0087.2007.1107.1049 11/07/2007
      task: ffff88012a0b4080 task.stack: ffff880123850000
      RIP: 0010:[<ffffffff81003c92>]  [<ffffffff81003c92>] x86_perf_event_update+0x52/0xc0
      RSP: 0018:ffff880123853b60  EFLAGS: 00010087
      RAX: 0000000000000001 RBX: ffff88012fc0a3c0 RCX: 000000000000001e
      RDX: 0000000000000000 RSI: 0000000040000000 RDI: ffff88012b014800
      RBP: ffff880123853b88 R08: ffffffffffffffff R09: 0000000000000000
      R10: ffffea0004a012c0 R11: ffffea0004acedc0 R12: ffffffff80000001
      R13: ffff88012b0149c0 R14: ffff88012b014800 R15: 0000000000000018
      FS:  00007f8b155cd700(0000) GS:ffff88012fc00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f8b155f5000 CR3: 000000012a2d7000 CR4: 00000000000006f0
      Stack:
       ffff88012fc0a3c0 ffff88012b014800 0000000000000004 0000000000000001
       ffff88012fc1b750 ffff880123853bb0 ffffffff81003d59 ffff88012b014800
       ffff88012fc0a3c0 ffff88012b014800 ffff880123853bd8 ffffffff81003e13
      Call Trace:
       [<ffffffff81003d59>] x86_pmu_stop+0x59/0xd0
       [<ffffffff81003e13>] x86_pmu_del+0x43/0x140
       [<ffffffff8111705d>] event_sched_out.isra.105+0xbd/0x260
       [<ffffffff8111738d>] __perf_remove_from_context+0x2d/0xb0
       [<ffffffff8111745d>] __perf_event_exit_context+0x4d/0x70
       [<ffffffff810c8826>] generic_exec_single+0xb6/0x140
       [<ffffffff81117410>] ? __perf_remove_from_context+0xb0/0xb0
       [<ffffffff81117410>] ? __perf_remove_from_context+0xb0/0xb0
       [<ffffffff810c898f>] smp_call_function_single+0xdf/0x140
       [<ffffffff81113d27>] perf_event_exit_cpu_context+0x87/0xc0
       [<ffffffff81113d73>] perf_reboot+0x13/0x40
       [<ffffffff8107578a>] notifier_call_chain+0x4a/0x70
       [<ffffffff81075ad7>] __blocking_notifier_call_chain+0x47/0x60
       [<ffffffff81075b06>] blocking_notifier_call_chain+0x16/0x20
       [<ffffffff81076a1d>] kernel_restart_prepare+0x1d/0x40
       [<ffffffff81076ae2>] kernel_restart+0x12/0x60
       [<ffffffff81076d56>] SYSC_reboot+0xf6/0x1b0
       [<ffffffff811a823c>] ? mntput_no_expire+0x2c/0x1b0
       [<ffffffff811a83e4>] ? mntput+0x24/0x40
       [<ffffffff811894fc>] ? __fput+0x16c/0x1e0
       [<ffffffff811895ae>] ? ____fput+0xe/0x10
       [<ffffffff81072fc3>] ? task_work_run+0x83/0xa0
       [<ffffffff81001623>] ? exit_to_usermode_loop+0x53/0xc0
       [<ffffffff8100105a>] ? trace_hardirqs_on_thunk+0x1a/0x1c
       [<ffffffff81076e6e>] SyS_reboot+0xe/0x10
       [<ffffffff814c4ba5>] entry_SYSCALL_64_fastpath+0x18/0xa3
      Code: 7c 4c 8d af c0 01 00 00 49 89 fe eb 10 48 09 c2 4c 89 e0 49 0f b1 55 00 4c 39 e0 74 35 4d 8b a6 c0 01 00 00 41 8b 8e 60 01 00 00 <0f> 33 8b 35 6e 02 8c 00 48 c1 e2 20 85 f6 7e d2 48 89 d3 89 cf
      RIP  [<ffffffff81003c92>] x86_perf_event_update+0x52/0xc0
       RSP <ffff880123853b60>
      ---[ end trace 7ec95181faf211be ]---
      note: reboot[3070] exited with preempt_count 2
    
    Cc: Borislav Petkov <bp@suse.de>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@kernel.org>
    Fixes: f5967101e9de ("x86/hweight: Get rid of the special calling convention")
    Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c597f98755e0387067127033eef7a21a34ecf21c
Author: Borislav Petkov <bp@suse.de>
Date:   Mon May 30 12:56:27 2016 +0200

    x86/hweight: Get rid of the special calling convention
    
    commit f5967101e9de12addcda4510dfbac66d7c5779c3 upstream.
    
    People complained about ARCH_HWEIGHT_CFLAGS and how it throws a wrench
    into kcov, lto, etc, experimentations.
    
    Add asm versions for __sw_hweight{32,64}() and do explicit saving and
    restoring of clobbered registers. This gets rid of the special calling
    convention. We get to call those functions on !X86_FEATURE_POPCNT CPUs.
    
    We still need to hardcode POPCNT and register operands as some old gas
    versions which we support, do not know about POPCNT.
    
    Btw, remove redundant REX prefix from 32-bit POPCNT because alternatives
    can do padding now.
    
    Suggested-by: H. Peter Anvin <hpa@zytor.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/1464605787-20603-1-git-send-email-bp@alien8.de
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Matthias Kaehlcke <mka@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3d069960454e2b8795fed56fba9efb5f3e7a8615
Author: Phil Elwell <phil@raspberrypi.org>
Date:   Wed Apr 11 10:59:17 2018 +0100

    lan78xx: Correctly indicate invalid OTP
    
    
    [ Upstream commit 4bfc33807a9a02764bdd1e42e794b3b401240f27 ]
    
    lan78xx_read_otp tries to return -EINVAL in the event of invalid OTP
    content, but the value gets overwritten before it is returned and the
    read goes ahead anyway. Make the read conditional as it should be
    and preserve the error code.
    
    Fixes: 55d7de9de6c3 ("Microchip's LAN7800 family USB 2/3 to 10/100/1000 Ethernet device driver")
    Signed-off-by: Phil Elwell <phil@raspberrypi.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 460439418f1c720d87baa55ed4c965fc9275576d
Author: Tejaswi Tanikella <tejaswit@codeaurora.org>
Date:   Wed Apr 11 16:34:47 2018 +0530

    slip: Check if rstate is initialized before uncompressing
    
    
    [ Upstream commit 3f01ddb962dc506916c243f9524e8bef97119b77 ]
    
    On receiving a packet the state index points to the rstate which must be
    used to fill up IP and TCP headers. But if the state index points to a
    rstate which is unitialized, i.e. filled with zeros, it gets stuck in an
    infinite loop inside ip_fast_csum trying to compute the ip checsum of a
    header with zero length.
    
    89.666953:   <2> [<ffffff9dd3e94d38>] slhc_uncompress+0x464/0x468
    89.666965:   <2> [<ffffff9dd3e87d88>] ppp_receive_nonmp_frame+0x3b4/0x65c
    89.666978:   <2> [<ffffff9dd3e89dd4>] ppp_receive_frame+0x64/0x7e0
    89.666991:   <2> [<ffffff9dd3e8a708>] ppp_input+0x104/0x198
    89.667005:   <2> [<ffffff9dd3e93868>] pppopns_recv_core+0x238/0x370
    89.667027:   <2> [<ffffff9dd4428fc8>] __sk_receive_skb+0xdc/0x250
    89.667040:   <2> [<ffffff9dd3e939e4>] pppopns_recv+0x44/0x60
    89.667053:   <2> [<ffffff9dd4426848>] __sock_queue_rcv_skb+0x16c/0x24c
    89.667065:   <2> [<ffffff9dd4426954>] sock_queue_rcv_skb+0x2c/0x38
    89.667085:   <2> [<ffffff9dd44f7358>] raw_rcv+0x124/0x154
    89.667098:   <2> [<ffffff9dd44f7568>] raw_local_deliver+0x1e0/0x22c
    89.667117:   <2> [<ffffff9dd44c8ba0>] ip_local_deliver_finish+0x70/0x24c
    89.667131:   <2> [<ffffff9dd44c92f4>] ip_local_deliver+0x100/0x10c
    
    ./scripts/faddr2line vmlinux slhc_uncompress+0x464/0x468 output:
     ip_fast_csum at arch/arm64/include/asm/checksum.h:40
     (inlined by) slhc_uncompress at drivers/net/slip/slhc.c:615
    
    Adding a variable to indicate if the current rstate is initialized. If
    such a packet arrives, move to toss state.
    
    Signed-off-by: Tejaswi Tanikella <tejaswit@codeaurora.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 085c9c4b9e7eb21d6bdfb08228ee16a3af6c2cc3
Author: Bassem Boubaker <bassem.boubaker@actia.fr>
Date:   Wed Apr 11 13:15:53 2018 +0200

    cdc_ether: flag the Cinterion AHS8 modem by gemalto as WWAN
    
    
    [ Upstream commit 53765341ee821c0a0f1dec41adc89c9096ad694c ]
    
    The Cinterion AHS8 is a 3G device with one embedded WWAN interface
    using cdc_ether as a driver.
    
    The modem is controlled via AT commands through the exposed TTYs.
    
    AT+CGDCONT write command can be used to activate or deactivate a WWAN
    connection for a PDP context defined with the same command. UE
    supports one WWAN adapter.
    
    Signed-off-by: Bassem Boubaker <bassem.boubaker@actia.fr>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 09293a7b610f7a2a145c4dc7bf4315886457d0da
Author: Marek Szyprowski <m.szyprowski@samsung.com>
Date:   Mon Jan 15 14:58:21 2018 +0100

    hwmon: (ina2xx) Fix access to uninitialized mutex
    
    commit 0c4c5860e9983eb3da7a3d73ca987643c3ed034b upstream.
    
    Initialize data->config_lock mutex before it is used by the driver code.
    
    This fixes following warning on Odroid XU3 boards:
    
    INFO: trying to register non-static key.
    the code is fine but needs lockdep annotation.
    turning off the locking correctness validator.
    CPU: 5 PID: 1 Comm: swapper/0 Not tainted 4.15.0-rc7-next-20180115-00001-gb75575dee3f2 #107
    Hardware name: SAMSUNG EXYNOS (Flattened Device Tree)
    [<c0111504>] (unwind_backtrace) from [<c010dbec>] (show_stack+0x10/0x14)
    [<c010dbec>] (show_stack) from [<c09b3f74>] (dump_stack+0x90/0xc8)
    [<c09b3f74>] (dump_stack) from [<c0179528>] (register_lock_class+0x1c0/0x59c)
    [<c0179528>] (register_lock_class) from [<c017bd1c>] (__lock_acquire+0x78/0x1850)
    [<c017bd1c>] (__lock_acquire) from [<c017de30>] (lock_acquire+0xc8/0x2b8)
    [<c017de30>] (lock_acquire) from [<c09ca59c>] (__mutex_lock+0x60/0xa0c)
    [<c09ca59c>] (__mutex_lock) from [<c09cafd0>] (mutex_lock_nested+0x1c/0x24)
    [<c09cafd0>] (mutex_lock_nested) from [<c068b0d0>] (ina2xx_set_shunt+0x70/0xb0)
    [<c068b0d0>] (ina2xx_set_shunt) from [<c068b218>] (ina2xx_probe+0x88/0x1b0)
    [<c068b218>] (ina2xx_probe) from [<c0673d90>] (i2c_device_probe+0x1e0/0x2d0)
    [<c0673d90>] (i2c_device_probe) from [<c053a268>] (driver_probe_device+0x2b8/0x4a0)
    [<c053a268>] (driver_probe_device) from [<c053a54c>] (__driver_attach+0xfc/0x120)
    [<c053a54c>] (__driver_attach) from [<c05384cc>] (bus_for_each_dev+0x58/0x7c)
    [<c05384cc>] (bus_for_each_dev) from [<c0539590>] (bus_add_driver+0x174/0x250)
    [<c0539590>] (bus_add_driver) from [<c053b5e0>] (driver_register+0x78/0xf4)
    [<c053b5e0>] (driver_register) from [<c0675ef0>] (i2c_register_driver+0x38/0xa8)
    [<c0675ef0>] (i2c_register_driver) from [<c0102b40>] (do_one_initcall+0x48/0x18c)
    [<c0102b40>] (do_one_initcall) from [<c0e00df0>] (kernel_init_freeable+0x110/0x1d4)
    [<c0e00df0>] (kernel_init_freeable) from [<c09c8120>] (kernel_init+0x8/0x114)
    [<c09c8120>] (kernel_init) from [<c01010b4>] (ret_from_fork+0x14/0x20)
    
    Fixes: 5d389b125186 ("hwmon: (ina2xx) Make calibration register value fixed")
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    [backport to v4.4.y/v4.9.y: context changes]
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2f2c030c1e96ac9055f36d8a841e751ac4fe40d7
Author: Sudhir Sreedharan <ssreedharan@mvista.com>
Date:   Thu Feb 15 12:52:45 2018 +0530

    rtl8187: Fix NULL pointer dereference in priv->conf_mutex
    
    commit 7972326a26b5bf8dc2adac575c4e03ee7e9d193a upstream.
    
    This can be reproduced by bind/unbind the driver multiple times
    in AM3517 board.
    
    Analysis revealed that rtl8187_start() was invoked before probe
    finishes(ie. before the mutex is initialized).
    
     INFO: trying to register non-static key.
     the code is fine but needs lockdep annotation.
     turning off the locking correctness validator.
     CPU: 0 PID: 821 Comm: wpa_supplicant Not tainted 4.9.80-dirty #250
     Hardware name: Generic AM3517 (Flattened Device Tree)
     [<c010e0d8>] (unwind_backtrace) from [<c010beac>] (show_stack+0x10/0x14)
     [<c010beac>] (show_stack) from [<c017401c>] (register_lock_class+0x4f4/0x55c)
     [<c017401c>] (register_lock_class) from [<c0176fe0>] (__lock_acquire+0x74/0x1938)
     [<c0176fe0>] (__lock_acquire) from [<c0178cfc>] (lock_acquire+0xfc/0x23c)
     [<c0178cfc>] (lock_acquire) from [<c08aa2f8>] (mutex_lock_nested+0x50/0x3b0)
     [<c08aa2f8>] (mutex_lock_nested) from [<c05f5bf8>] (rtl8187_start+0x2c/0xd54)
     [<c05f5bf8>] (rtl8187_start) from [<c082dea0>] (drv_start+0xa8/0x320)
     [<c082dea0>] (drv_start) from [<c084d1d4>] (ieee80211_do_open+0x2bc/0x8e4)
     [<c084d1d4>] (ieee80211_do_open) from [<c069be94>] (__dev_open+0xb8/0x120)
     [<c069be94>] (__dev_open) from [<c069c11c>] (__dev_change_flags+0x88/0x14c)
     [<c069c11c>] (__dev_change_flags) from [<c069c1f8>] (dev_change_flags+0x18/0x48)
     [<c069c1f8>] (dev_change_flags) from [<c0710b08>] (devinet_ioctl+0x738/0x840)
     [<c0710b08>] (devinet_ioctl) from [<c067925c>] (sock_ioctl+0x164/0x2f4)
     [<c067925c>] (sock_ioctl) from [<c02883f8>] (do_vfs_ioctl+0x8c/0x9d0)
     [<c02883f8>] (do_vfs_ioctl) from [<c0288da8>] (SyS_ioctl+0x6c/0x7c)
     [<c0288da8>] (SyS_ioctl) from [<c0107760>] (ret_fast_syscall+0x0/0x1c)
     Unable to handle kernel NULL pointer dereference at virtual address 00000000
     pgd = cd1ec000
     [00000000] *pgd=8d1de831, *pte=00000000, *ppte=00000000
     Internal error: Oops: 817 [#1] PREEMPT ARM
     Modules linked in:
     CPU: 0 PID: 821 Comm: wpa_supplicant Not tainted 4.9.80-dirty #250
     Hardware name: Generic AM3517 (Flattened Device Tree)
     task: ce73eec0 task.stack: cd1ea000
     PC is at mutex_lock_nested+0xe8/0x3b0
     LR is at mutex_lock_nested+0xd0/0x3b0
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Sudhir Sreedharan <ssreedharan@mvista.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5da4880c985b0b00021809f7fb7153ed10f4eaa0
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Apr 8 11:57:10 2018 -0400

    getname_kernel() needs to make sure that ->name != ->iname in long case
    
    commit 30ce4d1903e1d8a7ccd110860a5eef3c638ed8be upstream.
    
    missed it in "kill struct filename.separate" several years ago.
    
    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 93da190b72043d607803b350d947769b7b27e1ec
Author: Vasily Gorbik <gor@linux.ibm.com>
Date:   Tue Apr 3 16:02:15 2018 +0200

    s390/ipl: ensure loadparm valid flag is set
    
    commit 15deb080a6087b73089139569558965750e69d67 upstream.
    
    When loadparm is set in reipl parm block, the kernel should also set
    DIAG308_FLAGS_LP_VALID flag.
    
    This fixes loadparm ignoring during z/VM fcp -> ccw reipl and kvm direct
    boot -> ccw reipl.
    
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Heiko Carstens <heiko.carstens@de.ibm.com>
    Signed-off-by: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7dc2c154c1764e2d19a18380e51935cb5ccb5c66
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Wed Mar 7 14:01:01 2018 +0100

    s390/qdio: don't merge ERROR output buffers
    
    commit 0cf1e05157b9e5530dcc3ca9fec9bf617fc93375 upstream.
    
    On an Output queue, both EMPTY and PENDING buffer states imply that the
    buffer is ready for completion-processing by the upper-layer drivers.
    
    So for a non-QEBSM Output queue, get_buf_states() merges mixed
    batches of PENDING and EMPTY buffers into one large batch of EMPTY
    buffers. The upper-layer driver (ie. qeth) later distuingishes PENDING
    from EMPTY by inspecting the slsb_state for
    QDIO_OUTBUF_STATE_FLAG_PENDING.
    
    But the merge logic in get_buf_states() contains a bug that causes us to
    erronously also merge ERROR buffers into such a batch of EMPTY buffers
    (ERROR is 0xaf, EMPTY is 0xa1; so ERROR & EMPTY == EMPTY).
    Effectively, most outbound ERROR buffers are currently discarded
    silently and processed as if they had succeeded.
    
    Note that this affects _all_ non-QEBSM device types, not just IQD with CQ.
    
    Fix it by explicitly spelling out the exact conditions for merging.
    
    For extracting the "get initial state" part out of the loop, this relies
    on the fact that get_buf_states() is never called with a count of 0. The
    QEBSM path already strictly requires this, and the two callers with
    variable 'count' make sure of it.
    
    Fixes: 104ea556ee7f ("qdio: support asynchronous delivery of storage blocks")
    Cc: <stable@vger.kernel.org> #v3.2+
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Reviewed-by: Ursula Braun <ubraun@linux.vnet.ibm.com>
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f614d9f7372ca02aab68fae7da21ee9c7826ec86
Author: Julian Wiedmann <jwi@linux.vnet.ibm.com>
Date:   Mon Mar 5 09:39:38 2018 +0100

    s390/qdio: don't retry EQBS after CCQ 96
    
    commit dae55b6fef58530c13df074bcc182c096609339e upstream.
    
    Immediate retry of EQBS after CCQ 96 means that we potentially misreport
    the state of buffers inspected during the first EQBS call.
    
    This occurs when
    1. the first EQBS finds all inspected buffers still in the initial state
       set by the driver (ie INPUT EMPTY or OUTPUT PRIMED),
    2. the EQBS terminates early with CCQ 96, and
    3. by the time that the second EQBS comes around, the state of those
       previously inspected buffers has changed.
    
    If the state reported by the second EQBS is 'driver-owned', all we know
    is that the previous buffers are driver-owned now as well. But we can't
    tell if they all have the same state. So for instance
    - the second EQBS reports OUTPUT EMPTY, but any number of the previous
      buffers could be OUTPUT ERROR by now,
    - the second EQBS reports OUTPUT ERROR, but any number of the previous
      buffers could be OUTPUT EMPTY by now.
    
    Effectively, this can result in both over- and underreporting of errors.
    
    If the state reported by the second EQBS is 'HW-owned', that doesn't
    guarantee that the previous buffers have not been switched to
    driver-owned in the mean time. So for instance
    - the second EQBS reports INPUT EMPTY, but any number of the previous
      buffers could be INPUT PRIMED (or INPUT ERROR) by now.
    
    This would result in failure to process pending work on the queue. If
    it's the final check before yielding initiative, this can cause
    a (temporary) queue stall due to IRQ avoidance.
    
    Fixes: 25f269f17316 ("[S390] qdio: EQBS retry after CCQ 96")
    Cc: <stable@vger.kernel.org> #v3.2+
    Signed-off-by: Julian Wiedmann <jwi@linux.vnet.ibm.com>
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 123d30649e328dd9f8823fa63db9f7c5f5a581e8
Author: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
Date:   Fri Apr 6 10:03:17 2018 +0900

    block/loop: fix deadlock after loop_set_status
    
    commit 1e047eaab3bb5564f25b41e9cd3a053009f4e789 upstream.
    
    syzbot is reporting deadlocks at __blkdev_get() [1].
    
    ----------------------------------------
    [   92.493919] systemd-udevd   D12696   525      1 0x00000000
    [   92.495891] Call Trace:
    [   92.501560]  schedule+0x23/0x80
    [   92.502923]  schedule_preempt_disabled+0x5/0x10
    [   92.504645]  __mutex_lock+0x416/0x9e0
    [   92.510760]  __blkdev_get+0x73/0x4f0
    [   92.512220]  blkdev_get+0x12e/0x390
    [   92.518151]  do_dentry_open+0x1c3/0x2f0
    [   92.519815]  path_openat+0x5d9/0xdc0
    [   92.521437]  do_filp_open+0x7d/0xf0
    [   92.527365]  do_sys_open+0x1b8/0x250
    [   92.528831]  do_syscall_64+0x6e/0x270
    [   92.530341]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    [   92.931922] 1 lock held by systemd-udevd/525:
    [   92.933642]  #0: 00000000a2849e25 (&bdev->bd_mutex){+.+.}, at: __blkdev_get+0x73/0x4f0
    ----------------------------------------
    
    The reason of deadlock turned out that wait_event_interruptible() in
    blk_queue_enter() got stuck with bdev->bd_mutex held at __blkdev_put()
    due to q->mq_freeze_depth == 1.
    
    ----------------------------------------
    [   92.787172] a.out           S12584   634    633 0x80000002
    [   92.789120] Call Trace:
    [   92.796693]  schedule+0x23/0x80
    [   92.797994]  blk_queue_enter+0x3cb/0x540
    [   92.803272]  generic_make_request+0xf0/0x3d0
    [   92.807970]  submit_bio+0x67/0x130
    [   92.810928]  submit_bh_wbc+0x15e/0x190
    [   92.812461]  __block_write_full_page+0x218/0x460
    [   92.815792]  __writepage+0x11/0x50
    [   92.817209]  write_cache_pages+0x1ae/0x3d0
    [   92.825585]  generic_writepages+0x5a/0x90
    [   92.831865]  do_writepages+0x43/0xd0
    [   92.836972]  __filemap_fdatawrite_range+0xc1/0x100
    [   92.838788]  filemap_write_and_wait+0x24/0x70
    [   92.840491]  __blkdev_put+0x69/0x1e0
    [   92.841949]  blkdev_close+0x16/0x20
    [   92.843418]  __fput+0xda/0x1f0
    [   92.844740]  task_work_run+0x87/0xb0
    [   92.846215]  do_exit+0x2f5/0xba0
    [   92.850528]  do_group_exit+0x34/0xb0
    [   92.852018]  SyS_exit_group+0xb/0x10
    [   92.853449]  do_syscall_64+0x6e/0x270
    [   92.854944]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    [   92.943530] 1 lock held by a.out/634:
    [   92.945105]  #0: 00000000a2849e25 (&bdev->bd_mutex){+.+.}, at: __blkdev_put+0x3c/0x1e0
    ----------------------------------------
    
    The reason of q->mq_freeze_depth == 1 turned out that loop_set_status()
    forgot to call blk_mq_unfreeze_queue() at error paths for
    info->lo_encrypt_type != NULL case.
    
    ----------------------------------------
    [   37.509497] CPU: 2 PID: 634 Comm: a.out Tainted: G        W        4.16.0+ #457
    [   37.513608] Hardware name: VMware, Inc. VMware Virtual Platform/440BX Desktop Reference Platform, BIOS 6.00 05/19/2017
    [   37.518832] RIP: 0010:blk_freeze_queue_start+0x17/0x40
    [   37.521778] RSP: 0018:ffffb0c2013e7c60 EFLAGS: 00010246
    [   37.524078] RAX: 0000000000000000 RBX: ffff8b07b1519798 RCX: 0000000000000000
    [   37.527015] RDX: 0000000000000002 RSI: ffffb0c2013e7cc0 RDI: ffff8b07b1519798
    [   37.529934] RBP: ffffb0c2013e7cc0 R08: 0000000000000008 R09: 47a189966239b898
    [   37.532684] R10: dad78b99b278552f R11: 9332dca72259d5ef R12: ffff8b07acd73678
    [   37.535452] R13: 0000000000004c04 R14: 0000000000000000 R15: ffff8b07b841e940
    [   37.538186] FS:  00007fede33b9740(0000) GS:ffff8b07b8e80000(0000) knlGS:0000000000000000
    [   37.541168] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [   37.543590] CR2: 00000000206fdf18 CR3: 0000000130b30006 CR4: 00000000000606e0
    [   37.546410] Call Trace:
    [   37.547902]  blk_freeze_queue+0x9/0x30
    [   37.549968]  loop_set_status+0x67/0x3c0 [loop]
    [   37.549975]  loop_set_status64+0x3b/0x70 [loop]
    [   37.549986]  lo_ioctl+0x223/0x810 [loop]
    [   37.549995]  blkdev_ioctl+0x572/0x980
    [   37.550003]  block_ioctl+0x34/0x40
    [   37.550006]  do_vfs_ioctl+0xa7/0x6d0
    [   37.550017]  ksys_ioctl+0x6b/0x80
    [   37.573076]  SyS_ioctl+0x5/0x10
    [   37.574831]  do_syscall_64+0x6e/0x270
    [   37.576769]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
    ----------------------------------------
    
    [1] https://syzkaller.appspot.com/bug?id=cd662bc3f6022c0979d01a262c318fab2ee9b56f
    
    Signed-off-by: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Reported-by: syzbot <bot+48594378e9851eab70bcd6f99327c7db58c5a28a@syzkaller.appspotmail.com>
    Fixes: ecdd09597a572513 ("block/loop: fix race between I/O and set_status")
    Cc: Ming Lei <tom.leiming@gmail.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: stable <stable@vger.kernel.org>
    Cc: Jens Axboe <axboe@fb.com>
    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9580b588c86174f292ea6648320cea9f4d9f4128
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Tue Apr 17 14:56:21 2018 +0200

    Revert "perf tests: Decompress kernel module before objdump"
    
    This reverts commit b0761b57e0bf11ada4c45e68f4cba1370363d90d which is
    commit 94df1040b1e6aacd8dec0ba3c61d7e77cd695f26 upstream.
    
    It breaks the build of perf on 4.4.y, so I'm dropping it.
    
    Reported-by: Pavlos Parissis <pavlos.parissis@gmail.com>
    Reported-by: Lei Chen <chenl.lei@gmail.com>
    Reported-by: Maxime Hadjinlian <maxime.hadjinlian@gmail.com>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Wang Nan <wangnan0@huawei.com>
    Cc: kernel-team@lge.com
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Sasha Levin <alexander.levin@microsoft.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f83eb6b57f5ae7f4d1bc668f198655e854a90432
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Feb 16 16:26:57 2018 +0100

    radeon: hide pointless #warning when compile testing
    
    commit c02216acf4177c4411d33735c81cad687790fa59 upstream.
    
    In randconfig testing, we sometimes get this warning:
    
    drivers/gpu/drm/radeon/radeon_object.c: In function 'radeon_bo_create':
    drivers/gpu/drm/radeon/radeon_object.c:242:2: error: #warning Please enable CONFIG_MTRR and CONFIG_X86_PAT for better performance thanks to write-combining [-Werror=cpp]
     #warning Please enable CONFIG_MTRR and CONFIG_X86_PAT for better performance \
    
    This is rather annoying since almost all other code produces no build-time
    output unless we have found a real bug. We already fixed this in the
    amdgpu driver in commit 31bb90f1cd08 ("drm/amdgpu: shut up #warning for
    compile testing") by adding a CONFIG_COMPILE_TEST check last year and
    agreed to do the same here, but both Michel and I then forgot about it
    until I came across the issue again now.
    
    For stable kernels, as this is one of very few remaining randconfig
    warnings in 4.14.
    
    Cc: stable@vger.kernel.org
    Link: https://patchwork.kernel.org/patch/9550009/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f20002ad77fbfca3efadb2649a446899ce505af3
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:24 2018 +0200

    perf intel-pt: Fix timestamp following overflow
    
    commit 91d29b288aed3406caf7c454bf2b898c96cfd177 upstream.
    
    timestamp_insn_cnt is used to estimate the timestamp based on the number of
    instructions since the last known timestamp.
    
    If the estimate is not accurate enough decoding might not be correctly
    synchronized with side-band events causing more trace errors.
    
    However there are always timestamps following an overflow, so the
    estimate is not needed and can indeed result in more errors.
    
    Suppress the estimate by setting timestamp_insn_cnt to zero.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-5-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 292924ec3ade9670728f7f32d130eb5e3ed5e694
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:23 2018 +0200

    perf intel-pt: Fix error recovery from missing TIP packet
    
    commit 1c196a6c771c47a2faa63d38d913e03284f73a16 upstream.
    
    When a TIP packet is expected but there is a different packet, it is an
    error. However the unexpected packet might be something important like a
    TSC packet, so after the error, it is necessary to continue from there,
    rather than the next packet. That is achieved by setting pkt_step to
    zero.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-4-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 410ce740596adde29697fdd8dff8ef618bb1c3d4
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:22 2018 +0200

    perf intel-pt: Fix sync_switch
    
    commit 63d8e38f6ae6c36dd5b5ba0e8c112e8861532ea2 upstream.
    
    sync_switch is a facility to synchronize decoding more closely with the
    point in the kernel when the context actually switched.
    
    The flag when sync_switch is enabled was global to the decoding, whereas
    it is really specific to the CPU.
    
    The trace data for different CPUs is put on different queues, so add
    sync_switch to the intel_pt_queue structure and use that in preference
    to the global setting in the intel_pt structure.
    
    That fixes problems decoding one CPU's trace because sync_switch was
    disabled on a different CPU's queue.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-3-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit aedc7bff2ea537367d59d71c47d4eb6552762f06
Author: Adrian Hunter <adrian.hunter@intel.com>
Date:   Wed Mar 7 16:02:21 2018 +0200

    perf intel-pt: Fix overlap detection to identify consecutive buffers correctly
    
    commit 117db4b27bf08dba412faf3924ba55fe970c57b8 upstream.
    
    Overlap detection was not not updating the buffer's 'consecutive' flag.
    Marking buffers consecutive has the advantage that decoding begins from
    the start of the buffer instead of the first PSB. Fix overlap detection
    to identify consecutive buffers correctly.
    
    Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/1520431349-30689-2-git-send-email-adrian.hunter@intel.com
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8778f3e6e35b2a618dc96722d4e945fbba783180
Author: Helge Deller <deller@gmx.de>
Date:   Sun Mar 25 23:53:22 2018 +0200

    parisc: Fix out of array access in match_pci_device()
    
    commit 615b2665fd20c327b631ff1e79426775de748094 upstream.
    
    As found by the ubsan checker, the value of the 'index' variable can be
    out of range for the bc[] array:
    
    UBSAN: Undefined behaviour in arch/parisc/kernel/drivers.c:655:21
    index 6 is out of range for type 'char [6]'
    Backtrace:
     [<104fa850>] __ubsan_handle_out_of_bounds+0x68/0x80
     [<1019d83c>] check_parent+0xc0/0x170
     [<1019d91c>] descend_children+0x30/0x6c
     [<1059e164>] device_for_each_child+0x60/0x98
     [<1019cd54>] parse_tree_node+0x40/0x54
     [<1019d86c>] check_parent+0xf0/0x170
     [<1019d91c>] descend_children+0x30/0x6c
     [<1059e164>] device_for_each_child+0x60/0x98
     [<1019d938>] descend_children+0x4c/0x6c
     [<1059e164>] device_for_each_child+0x60/0x98
     [<1019cd54>] parse_tree_node+0x40/0x54
     [<1019cffc>] hwpath_to_device+0xa4/0xc4
    
    Signed-off-by: Helge Deller <deller@gmx.de>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 96adc5c82bdf1e7d1c8e0830e7d3f9a3747ae8f3
Author: Mauro Carvalho Chehab <mchehab@s-opensource.com>
Date:   Wed Mar 28 13:59:22 2018 -0400

    media: v4l2-compat-ioctl32: don't oops on overlay
    
    commit 85ea29f19eab56ec16ec6b92bc67305998706afa upstream.
    
    At put_v4l2_window32(), it tries to access kp->clips. However,
    kp points to an userspace pointer. So, it should be obtained
    via get_user(), otherwise it can OOPS:
    
     vivid-000: ==================  END STATUS  ==================
     BUG: unable to handle kernel paging request at 00000000fffb18e0
     IP: [<ffffffffc05468d9>] __put_v4l2_format32+0x169/0x220 [videodev]
     PGD 3f5776067 PUD 3f576f067 PMD 3f5769067 PTE 800000042548f067
     Oops: 0001 [#1] SMP
     Modules linked in: vivid videobuf2_vmalloc videobuf2_memops v4l2_dv_timings videobuf2_core v4l2_common videodev media xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack tun bridge stp llc ebtable_filter ebtables ip6table_filter ip6_tables bluetooth rfkill binfmt_misc snd_hda_codec_hdmi i915 snd_hda_intel snd_hda_controller snd_hda_codec intel_rapl x86_pkg_temp_thermal snd_hwdep intel_powerclamp snd_pcm coretemp snd_seq_midi kvm_intel kvm snd_seq_midi_event snd_rawmidi i2c_algo_bit drm_kms_helper snd_seq drm crct10dif_pclmul e1000e snd_seq_device crc32_pclmul snd_timer ghash_clmulni_intel snd mei_me mei ptp pps_core soundcore lpc_ich video crc32c_intel [last unloaded: media]
     CPU: 2 PID: 28332 Comm: v4l2-compliance Not tainted 3.18.102+ #107
     Hardware name:                  /NUC5i7RYB, BIOS RYBDWi35.86A.0364.2017.0511.0949 05/11/2017
     task: ffff8804293f8000 ti: ffff8803f5640000 task.ti: ffff8803f5640000
     RIP: 0010:[<ffffffffc05468d9>]  [<ffffffffc05468d9>] __put_v4l2_format32+0x169/0x220 [videodev]
     RSP: 0018:ffff8803f5643e28  EFLAGS: 00010246
     RAX: 0000000000000000 RBX: 0000000000000000 RCX: 00000000fffb1ab4
     RDX: 00000000fffb1a68 RSI: 00000000fffb18d8 RDI: 00000000fffb1aa8
     RBP: ffff8803f5643e48 R08: 0000000000000001 R09: ffff8803f54b0378
     R10: 0000000000000000 R11: 0000000000000168 R12: 00000000fffb18c0
     R13: 00000000fffb1a94 R14: 00000000fffb18c8 R15: 0000000000000000
     FS:  0000000000000000(0000) GS:ffff880456d00000(0063) knlGS:00000000f7100980
     CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
     CR2: 00000000fffb18e0 CR3: 00000003f552b000 CR4: 00000000003407e0
     Stack:
      00000000fffb1a94 00000000c0cc5640 0000000000000056 ffff8804274f3600
      ffff8803f5643ed0 ffffffffc0547e16 0000000000000003 ffff8803f5643eb0
      ffffffff81301460 ffff88009db44b01 ffff880441942520 ffff8800c0d05640
     Call Trace:
      [<ffffffffc0547e16>] v4l2_compat_ioctl32+0x12d6/0x1b1d [videodev]
      [<ffffffff81301460>] ? file_has_perm+0x70/0xc0
      [<ffffffff81252a2c>] compat_SyS_ioctl+0xec/0x1200
      [<ffffffff8173241a>] sysenter_dispatch+0x7/0x21
     Code: 00 00 48 8b 80 48 c0 ff ff 48 83 e8 38 49 39 c6 0f 87 2b ff ff ff 49 8d 45 1c e8 a3 ce e3 c0 85 c0 0f 85 1a ff ff ff 41 8d 40 ff <4d> 8b 64 24 20 41 89 d5 48 8d 44 40 03 4d 8d 34 c4 eb 15 0f 1f
     RIP  [<ffffffffc05468d9>] __put_v4l2_format32+0x169/0x220 [videodev]
     RSP <ffff8803f5643e28>
     CR2: 00000000fffb18e0
    
    Tested with vivid driver on Kernel v3.18.102.
    
    Same bug happens upstream too:
    
     BUG: KASAN: user-memory-access in __put_v4l2_format32+0x98/0x4d0 [videodev]
     Read of size 8 at addr 00000000ffe48400 by task v4l2-compliance/8713
    
     CPU: 0 PID: 8713 Comm: v4l2-compliance Not tainted 4.16.0-rc4+ #108
     Hardware name:  /NUC5i7RYB, BIOS RYBDWi35.86A.0364.2017.0511.0949 05/11/2017
     Call Trace:
      dump_stack+0x5c/0x7c
      kasan_report+0x164/0x380
      ? __put_v4l2_format32+0x98/0x4d0 [videodev]
      __put_v4l2_format32+0x98/0x4d0 [videodev]
      v4l2_compat_ioctl32+0x1aec/0x27a0 [videodev]
      ? __fsnotify_inode_delete+0x20/0x20
      ? __put_v4l2_format32+0x4d0/0x4d0 [videodev]
      compat_SyS_ioctl+0x646/0x14d0
      ? do_ioctl+0x30/0x30
      do_fast_syscall_32+0x191/0x3f4
      entry_SYSENTER_compat+0x6b/0x7a
     ==================================================================
     Disabling lock debugging due to kernel taint
     BUG: unable to handle kernel paging request at 00000000ffe48400
     IP: __put_v4l2_format32+0x98/0x4d0 [videodev]
     PGD 3a22fb067 P4D 3a22fb067 PUD 39b6f0067 PMD 39b6f1067 PTE 80000003256af067
     Oops: 0001 [#1] SMP KASAN
     Modules linked in: vivid videobuf2_vmalloc videobuf2_dma_contig videobuf2_memops v4l2_tpg v4l2_dv_timings videobuf2_v4l2 videobuf2_common v4l2_common videodev xt_CHECKSUM iptable_mangle ipt_MASQUERADE nf_nat_masquerade_ipv4 iptable_nat nf_nat_ipv4 nf_nat nf_conntrack_ipv4 nf_defrag_ipv4 xt_conntrack nf_conntrack libcrc32c tun bridge stp llc ebtable_filter ebtables ip6table_filter ip6_tables bluetooth rfkill ecdh_generic binfmt_misc snd_hda_codec_hdmi intel_rapl x86_pkg_temp_thermal intel_powerclamp i915 coretemp snd_hda_intel snd_hda_codec kvm_intel snd_hwdep snd_hda_core kvm snd_pcm irqbypass crct10dif_pclmul crc32_pclmul snd_seq_midi ghash_clmulni_intel snd_seq_midi_event i2c_algo_bit intel_cstate snd_rawmidi intel_uncore snd_seq drm_kms_helper e1000e snd_seq_device snd_timer intel_rapl_perf
      drm ptp snd mei_me mei lpc_ich pps_core soundcore video crc32c_intel
     CPU: 0 PID: 8713 Comm: v4l2-compliance Tainted: G    B            4.16.0-rc4+ #108
     Hardware name:  /NUC5i7RYB, BIOS RYBDWi35.86A.0364.2017.0511.0949 05/11/2017
     RIP: 0010:__put_v4l2_format32+0x98/0x4d0 [videodev]
     RSP: 0018:ffff8803b9be7d30 EFLAGS: 00010282
     RAX: 0000000000000000 RBX: ffff8803ac983e80 RCX: ffffffff8cd929f2
     RDX: 1ffffffff1d0a149 RSI: 0000000000000297 RDI: 0000000000000297
     RBP: 00000000ffe485c0 R08: fffffbfff1cf5123 R09: ffffffff8e7a8948
     R10: 0000000000000001 R11: fffffbfff1cf5122 R12: 00000000ffe483e0
     R13: 00000000ffe485c4 R14: ffff8803ac985918 R15: 00000000ffe483e8
     FS:  0000000000000000(0000) GS:ffff880407400000(0063) knlGS:00000000f7a46980
     CS:  0010 DS: 002b ES: 002b CR0: 0000000080050033
     CR2: 00000000ffe48400 CR3: 00000003a83f2003 CR4: 00000000003606f0
     Call Trace:
      v4l2_compat_ioctl32+0x1aec/0x27a0 [videodev]
      ? __fsnotify_inode_delete+0x20/0x20
      ? __put_v4l2_format32+0x4d0/0x4d0 [videodev]
      compat_SyS_ioctl+0x646/0x14d0
      ? do_ioctl+0x30/0x30
      do_fast_syscall_32+0x191/0x3f4
      entry_SYSENTER_compat+0x6b/0x7a
     Code: 4c 89 f7 4d 8d 7c 24 08 e8 e6 a4 69 cb 48 8b 83 98 1a 00 00 48 83 e8 10 49 39 c7 0f 87 9d 01 00 00 49 8d 7c 24 20 e8 c8 a4 69 cb <4d> 8b 74 24 20 4c 89 ef 4c 89 fe ba 10 00 00 00 e8 23 d9 08 cc
     RIP: __put_v4l2_format32+0x98/0x4d0 [videodev] RSP: ffff8803b9be7d30
     CR2: 00000000ffe48400
    
    cc: stable@vger.kernel.org
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Reviewed-by: Sakari Ailus <sakari.ailus@linux.intel.com>
    Reviewed-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>