commit c0e754d6bff2367d1de98e637285c8efbd1680ea
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Tue Aug 16 09:29:43 2016 +0200

    Linux 3.14.76

commit 1f5eff582ea7ad8e8617564b88a9c0096d0cc82f
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Thu Jul 14 23:02:47 2016 -0400

    ext4: fix reference counting bug on block allocation error
    
    commit 554a5ccc4e4a20c5f3ec859de0842db4b4b9c77e upstream.
    
    If we hit this error when mounted with errors=continue or
    errors=remount-ro:
    
        EXT4-fs error (device loop0): ext4_mb_mark_diskspace_used:2940: comm ext4.exe: Allocating blocks 5090-6081 which overlap fs metadata
    
    then ext4_mb_new_blocks() will call ext4_mb_release_context() and try to
    continue. However, ext4_mb_release_context() is the wrong thing to call
    here since we are still actually using the allocation context.
    
    Instead, just error out. We could retry the allocation, but there is a
    possibility of getting stuck in an infinite loop instead, so this seems
    safer.
    
    [ Fixed up so we don't return EAGAIN to userspace. --tytso ]
    
    Fixes: 8556e8f3b6 ("ext4: Don't allow new groups to be added during block allocation")
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 860c53258e634c54f70252c352bae7bac30724a9
Author: Eric Dumazet <edumazet@google.com>
Date:   Sun Jul 10 10:04:02 2016 +0200

    tcp: make challenge acks less predictable
    
    [ Upstream commit 75ff39ccc1bd5d3c455b6822ab09e533c551f758 ]
    
    Yue Cao claims that current host rate limiting of challenge ACKS
    (RFC 5961) could leak enough information to allow a patient attacker
    to hijack TCP sessions. He will soon provide details in an academic
    paper.
    
    This patch increases the default limit from 100 to 1000, and adds
    some randomization so that the attacker can no longer hijack
    sessions without spending a considerable amount of probes.
    
    Based on initial analysis and patch from Linus.
    
    Note that we also have per socket rate limiting, so it is tempting
    to remove the host limit in the future.
    
    v2: randomize the count of challenge acks per second, not the period.
    
    Fixes: 282f23c6ee34 ("tcp: implement RFC 5961 3.2")
    Reported-by: Yue Cao <ycao009@ucr.edu>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Yuchung Cheng <ycheng@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Acked-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>

commit d92f45a046e909bfb8b292b2f7d56ccbedf48d55
Author: Soheil Hassas Yeganeh <soheil@google.com>
Date:   Fri Jul 29 09:34:02 2016 -0400

    tcp: consider recv buf for the initial window scale
    
    [ Upstream commit f626300a3e776ccc9671b0dd94698fb3aa315966 ]
    
    tcp_select_initial_window() intends to advertise a window
    scaling for the maximum possible window size. To do so,
    it considers the maximum of net.ipv4.tcp_rmem[2] and
    net.core.rmem_max as the only possible upper-bounds.
    However, users with CAP_NET_ADMIN can use SO_RCVBUFFORCE
    to set the socket's receive buffer size to values
    larger than net.ipv4.tcp_rmem[2] and net.core.rmem_max.
    Thus, SO_RCVBUFFORCE is effectively ignored by
    tcp_select_initial_window().
    
    To fix this, consider the maximum of net.ipv4.tcp_rmem[2],
    net.core.rmem_max and socket's initial buffer space.
    
    Fixes: b0573dea1fb3 ("[NET]: Introduce SO_{SND,RCV}BUFFORCE socket options")
    Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
    Suggested-by: Neal Cardwell <ncardwell@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8e22cf2218d26d168f0d7ccf550512dfe8c4c6a5
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Sat Jul 23 07:43:50 2016 +0200

    net/irda: fix NULL pointer dereference on memory allocation failure
    
    [ Upstream commit d3e6952cfb7ba5f4bfa29d4803ba91f96ce1204d ]
    
    I ran into this:
    
        kasan: CONFIG_KASAN_INLINE enabled
        kasan: GPF could be caused by NULL-ptr deref or user memory access
        general protection fault: 0000 [#1] PREEMPT SMP KASAN
        CPU: 2 PID: 2012 Comm: trinity-c3 Not tainted 4.7.0-rc7+ #19
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
        task: ffff8800b745f2c0 ti: ffff880111740000 task.ti: ffff880111740000
        RIP: 0010:[<ffffffff82bbf066>]  [<ffffffff82bbf066>] irttp_connect_request+0x36/0x710
        RSP: 0018:ffff880111747bb8  EFLAGS: 00010286
        RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000069dd8358
        RDX: 0000000000000009 RSI: 0000000000000027 RDI: 0000000000000048
        RBP: ffff880111747c00 R08: 0000000000000000 R09: 0000000000000000
        R10: 0000000069dd8358 R11: 1ffffffff0759723 R12: 0000000000000000
        R13: ffff88011a7e4780 R14: 0000000000000027 R15: 0000000000000000
        FS:  00007fc738404700(0000) GS:ffff88011af00000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 00007fc737fdfb10 CR3: 0000000118087000 CR4: 00000000000006e0
        Stack:
         0000000000000200 ffff880111747bd8 ffffffff810ee611 ffff880119f1f220
         ffff880119f1f4f8 ffff880119f1f4f0 ffff88011a7e4780 ffff880119f1f232
         ffff880119f1f220 ffff880111747d58 ffffffff82bca542 0000000000000000
        Call Trace:
         [<ffffffff82bca542>] irda_connect+0x562/0x1190
         [<ffffffff825ae582>] SYSC_connect+0x202/0x2a0
         [<ffffffff825b4489>] SyS_connect+0x9/0x10
         [<ffffffff8100334c>] do_syscall_64+0x19c/0x410
         [<ffffffff83295ca5>] entry_SYSCALL64_slow_path+0x25/0x25
        Code: 41 89 ca 48 89 e5 41 57 41 56 41 55 41 54 41 89 d7 53 48 89 fb 48 83 c7 48 48 89 fa 41 89 f6 48 c1 ea 03 48 83 ec 20 4c 8b 65 10 <0f> b6 04 02 84 c0 74 08 84 c0 0f 8e 4c 04 00 00 80 7b 48 00 74
        RIP  [<ffffffff82bbf066>] irttp_connect_request+0x36/0x710
         RSP <ffff880111747bb8>
        ---[ end trace 4cda2588bc055b30 ]---
    
    The problem is that irda_open_tsap() can fail and leave self->tsap = NULL,
    and then irttp_connect_request() almost immediately dereferences it.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 77039f9b07753bff071f469b089f478a25c0f4f5
Author: Beniamino Galvani <bgalvani@redhat.com>
Date:   Wed Jul 13 18:25:08 2016 +0200

    bonding: set carrier off for devices created through netlink
    
    [ Upstream commit 005db31d5f5f7c31cfdc43505d77eb3ca5cf8ec6 ]
    
    Commit e826eafa65c6 ("bonding: Call netif_carrier_off after
    register_netdevice") moved netif_carrier_off() from bond_init() to
    bond_create(), but the latter is called only for initial default
    devices and ones created through sysfs:
    
     $ modprobe bonding
     $ echo +bond1 > /sys/class/net/bonding_masters
     $ ip link add bond2 type bond
     $ grep "MII Status" /proc/net/bonding/*
     /proc/net/bonding/bond0:MII Status: down
     /proc/net/bonding/bond1:MII Status: down
     /proc/net/bonding/bond2:MII Status: up
    
    Ensure that carrier is initially off also for devices created through
    netlink.
    
    Signed-off-by: Beniamino Galvani <bgalvani@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7564e4b92a7a256e17f039a1baafb9b7711626ce
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Thu Jul 14 23:21:35 2016 -0400

    ext4: short-cut orphan cleanup on error
    
    commit c65d5c6c81a1f27dec5f627f67840726fcd146de upstream.
    
    If we encounter a filesystem error during orphan cleanup, we should stop.
    Otherwise, we may end up in an infinite loop where the same inode is
    processed again and again.
    
        EXT4-fs (loop0): warning: checktime reached, running e2fsck is recommended
        EXT4-fs error (device loop0): ext4_mb_generate_buddy:758: group 2, block bitmap and bg descriptor inconsistent: 6117 vs 0 free clusters
        Aborting journal on device loop0-8.
        EXT4-fs (loop0): Remounting filesystem read-only
        EXT4-fs error (device loop0) in ext4_free_blocks:4895: Journal has aborted
        EXT4-fs error (device loop0) in ext4_do_update_inode:4893: Journal has aborted
        EXT4-fs error (device loop0) in ext4_do_update_inode:4893: Journal has aborted
        EXT4-fs error (device loop0) in ext4_ext_remove_space:3068: IO failure
        EXT4-fs error (device loop0) in ext4_ext_truncate:4667: Journal has aborted
        EXT4-fs error (device loop0) in ext4_orphan_del:2927: Journal has aborted
        EXT4-fs error (device loop0) in ext4_do_update_inode:4893: Journal has aborted
        EXT4-fs (loop0): Inode 16 (00000000618192a0): orphan list check failed!
        [...]
        EXT4-fs (loop0): Inode 16 (0000000061819748): orphan list check failed!
        [...]
        EXT4-fs (loop0): Inode 16 (0000000061819bf0): orphan list check failed!
        [...]
    
    See-also: c9eb13a9105 ("ext4: fix hang when processing corrupted orphaned inode list")
    Cc: Jan Kara <jack@suse.cz>
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e02a6ea5f8b68249d09d6ba44eca1c53ed7c6a48
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Mon Jul 4 11:03:00 2016 -0400

    ext4: don't call ext4_should_journal_data() on the journal inode
    
    commit 6a7fd522a7c94cdef0a3b08acf8e6702056e635c upstream.
    
    If ext4_fill_super() fails early, it's possible for ext4_evict_inode()
    to call ext4_should_journal_data() before superblock options and flags
    are fully set up.  In that case, the iput() on the journal inode can
    end up causing a BUG().
    
    Work around this problem by reordering the tests so we only call
    ext4_should_journal_data() after we know it's not the journal inode.
    
    Fixes: 2d859db3e4 ("ext4: fix data corruption in inodes with journalled data")
    Fixes: 2b405bfa84 ("ext4: fix data=journal fast mount/umount hang")
    Cc: Jan Kara <jack@suse.cz>
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6e853b165d44b259960e6c99e030962dda957475
Author: Jan Kara <jack@suse.cz>
Date:   Mon Jul 4 10:14:01 2016 -0400

    ext4: fix deadlock during page writeback
    
    commit 646caa9c8e196880b41cd3e3d33a2ebc752bdb85 upstream.
    
    Commit 06bd3c36a733 (ext4: fix data exposure after a crash) uncovered a
    deadlock in ext4_writepages() which was previously much harder to hit.
    After this commit xfstest generic/130 reproduces the deadlock on small
    filesystems.
    
    The problem happens when ext4_do_update_inode() sets LARGE_FILE feature
    and marks current inode handle as synchronous. That subsequently results
    in ext4_journal_stop() called from ext4_writepages() to block waiting for
    transaction commit while still holding page locks, reference to io_end,
    and some prepared bio in mpd structure each of which can possibly block
    transaction commit from completing and thus results in deadlock.
    
    Fix the problem by releasing page locks, io_end reference, and
    submitting prepared bio before calling ext4_journal_stop().
    
    [ Changed to defer the call to ext4_journal_stop() only if the handle
      is synchronous.  --tytso ]
    
    Reported-and-tested-by: Eryu Guan <eguan@redhat.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit be6acbd7311504ded04b25edae2c250346dec6f2
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Thu Jun 30 11:53:46 2016 -0400

    ext4: check for extents that wrap around
    
    commit f70749ca42943faa4d4dcce46dfdcaadb1d0c4b6 upstream.
    
    An extent with lblock = 4294967295 and len = 1 will pass the
    ext4_valid_extent() test:
    
            ext4_lblk_t last = lblock + len - 1;
    
            if (len == 0 || lblock > last)
                    return 0;
    
    since last = 4294967295 + 1 - 1 = 4294967295. This would later trigger
    the BUG_ON(es->es_lblk + es->es_len < es->es_lblk) in ext4_es_end().
    
    We can simplify it by removing the - 1 altogether and changing the test
    to use lblock + len <= lblock, since now if len = 0, then lblock + 0 ==
    lblock and it fails, and if len > 0 then lblock + len > lblock in order
    to pass (i.e. it doesn't overflow).
    
    Fixes: 5946d0893 ("ext4: check for overlapping extents in ext4_valid_extent_entries()")
    Fixes: 2f974865f ("ext4: check for zero length extent explicitly")
    Cc: Eryu Guan <guaneryu@gmail.com>
    Signed-off-by: Phil Turnbull <phil.turnbull@oracle.com>
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 29c8e05930bc27761ab957acd0786951bad8ec75
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Tue Jul 12 13:17:57 2016 +0800

    crypto: scatterwalk - Fix test in scatterwalk_done
    
    commit 5f070e81bee35f1b7bd1477bb223a873ff657803 upstream.
    
    When there is more data to be processed, the current test in
    scatterwalk_done may prevent us from calling pagedone even when
    we should.
    
    In particular, if we're on an SG entry spanning multiple pages
    where the last page is not a full page, we will incorrectly skip
    calling pagedone on the second last page.
    
    This patch fixes this by adding a separate test for whether we've
    reached the end of a page.
    
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 427810f95268643f634137b85df0986bef104f13
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Wed Jun 15 22:27:05 2016 +0800

    crypto: gcm - Filter out async ghash if necessary
    
    commit b30bdfa86431afbafe15284a3ad5ac19b49b88e3 upstream.
    
    As it is if you ask for a sync gcm you may actually end up with
    an async one because it does not filter out async implementations
    of ghash.
    
    This patch fixes this by adding the necessary filter when looking
    for ghash.
    
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4269a332b0b6744eaeb0826a0877a2c77f696ac6
Author: Wei Fang <fangwei1@huawei.com>
Date:   Mon Jul 25 21:17:04 2016 +0800

    fuse: fix wrong assignment of ->flags in fuse_send_init()
    
    commit 9446385f05c9af25fed53dbed3cc75763730be52 upstream.
    
    FUSE_HAS_IOCTL_DIR should be assigned to ->flags, it may be a typo.
    
    Signed-off-by: Wei Fang <fangwei1@huawei.com>
    Signed-off-by: Miklos Szeredi <mszeredi@redhat.com>
    Fixes: 69fe05c90ed5 ("fuse: add missing INIT flags")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cf0483ab763c88796de68eb041a57a7ff5c94b2c
Author: Fabian Frederick <fabf@skynet.be>
Date:   Tue Aug 2 14:03:07 2016 -0700

    sysv, ipc: fix security-layer leaking
    
    commit 9b24fef9f0410fb5364245d6cc2bd044cc064007 upstream.
    
    Commit 53dad6d3a8e5 ("ipc: fix race with LSMs") updated ipc_rcu_putref()
    to receive rcu freeing function but used generic ipc_rcu_free() instead
    of msg_rcu_free() which does security cleaning.
    
    Running LTP msgsnd06 with kmemleak gives the following:
    
      cat /sys/kernel/debug/kmemleak
    
      unreferenced object 0xffff88003c0a11f8 (size 8):
        comm "msgsnd06", pid 1645, jiffies 4294672526 (age 6.549s)
        hex dump (first 8 bytes):
          1b 00 00 00 01 00 00 00                          ........
        backtrace:
          kmemleak_alloc+0x23/0x40
          kmem_cache_alloc_trace+0xe1/0x180
          selinux_msg_queue_alloc_security+0x3f/0xd0
          security_msg_queue_alloc+0x2e/0x40
          newque+0x4e/0x150
          ipcget+0x159/0x1b0
          SyS_msgget+0x39/0x40
          entry_SYSCALL_64_fastpath+0x13/0x8f
    
    Manfred Spraul suggested to fix sem.c as well and Davidlohr Bueso to
    only use ipc_rcu_free in case of security allocation failure in newary()
    
    Fixes: 53dad6d3a8e ("ipc: fix race with LSMs")
    Link: http://lkml.kernel.org/r/1470083552-22966-1-git-send-email-fabf@skynet.be
    Signed-off-by: Fabian Frederick <fabf@skynet.be>
    Cc: Davidlohr Bueso <dbueso@suse.de>
    Cc: Manfred Spraul <manfred@colorfullife.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 8cb3a41575d84a56f9dd7686286aafd84e5313c3
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Fri Jul 29 10:40:31 2016 +0200

    block: fix use-after-free in seq file
    
    commit 77da160530dd1dc94f6ae15a981f24e5f0021e84 upstream.
    
    I got a KASAN report of use-after-free:
    
        ==================================================================
        BUG: KASAN: use-after-free in klist_iter_exit+0x61/0x70 at addr ffff8800b6581508
        Read of size 8 by task trinity-c1/315
        =============================================================================
        BUG kmalloc-32 (Not tainted): kasan: bad access detected
        -----------------------------------------------------------------------------
    
        Disabling lock debugging due to kernel taint
        INFO: Allocated in disk_seqf_start+0x66/0x110 age=144 cpu=1 pid=315
                ___slab_alloc+0x4f1/0x520
                __slab_alloc.isra.58+0x56/0x80
                kmem_cache_alloc_trace+0x260/0x2a0
                disk_seqf_start+0x66/0x110
                traverse+0x176/0x860
                seq_read+0x7e3/0x11a0
                proc_reg_read+0xbc/0x180
                do_loop_readv_writev+0x134/0x210
                do_readv_writev+0x565/0x660
                vfs_readv+0x67/0xa0
                do_preadv+0x126/0x170
                SyS_preadv+0xc/0x10
                do_syscall_64+0x1a1/0x460
                return_from_SYSCALL_64+0x0/0x6a
        INFO: Freed in disk_seqf_stop+0x42/0x50 age=160 cpu=1 pid=315
                __slab_free+0x17a/0x2c0
                kfree+0x20a/0x220
                disk_seqf_stop+0x42/0x50
                traverse+0x3b5/0x860
                seq_read+0x7e3/0x11a0
                proc_reg_read+0xbc/0x180
                do_loop_readv_writev+0x134/0x210
                do_readv_writev+0x565/0x660
                vfs_readv+0x67/0xa0
                do_preadv+0x126/0x170
                SyS_preadv+0xc/0x10
                do_syscall_64+0x1a1/0x460
                return_from_SYSCALL_64+0x0/0x6a
    
        CPU: 1 PID: 315 Comm: trinity-c1 Tainted: G    B           4.7.0+ #62
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
         ffffea0002d96000 ffff880119b9f918 ffffffff81d6ce81 ffff88011a804480
         ffff8800b6581500 ffff880119b9f948 ffffffff8146c7bd ffff88011a804480
         ffffea0002d96000 ffff8800b6581500 fffffffffffffff4 ffff880119b9f970
        Call Trace:
         [<ffffffff81d6ce81>] dump_stack+0x65/0x84
         [<ffffffff8146c7bd>] print_trailer+0x10d/0x1a0
         [<ffffffff814704ff>] object_err+0x2f/0x40
         [<ffffffff814754d1>] kasan_report_error+0x221/0x520
         [<ffffffff8147590e>] __asan_report_load8_noabort+0x3e/0x40
         [<ffffffff83888161>] klist_iter_exit+0x61/0x70
         [<ffffffff82404389>] class_dev_iter_exit+0x9/0x10
         [<ffffffff81d2e8ea>] disk_seqf_stop+0x3a/0x50
         [<ffffffff8151f812>] seq_read+0x4b2/0x11a0
         [<ffffffff815f8fdc>] proc_reg_read+0xbc/0x180
         [<ffffffff814b24e4>] do_loop_readv_writev+0x134/0x210
         [<ffffffff814b4c45>] do_readv_writev+0x565/0x660
         [<ffffffff814b8a17>] vfs_readv+0x67/0xa0
         [<ffffffff814b8de6>] do_preadv+0x126/0x170
         [<ffffffff814b92ec>] SyS_preadv+0xc/0x10
    
    This problem can occur in the following situation:
    
    open()
     - pread()
        - .seq_start()
           - iter = kmalloc() // succeeds
           - seqf->private = iter
        - .seq_stop()
           - kfree(seqf->private)
     - pread()
        - .seq_start()
           - iter = kmalloc() // fails
        - .seq_stop()
           - class_dev_iter_exit(seqf->private) // boom! old pointer
    
    As the comment in disk_seqf_stop() says, stop is called even if start
    failed, so we need to reinitialise the private pointer to NULL when seq
    iteration stops.
    
    An alternative would be to set the private pointer to NULL when the
    kmalloc() in disk_seqf_start() fails.
    
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Acked-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Jens Axboe <axboe@fb.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c96c87e19293995d5adde47bb20ae827e8b73607
Author: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
Date:   Sun Apr 10 19:13:13 2016 -0600

    IB/security: Restrict use of the write() interface
    
    commit e6bd18f57aad1a2d1ef40e646d03ed0f2515c9e3 upstream.
    
    The drivers/infiniband stack uses write() as a replacement for
    bi-directional ioctl().  This is not safe. There are ways to
    trigger write calls that result in the return structure that
    is normally written to user space being shunted off to user
    specified kernel memory instead.
    
    For the immediate repair, detect and deny suspicious accesses to
    the write API.
    
    For long term, update the user space libraries and the kernel API
    to something that doesn't present the same security vulnerabilities
    (likely a structured ioctl() interface).
    
    The impacted uAPI interfaces are generally only available if
    hardware from drivers/infiniband is installed in the system.
    
    Reported-by: Jann Horn <jann@thejh.net>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
    [ Expanded check to all known write() entry points ]
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    [ Expanded to include removed ipath driver, and dropped non-existent
      hfi1 driver ]
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4b3aa8653268c0f6cd1753304ed755961f716715
Author: James Bottomley <James.Bottomley@HansenPartnership.com>
Date:   Fri May 13 12:04:06 2016 -0700

    scsi_lib: correctly retry failed zero length REQ_TYPE_FS commands
    
    commit a621bac3044ed6f7ec5fa0326491b2d4838bfa93 upstream.
    
    When SCSI was written, all commands coming from the filesystem
    (REQ_TYPE_FS commands) had data.  This meant that our signal for needing
    to complete the command was the number of bytes completed being equal to
    the number of bytes in the request.  Unfortunately, with the advent of
    flush barriers, we can now get zero length REQ_TYPE_FS commands, which
    confuse this logic because they satisfy the condition every time.  This
    means they never get retried even for retryable conditions, like UNIT
    ATTENTION because we complete them early assuming they're done.  Fix
    this by special casing the early completion condition to recognise zero
    length commands with errors and let them drop through to the retry code.
    
    Reported-by: Sebastian Parschauer <s.parschauer@gmx.de>
    Signed-off-by: James E.J. Bottomley <jejb@linux.vnet.ibm.com>
    Tested-by: Jack Wang <jinpu.wang@profitbricks.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    [ jwang: backport from upstream 4.7 to fix scsi resize issue ]
    Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0e97a8f326f49839015cc0a5780059e15d563f9a
Author: Christoph Hellwig <hch@lst.de>
Date:   Thu May 1 16:51:03 2014 +0200

    scsi: remove scsi_end_request
    
    commit bc85dc500f9df9b2eec15077e5046672c46adeaa upstream.
    
    By folding scsi_end_request into its only caller we can significantly clean
    up the completion logic.  We can use simple goto labels now to only have
    a single place to finish or requeue command there instead of the previous
    convoluted logic.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Reviewed-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Reviewed-by: Mike Christie <michaelc@cs.wisc.edu>
    Reviewed-by: Hannes Reinecke <hare@suse.de>
    [jwang: backport to 3.12]
    Signed-off-by: Jack Wang <jinpu.wang@profitbricks.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 25bc549dc31baad563f796c1f9633e12eb944278
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Sun Jul 3 17:01:26 2016 -0400

    random: strengthen input validation for RNDADDTOENTCNT
    
    commit 86a574de4590ffe6fd3f3ca34cdcf655a78e36ec upstream.
    
    Don't allow RNDADDTOENTCNT or RNDADDENTROPY to accept a negative
    entropy value.  It doesn't make any sense to subtract from the entropy
    counter, and it can trigger a warning:
    
    random: negative entropy/overflow: pool input count -40000
    ------------[ cut here ]------------
    WARNING: CPU: 3 PID: 6828 at drivers/char/random.c:670[<      none
     >] credit_entropy_bits+0x21e/0xad0 drivers/char/random.c:670
    Modules linked in:
    CPU: 3 PID: 6828 Comm: a.out Not tainted 4.7.0-rc4+ #4
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
     ffffffff880b58e0 ffff88005dd9fcb0 ffffffff82cc838f ffffffff87158b40
     fffffbfff1016b1c 0000000000000000 0000000000000000 ffffffff87158b40
     ffffffff83283dae 0000000000000009 ffff88005dd9fcf8 ffffffff8136d27f
    Call Trace:
     [<     inline     >] __dump_stack lib/dump_stack.c:15
     [<ffffffff82cc838f>] dump_stack+0x12e/0x18f lib/dump_stack.c:51
     [<ffffffff8136d27f>] __warn+0x19f/0x1e0 kernel/panic.c:516
     [<ffffffff8136d48c>] warn_slowpath_null+0x2c/0x40 kernel/panic.c:551
     [<ffffffff83283dae>] credit_entropy_bits+0x21e/0xad0 drivers/char/random.c:670
     [<     inline     >] credit_entropy_bits_safe drivers/char/random.c:734
     [<ffffffff8328785d>] random_ioctl+0x21d/0x250 drivers/char/random.c:1546
     [<     inline     >] vfs_ioctl fs/ioctl.c:43
     [<ffffffff8185316c>] do_vfs_ioctl+0x18c/0xff0 fs/ioctl.c:674
     [<     inline     >] SYSC_ioctl fs/ioctl.c:689
     [<ffffffff8185405f>] SyS_ioctl+0x8f/0xc0 fs/ioctl.c:680
     [<ffffffff86a995c0>] entry_SYSCALL_64_fastpath+0x23/0xc1
    arch/x86/entry/entry_64.S:207
    ---[ end trace 5d4902b2ba842f1f ]---
    
    This was triggered using the test program:
    
    // autogenerated by syzkaller (http://github.com/google/syzkaller)
    
    int main() {
            int fd = open("/dev/random", O_RDWR);
            int val = -5000;
            ioctl(fd, RNDADDTOENTCNT, &val);
            return 0;
    }
    
    It's harmless in that (a) only root can trigger it, and (b) after
    complaining the code never does let the entropy count go negative, but
    it's better to simply not allow this userspace from passing in a
    negative entropy value altogether.
    
    Google-Bug-Id: #29575089
    Reported-By: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 897b4676a9e079d4d47a1c20ec94225def925f52
Author: John Johansen <john.johansen@canonical.com>
Date:   Wed Nov 18 11:41:05 2015 -0800

    apparmor: fix ref count leak when profile sha1 hash is read
    
    commit 0b938a2e2cf0b0a2c8bac9769111545aff0fee97 upstream.
    
    Signed-off-by: John Johansen <john.johansen@canonical.com>
    Acked-by: Seth Arnold <seth.arnold@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6fc918b238e87a5684be0a898619d150f9fc7cac
Author: David Howells <dhowells@redhat.com>
Date:   Wed Jul 27 11:43:37 2016 +0100

    KEYS: 64-bit MIPS needs to use compat_sys_keyctl for 32-bit userspace
    
    commit 20f06ed9f61a185c6dabd662c310bed6189470df upstream.
    
    MIPS64 needs to use compat_sys_keyctl for 32-bit userspace rather than
    calling sys_keyctl.  The latter will work in a lot of cases, thereby hiding
    the issue.
    
    Reported-by: Stephan Mueller <smueller@chronox.de>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Cc: linux-security-module@vger.kernel.org
    Cc: keyrings@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/13832/
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e380a2712ff17b87a0fee55143862c998098144c
Author: Dave Weinstein <olorin@google.com>
Date:   Thu Jul 28 11:55:41 2016 -0700

    arm: oabi compat: add missing access checks
    
    commit 7de249964f5578e67b99699c5f0b405738d820a2 upstream.
    
    Add access checks to sys_oabi_epoll_wait() and sys_oabi_semtimedop().
    This fixes CVE-2016-3857, a local privilege escalation under
    CONFIG_OABI_COMPAT.
    
    Reported-by: Chiachih Wu <wuchiachih@gmail.com>
    Reviewed-by: Kees Cook <keescook@chromium.org>
    Reviewed-by: Nicolas Pitre <nico@linaro.org>
    Signed-off-by: Dave Weinstein <olorin@google.com>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 68c20ee35494d7cc322784872213c8541242812c
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Sun Aug 14 17:09:16 2016 +0200

    USB: fix up incorrect quirk
    
    Ben Hutchings reported that commit ddbe1fca0bcb ("USB: Add device quirk
    for ASUS T100 Base Station keyboard") was incorrectly ported.
    
    This patch fixes up the quirk by putting it in the correct table.
    
    Reported-by: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0c17e10854221a4b59bb0266f60cac96f2ad225a
Author: Bjørn Mork <bjorn@mork.no>
Date:   Mon Mar 7 21:15:36 2016 +0100

    cdc_ncm: do not call usbnet_link_change from cdc_ncm_bind
    
    commit 4d06dd537f95683aba3651098ae288b7cbff8274 upstream.
    
    usbnet_link_change will call schedule_work and should be
    avoided if bind is failing. Otherwise we will end up with
    scheduled work referring to a netdev which has gone away.
    
    Instead of making the call conditional, we can just defer
    it to usbnet_probe, using the driver_info flag made for
    this purpose.
    
    Fixes: 8a34b0ae8778 ("usbnet: cdc_ncm: apply usbnet_link_change")
    Reported-by: Andrey Konovalov <andreyknvl@gmail.com>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    [ciwillia@brocade.com: backported to 3.14: adjusted context]
    Signed-off-by: Charles (Chas) Williams <ciwillia@brocade.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 46fdf98a98555bcdd2b05e5f8851f42bd2037b4c
Author: Andy Lutomirski <luto@kernel.org>
Date:   Tue Jan 12 12:47:40 2016 -0800

    x86/mm: Improve switch_mm() barrier comments
    
    commit 4eaffdd5a5fe6ff9f95e1ab4de1ac904d5e0fa8b upstream.
    
    My previous comments were still a bit confusing and there was a
    typo. Fix it up.
    
    Reported-by: Peter Zijlstra <peterz@infradead.org>
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: stable@vger.kernel.org
    Fixes: 71b3c126e611 ("x86/mm: Add barriers and document switch_mm()-vs-flush synchronization")
    Link: http://lkml.kernel.org/r/0a0b43cdcdd241c5faaaecfbcc91a155ddedc9a1.1452631609.git.luto@kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a4377c6e467b0b8420ee2d4384ae582ed506ee86
Author: Karl Heiss <kheiss@gmail.com>
Date:   Thu Sep 24 12:15:07 2015 -0400

    sctp: Prevent soft lockup when sctp_accept() is called during a timeout event
    
    commit 635682a14427d241bab7bbdeebb48a7d7b91638e upstream.
    
    A case can occur when sctp_accept() is called by the user during
    a heartbeat timeout event after the 4-way handshake.  Since
    sctp_assoc_migrate() changes both assoc->base.sk and assoc->ep, the
    bh_sock_lock in sctp_generate_heartbeat_event() will be taken with
    the listening socket but released with the new association socket.
    The result is a deadlock on any future attempts to take the listening
    socket lock.
    
    Note that this race can occur with other SCTP timeouts that take
    the bh_lock_sock() in the event sctp_accept() is called.
    
     BUG: soft lockup - CPU#9 stuck for 67s! [swapper:0]
     ...
     RIP: 0010:[<ffffffff8152d48e>]  [<ffffffff8152d48e>] _spin_lock+0x1e/0x30
     RSP: 0018:ffff880028323b20  EFLAGS: 00000206
     RAX: 0000000000000002 RBX: ffff880028323b20 RCX: 0000000000000000
     RDX: 0000000000000000 RSI: ffff880028323be0 RDI: ffff8804632c4b48
     RBP: ffffffff8100bb93 R08: 0000000000000000 R09: 0000000000000000
     R10: ffff880610662280 R11: 0000000000000100 R12: ffff880028323aa0
     R13: ffff8804383c3880 R14: ffff880028323a90 R15: ffffffff81534225
     FS:  0000000000000000(0000) GS:ffff880028320000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0018 ES: 0018 CR0: 000000008005003b
     CR2: 00000000006df528 CR3: 0000000001a85000 CR4: 00000000000006e0
     DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
     DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
     Process swapper (pid: 0, threadinfo ffff880616b70000, task ffff880616b6cab0)
     Stack:
     ffff880028323c40 ffffffffa01c2582 ffff880614cfb020 0000000000000000
     <d> 0100000000000000 00000014383a6c44 ffff8804383c3880 ffff880614e93c00
     <d> ffff880614e93c00 0000000000000000 ffff8804632c4b00 ffff8804383c38b8
     Call Trace:
     <IRQ>
     [<ffffffffa01c2582>] ? sctp_rcv+0x492/0xa10 [sctp]
     [<ffffffff8148c559>] ? nf_iterate+0x69/0xb0
     [<ffffffff814974a0>] ? ip_local_deliver_finish+0x0/0x2d0
     [<ffffffff8148c716>] ? nf_hook_slow+0x76/0x120
     [<ffffffff814974a0>] ? ip_local_deliver_finish+0x0/0x2d0
     [<ffffffff8149757d>] ? ip_local_deliver_finish+0xdd/0x2d0
     [<ffffffff81497808>] ? ip_local_deliver+0x98/0xa0
     [<ffffffff81496ccd>] ? ip_rcv_finish+0x12d/0x440
     [<ffffffff81497255>] ? ip_rcv+0x275/0x350
     [<ffffffff8145cfeb>] ? __netif_receive_skb+0x4ab/0x750
     ...
    
    With lockdep debugging:
    
     =====================================
     [ BUG: bad unlock balance detected! ]
     -------------------------------------
     CslRx/12087 is trying to release lock (slock-AF_INET) at:
     [<ffffffffa01bcae0>] sctp_generate_timeout_event+0x40/0xe0 [sctp]
     but there are no more locks to release!
    
     other info that might help us debug this:
     2 locks held by CslRx/12087:
     #0:  (&asoc->timers[i]){+.-...}, at: [<ffffffff8108ce1f>] run_timer_softirq+0x16f/0x3e0
     #1:  (slock-AF_INET){+.-...}, at: [<ffffffffa01bcac3>] sctp_generate_timeout_event+0x23/0xe0 [sctp]
    
    Ensure the socket taken is also the same one that is released by
    saving a copy of the socket before entering the timeout event
    critical section.
    
    Signed-off-by: Karl Heiss <kheiss@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    (cherry picked from commit 013dd9e038723bbd2aa67be51847384b75be8253)
    Signed-off-by: Chas Williams <3chas3@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1b8542cd64724bb7b61dcc0ccfe0ccbefff1bc2d
Author: Andy Lutomirski <luto@kernel.org>
Date:   Wed Jan 6 12:21:01 2016 -0800

    x86/mm: Add barriers and document switch_mm()-vs-flush synchronization
    
    commit 71b3c126e61177eb693423f2e18a1914205b165e upstream.
    
    When switch_mm() activates a new PGD, it also sets a bit that
    tells other CPUs that the PGD is in use so that TLB flush IPIs
    will be sent.  In order for that to work correctly, the bit
    needs to be visible prior to loading the PGD and therefore
    starting to fill the local TLB.
    
    Document all the barriers that make this work correctly and add
    a couple that were missing.
    
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Dave Hansen <dave.hansen@linux.intel.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-mm@kvack.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [ luis: backported to 3.16:
      - dropped N/A comment in flush_tlb_mm_range()
      - adjusted context ]
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    [ciwillia@brocade.com: backported to 3.14: adjusted context]
    Signed-off-by: Charles (Chas) Williams <ciwillia@brocade.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7c7b4fe10c2a7201f1cd8850b7cced64b2b09219
Author: Tejun Heo <tj@kernel.org>
Date:   Fri Jan 15 16:58:24 2016 -0800

    printk: do cond_resched() between lines while outputting to consoles
    
    commit 8d91f8b15361dfb438ab6eb3b319e2ded43458ff upstream.
    
    @console_may_schedule tracks whether console_sem was acquired through
    lock or trylock.  If the former, we're inside a sleepable context and
    console_conditional_schedule() performs cond_resched().  This allows
    console drivers which use console_lock for synchronization to yield
    while performing time-consuming operations such as scrolling.
    
    However, the actual console outputting is performed while holding
    irq-safe logbuf_lock, so console_unlock() clears @console_may_schedule
    before starting outputting lines.  Also, only a few drivers call
    console_conditional_schedule() to begin with.  This means that when a
    lot of lines need to be output by console_unlock(), for example on a
    console registration, the task doing console_unlock() may not yield for
    a long time on a non-preemptible kernel.
    
    If this happens with a slow console devices, for example a serial
    console, the outputting task may occupy the cpu for a very long time.
    Long enough to trigger softlockup and/or RCU stall warnings, which in
    turn pile more messages, sometimes enough to trigger the next cycle of
    warnings incapacitating the system.
    
    Fix it by making console_unlock() insert cond_resched() between lines if
    @console_may_schedule.
    
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Reported-by: Calvin Owens <calvinowens@fb.com>
    Acked-by: Jan Kara <jack@suse.com>
    Cc: Dave Jones <davej@codemonkey.org.uk>
    Cc: Kyle McMartin <kyle@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>
    [ciwillia@brocade.com: adjust context for 3.14.y]
    Signed-off-by: Chas Williams <ciwillia@brocade.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 53a35fd395a1d7fdcab6477621358833ea27897b
Author: Hugh Dickins <hughd@google.com>
Date:   Thu Nov 5 18:50:05 2015 -0800

    mm: migrate dirty page without clear_page_dirty_for_io etc
    
    commit 42cb14b110a5698ccf26ce59c4441722605a3743 upstream.
    
    clear_page_dirty_for_io() has accumulated writeback and memcg subtleties
    since v2.6.16 first introduced page migration; and the set_page_dirty()
    which completed its migration of PageDirty, later had to be moderated to
    __set_page_dirty_nobuffers(); then PageSwapBacked had to skip that too.
    
    No actual problems seen with this procedure recently, but if you look into
    what the clear_page_dirty_for_io(page)+set_page_dirty(newpage) is actually
    achieving, it turns out to be nothing more than moving the PageDirty flag,
    and its NR_FILE_DIRTY stat from one zone to another.
    
    It would be good to avoid a pile of irrelevant decrementations and
    incrementations, and improper event counting, and unnecessary descent of
    the radix_tree under tree_lock (to set the PAGECACHE_TAG_DIRTY which
    radix_tree_replace_slot() left in place anyway).
    
    Do the NR_FILE_DIRTY movement, like the other stats movements, while
    interrupts still disabled in migrate_page_move_mapping(); and don't even
    bother if the zone is the same.  Do the PageDirty movement there under
    tree_lock too, where old page is frozen and newpage not yet visible:
    bearing in mind that as soon as newpage becomes visible in radix_tree, an
    un-page-locked set_page_dirty() might interfere (or perhaps that's just
    not possible: anything doing so should already hold an additional
    reference to the old page, preventing its migration; but play safe).
    
    But we do still need to transfer PageDirty in migrate_page_copy(), for
    those who don't go the mapping route through migrate_page_move_mapping().
    
    Signed-off-by: Hugh Dickins <hughd@google.com>
    Cc: Christoph Lameter <cl@linux.com>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Rik van Riel <riel@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Davidlohr Bueso <dave@stgolabs.net>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Sasha Levin <sasha.levin@oracle.com>
    Cc: Dmitry Vyukov <dvyukov@google.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [ciwillia@brocade.com: backported to 3.14: adjusted context]
    Signed-off-by: Charles (Chas) Williams <ciwillia@brocade.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 627c25d08197bafc328d9ac841dfc1a143806a71
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Wed Dec 16 13:32:38 2015 -0500

    USB: fix invalid memory access in hub_activate()
    
    commit e50293ef9775c5f1cf3fcc093037dd6a8c5684ea upstream.
    
    Commit 8520f38099cc ("USB: change hub initialization sleeps to
    delayed_work") changed the hub_activate() routine to make part of it
    run in a workqueue.  However, the commit failed to take a reference to
    the usb_hub structure or to lock the hub interface while doing so.  As
    a result, if a hub is plugged in and quickly unplugged before the work
    routine can run, the routine will try to access memory that has been
    deallocated.  Or, if the hub is unplugged while the routine is
    running, the memory may be deallocated while it is in active use.
    
    This patch fixes the problem by taking a reference to the usb_hub at
    the start of hub_activate() and releasing it at the end (when the work
    is finished), and by locking the hub interface while the work routine
    is running.  It also adds a check at the start of the routine to see
    if the hub has already been disconnected, in which nothing should be
    done.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Reported-by: Alexandru Cornea <alexandru.cornea@intel.com>
    Tested-by: Alexandru Cornea <alexandru.cornea@intel.com>
    Fixes: 8520f38099cc ("USB: change hub initialization sleeps to delayed_work")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [ luis: backported to 3.16:
      - Added forward declaration of hub_release() which mainline had with commit
        32a6958998c5 ("usb: hub: convert khubd into workqueue") ]
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    Signed-off-by: Charles (Chas) Williams <ciwillia@brocade.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>