commit 8366868460f8784e30302f441546a9d72ffe1236
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Jun 14 12:54:45 2017 +0200

    Linux 3.18.57

commit d96c363ff004fbb42f728b3e4299a71c4e567568
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Jun 2 15:03:38 2017 +0200

    ALSA: timer: Fix race between read and ioctl
    
    commit d11662f4f798b50d8c8743f433842c3e40fe3378 upstream.
    
    The read from ALSA timer device, the function snd_timer_user_tread(),
    may access to an uninitialized struct snd_timer_user fields when the
    read is concurrently performed while the ioctl like
    snd_timer_user_tselect() is invoked.  We have already fixed the races
    among ioctls via a mutex, but we seem to have forgotten the race
    between read vs ioctl.
    
    This patch simply applies (more exactly extends the already applied
    range of) tu->ioctl_lock in snd_timer_user_tread() for closing the
    race window.
    
    Reported-by: Alexander Potapenko <glider@google.com>
    Tested-by: Alexander Potapenko <glider@google.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4489545a1d45d1163f7c6eb83a6c38ee5082d1f5
Author: Christoph Hellwig <hch@lst.de>
Date:   Fri Aug 28 09:27:19 2015 +0200

    mlx5: stop including <asm-generic/kmap_types.h>
    
    commit adec640e03668e42f30f3b09c0b4d60d44545f6f upstream.
    
    <linux/highmem.h> is the placace the get the kmap type flags, asm-generic
    files are generic implementations only to be used by architecture code.
    
    Signed-off-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 810afc5b6bb6a50e95b8b5c4d07113d07e54e06a
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Wed May 3 16:09:34 2017 +0100

    arm64: ensure extension of smp_store_release value
    
    commit 994870bead4ab19087a79492400a5478e2906196 upstream.
    
    When an inline assembly operand's type is narrower than the register it
    is allocated to, the least significant bits of the register (up to the
    operand type's width) are valid, and any other bits are permitted to
    contain any arbitrary value. This aligns with the AAPCS64 parameter
    passing rules.
    
    Our __smp_store_release() implementation does not account for this, and
    implicitly assumes that operands have been zero-extended to the width of
    the type being stored to. Thus, we may store unknown values to memory
    when the value type is narrower than the pointer type (e.g. when storing
    a char to a long).
    
    This patch fixes the issue by casting the value operand to the same
    width as the pointer operand in all cases, which ensures that the value
    is zero-extended as we expect. We use the same union trickery as
    __smp_load_acquire and {READ,WRITE}_ONCE() to avoid GCC complaining that
    pointers are potentially cast to narrower width integers in unreachable
    paths.
    
    A whitespace issue at the top of __smp_store_release() is also
    corrected.
    
    No changes are necessary for __smp_load_acquire(). Load instructions
    implicitly clear any upper bits of the register, and the compiler will
    only consider the least significant bits of the register as valid
    regardless.
    
    Fixes: 47933ad41a86 ("arch: Introduce smp_load_acquire(), smp_store_release()")
    Fixes: 878a84d5a8a1 ("arm64: add missing data types in smp_load_acquire/smp_store_release")
    Cc: <stable@vger.kernel.org> # 3.14.x-
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Cc: Matthias Kaehlcke <mka@chromium.org>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6b064857812f3ae39acc8c0b9486706e14c87cad
Author: Kees Cook <keescook@chromium.org>
Date:   Mon Feb 13 11:25:26 2017 -0800

    usercopy: Adjust tests to deal with SMAP/PAN
    
    commit f5f893c57e37ca730808cb2eee3820abd05e7507 upstream.
    
    Under SMAP/PAN/etc, we cannot write directly to userspace memory, so
    this rearranges the test bytes to get written through copy_to_user().
    Additionally drops the bad copy_from_user() test that would trigger a
    memcpy() against userspace on failure.
    
    [arnd: the test module was added in 3.14, and this backported patch
           should apply cleanly on all version from 3.14 to 4.10.
           The original patch was in 4.11 on top of a context change
           I saw the bug triggered with kselftest on a 4.4.y stable kernel]
    
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6dc95d1f9f73e5f5b539ab07443e8510dc700f0b
Author: Mike Marciniszyn <mike.marciniszyn@intel.com>
Date:   Fri May 12 09:02:00 2017 -0700

    RDMA/qib,hfi1: Fix MR reference count leak on write with immediate
    
    commit 1feb40067cf04ae48d65f728d62ca255c9449178 upstream.
    
    The handling of IB_RDMA_WRITE_ONLY_WITH_IMMEDIATE will leak a memory
    reference when a buffer cannot be allocated for returning the immediate
    data.
    
    The issue is that the rkey validation has already occurred and the RNR
    nak fails to release the reference that was fruitlessly gotten.  The
    the peer will send the identical single packet request when its RNR
    timer pops.
    
    The fix is to release the held reference prior to the rnr nak exit.
    This is the only sequence the requires both rkey validation and the
    buffer allocation on the same packet.
    
    Cc: Stable <stable@vger.kernel.org> # 4.7+
    Tested-by: Tadeusz Struk <tadeusz.struk@intel.com>
    Reviewed-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
    Signed-off-by: Mike Marciniszyn <mike.marciniszyn@intel.com>
    Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ae91d1e46d2b3a1eb1d769303ec7f7b44528670b
Author: Kristina Martsenko <kristina.martsenko@arm.com>
Date:   Wed May 3 16:37:47 2017 +0100

    arm64: entry: improve data abort handling of tagged pointers
    
    commit 276e93279a630657fff4b086ba14c95955912dfa upstream.
    
    When handling a data abort from EL0, we currently zero the top byte of
    the faulting address, as we assume the address is a TTBR0 address, which
    may contain a non-zero address tag. However, the address may be a TTBR1
    address, in which case we should not zero the top byte. This patch fixes
    that. The effect is that the full TTBR1 address is passed to the task's
    signal handler (or printed out in the kernel log).
    
    When handling a data abort from EL1, we leave the faulting address
    intact, as we assume it's either a TTBR1 address or a TTBR0 address with
    tag 0x00. This is true as far as I'm aware, we don't seem to access a
    tagged TTBR0 address anywhere in the kernel. Regardless, it's easy to
    forget about address tags, and code added in the future may not always
    remember to remove tags from addresses before accessing them. So add tag
    handling to the EL1 data abort handler as well. This also makes it
    consistent with the EL0 data abort handler.
    
    Fixes: d50240a5f6ce ("arm64: mm: permit use of tagged pointers at EL0")
    Reviewed-by: Dave Martin <Dave.Martin@arm.com>
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Kristina Martsenko <kristina.martsenko@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d8f0905a0d4347061291e2ce3fcd75196df5851a
Author: Kristina Martsenko <kristina.martsenko@arm.com>
Date:   Wed May 3 16:37:46 2017 +0100

    arm64: hw_breakpoint: fix watchpoint matching for tagged pointers
    
    commit 7dcd9dd8cebe9fa626af7e2358d03a37041a70fb upstream.
    
    When we take a watchpoint exception, the address that triggered the
    watchpoint is found in FAR_EL1. We compare it to the address of each
    configured watchpoint to see which one was hit.
    
    The configured watchpoint addresses are untagged, while the address in
    FAR_EL1 will have an address tag if the data access was done using a
    tagged address. The tag needs to be removed to compare the address to
    the watchpoints.
    
    Currently we don't remove it, and as a result can report the wrong
    watchpoint as being hit (specifically, always either the highest TTBR0
    watchpoint or lowest TTBR1 watchpoint). This patch removes the tag.
    
    Fixes: d50240a5f6ce ("arm64: mm: permit use of tagged pointers at EL0")
    Acked-by: Mark Rutland <mark.rutland@arm.com>
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Kristina Martsenko <kristina.martsenko@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d92015ef48105f8564887ddbed805318ba3f6d53
Author: Takatoshi Akiyama <takatoshi.akiyama.kj@ps.hitachi-solutions.com>
Date:   Mon Feb 27 15:56:31 2017 +0900

    serial: sh-sci: Fix panic when serial console and DMA are enabled
    
    commit 3c9101766b502a0163d1d437fada5801cf616be2 upstream.
    
    This patch fixes an issue that kernel panic happens when DMA is enabled
    and we press enter key while the kernel booting on the serial console.
    
    * An interrupt may occur after sci_request_irq().
    * DMA transfer area is initialized by setup_timer() in sci_request_dma()
      and used in interrupt.
    
    If an interrupt occurred between sci_request_irq() and setup_timer() in
    sci_request_dma(), DMA transfer area has not been initialized yet.
    So, this patch changes the order of sci_request_irq() and
    sci_request_dma().
    
    Fixes: 73a19e4c0301 ("serial: sh-sci: Add DMA support.")
    Signed-off-by: Takatoshi Akiyama <takatoshi.akiyama.kj@ps.hitachi-solutions.com>
    [Shimoda changes the commit log]
    Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Cc: Jiri Slaby <jslaby@suse.cz>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c4b784e7a35ba4c2b322a695b911c8d55868783b
Author: Julius Werner <jwerner@chromium.org>
Date:   Fri Jun 2 15:36:39 2017 -0700

    drivers: char: mem: Fix wraparound check to allow mappings up to the end
    
    commit 32829da54d9368103a2f03269a5120aa9ee4d5da upstream.
    
    A recent fix to /dev/mem prevents mappings from wrapping around the end
    of physical address space. However, the check was written in a way that
    also prevents a mapping reaching just up to the end of physical address
    space, which may be a valid use case (especially on 32-bit systems).
    This patch fixes it by checking the last mapped address (instead of the
    first address behind that) for overflow.
    
    Fixes: b299cde245 ("drivers: char: mem: Check for address space wraparound with mmap()")
    Reported-by: Nico Huber <nico.h@gmx.de>
    Signed-off-by: Julius Werner <jwerner@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 96f81ced46b3742300682808708506b6ce8551b2
Author: Takashi Iwai <tiwai@suse.de>
Date:   Wed May 24 10:19:45 2017 +0200

    ASoC: Fix use-after-free at card unregistration
    
    commit 4efda5f2130da033aeedc5b3205569893b910de2 upstream.
    
    soc_cleanup_card_resources() call snd_card_free() at the last of its
    procedure.  This turned out to lead to a use-after-free.
    PCM runtimes have been already removed via soc_remove_pcm_runtimes(),
    while it's dereferenced later in soc_pcm_free() called via
    snd_card_free().
    
    The fix is simple: just move the snd_card_free() call to the beginning
    of the whole procedure.  This also gives another benefit: it
    guarantees that all operations have been shut down before actually
    releasing the resources, which was racy until now.
    
    Reported-and-tested-by: Robert Jarzmik <robert.jarzmik@free.fr>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 69413811d2536f8ad626cc9537d34dd39133ebab
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Jun 2 17:26:56 2017 +0200

    ALSA: timer: Fix missing queue indices reset at SNDRV_TIMER_IOCTL_SELECT
    
    commit ba3021b2c79b2fa9114f92790a99deb27a65b728 upstream.
    
    snd_timer_user_tselect() reallocates the queue buffer dynamically, but
    it forgot to reset its indices.  Since the read may happen
    concurrently with ioctl and snd_timer_user_tselect() allocates the
    buffer via kmalloc(), this may lead to the leak of uninitialized
    kernel-space data, as spotted via KMSAN:
    
      BUG: KMSAN: use of unitialized memory in snd_timer_user_read+0x6c4/0xa10
      CPU: 0 PID: 1037 Comm: probe Not tainted 4.11.0-rc5+ #2739
      Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS Bochs 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:16
       dump_stack+0x143/0x1b0 lib/dump_stack.c:52
       kmsan_report+0x12a/0x180 mm/kmsan/kmsan.c:1007
       kmsan_check_memory+0xc2/0x140 mm/kmsan/kmsan.c:1086
       copy_to_user ./arch/x86/include/asm/uaccess.h:725
       snd_timer_user_read+0x6c4/0xa10 sound/core/timer.c:2004
       do_loop_readv_writev fs/read_write.c:716
       __do_readv_writev+0x94c/0x1380 fs/read_write.c:864
       do_readv_writev fs/read_write.c:894
       vfs_readv fs/read_write.c:908
       do_readv+0x52a/0x5d0 fs/read_write.c:934
       SYSC_readv+0xb6/0xd0 fs/read_write.c:1021
       SyS_readv+0x87/0xb0 fs/read_write.c:1018
    
    This patch adds the missing reset of queue indices.  Together with the
    previous fix for the ioctl/read race, we cover the whole problem.
    
    Reported-by: Alexander Potapenko <glider@google.com>
    Tested-by: Alexander Potapenko <glider@google.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e3648dc366b1469972f02e023e38bf70f143dc0a
Author: Vladis Dronov <vdronov@redhat.com>
Date:   Fri Jun 2 07:42:09 2017 +0200

    drm/vmwgfx: limit the number of mip levels in vmw_gb_surface_define_ioctl()
    
    commit ee9c4e681ec4f58e42a83cb0c22a0289ade1aacf upstream.
    
    The 'req->mip_levels' parameter in vmw_gb_surface_define_ioctl() is
    a user-controlled 'uint32_t' value which is used as a loop count limit.
    This can lead to a kernel lockup and DoS. Add check for 'req->mip_levels'.
    
    References:
    https://bugzilla.redhat.com/show_bug.cgi?id=1437431
    
    Signed-off-by: Vladis Dronov <vdronov@redhat.com>
    Reviewed-by: Sinclair Yeh <syeh@vmware.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 414cc1c01ca07a5f19b6772a64dd5738b476e1b8
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Thu Apr 27 12:12:08 2017 +0300

    drm/vmwgfx: Handle vmalloc() failure in vmw_local_fifo_reserve()
    
    commit f0c62e9878024300319ba2438adc7b06c6b9c448 upstream.
    
    If vmalloc() fails then we need to a bit of cleanup before returning.
    
    Fixes: fb1d9738ca05 ("drm/vmwgfx: Add DRM driver for VMware Virtual GPU")
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Reviewed-by: Sinclair Yeh <syeh@vmware.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 389dafda97bad367dc8851de129f5f44827a1f3e
Author: Jin Yao <yao.jin@linux.intel.com>
Date:   Thu May 25 18:09:07 2017 +0800

    perf/core: Drop kernel samples even though :u is specified
    
    commit cc1582c231ea041fbc68861dfaf957eaf902b829 upstream.
    
    When doing sampling, for example:
    
      perf record -e cycles:u ...
    
    On workloads that do a lot of kernel entry/exits we see kernel
    samples, even though :u is specified. This is due to skid existing.
    
    This might be a security issue because it can leak kernel addresses even
    though kernel sampling support is disabled.
    
    The patch drops the kernel samples if exclude_kernel is specified.
    
    For example, test on Haswell desktop:
    
      perf record -e cycles:u <mgen>
      perf report --stdio
    
    Before patch applied:
    
        99.77%  mgen     mgen              [.] buf_read
         0.20%  mgen     mgen              [.] rand_buf_init
         0.01%  mgen     [kernel.vmlinux]  [k] apic_timer_interrupt
         0.00%  mgen     mgen              [.] last_free_elem
         0.00%  mgen     libc-2.23.so      [.] __random_r
         0.00%  mgen     libc-2.23.so      [.] _int_malloc
         0.00%  mgen     mgen              [.] rand_array_init
         0.00%  mgen     [kernel.vmlinux]  [k] page_fault
         0.00%  mgen     libc-2.23.so      [.] __random
         0.00%  mgen     libc-2.23.so      [.] __strcasestr
         0.00%  mgen     ld-2.23.so        [.] strcmp
         0.00%  mgen     ld-2.23.so        [.] _dl_start
         0.00%  mgen     libc-2.23.so      [.] sched_setaffinity@@GLIBC_2.3.4
         0.00%  mgen     ld-2.23.so        [.] _start
    
    We can see kernel symbols apic_timer_interrupt and page_fault.
    
    After patch applied:
    
        99.79%  mgen     mgen           [.] buf_read
         0.19%  mgen     mgen           [.] rand_buf_init
         0.00%  mgen     libc-2.23.so   [.] __random_r
         0.00%  mgen     mgen           [.] rand_array_init
         0.00%  mgen     mgen           [.] last_free_elem
         0.00%  mgen     libc-2.23.so   [.] vfprintf
         0.00%  mgen     libc-2.23.so   [.] rand
         0.00%  mgen     libc-2.23.so   [.] __random
         0.00%  mgen     libc-2.23.so   [.] _int_malloc
         0.00%  mgen     libc-2.23.so   [.] _IO_doallocbuf
         0.00%  mgen     ld-2.23.so     [.] do_lookup_x
         0.00%  mgen     ld-2.23.so     [.] open_verify.constprop.7
         0.00%  mgen     ld-2.23.so     [.] _dl_important_hwcaps
         0.00%  mgen     libc-2.23.so   [.] sched_setaffinity@@GLIBC_2.3.4
         0.00%  mgen     ld-2.23.so     [.] _start
    
    There are only userspace symbols.
    
    Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
    Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
    Cc: Jiri Olsa <jolsa@redhat.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Namhyung Kim <namhyung@kernel.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Stephane Eranian <eranian@google.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Vince Weaver <vincent.weaver@maine.edu>
    Cc: acme@kernel.org
    Cc: jolsa@kernel.org
    Cc: kan.liang@intel.com
    Cc: mark.rutland@arm.com
    Cc: will.deacon@arm.com
    Cc: yao.jin@intel.com
    Link: http://lkml.kernel.org/r/1495706947-3744-1-git-send-email-yao.jin@linux.intel.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 138bb14846a5856747694ae9ef565c9eb4533a1e
Author: Michael Ellerman <mpe@ellerman.id.au>
Date:   Tue Jun 6 20:23:57 2017 +1000

    powerpc/numa: Fix percpu allocations to be NUMA aware
    
    commit ba4a648f12f4cd0a8003dd229b6ca8a53348ee4b upstream.
    
    In commit 8c272261194d ("powerpc/numa: Enable USE_PERCPU_NUMA_NODE_ID"), we
    switched to the generic implementation of cpu_to_node(), which uses a percpu
    variable to hold the NUMA node for each CPU.
    
    Unfortunately we neglected to notice that we use cpu_to_node() in the allocation
    of our percpu areas, leading to a chicken and egg problem. In practice what
    happens is when we are setting up the percpu areas, cpu_to_node() reports that
    all CPUs are on node 0, so we allocate all percpu areas on node 0.
    
    This is visible in the dmesg output, as all pcpu allocs being in group 0:
    
      pcpu-alloc: [0] 00 01 02 03 [0] 04 05 06 07
      pcpu-alloc: [0] 08 09 10 11 [0] 12 13 14 15
      pcpu-alloc: [0] 16 17 18 19 [0] 20 21 22 23
      pcpu-alloc: [0] 24 25 26 27 [0] 28 29 30 31
      pcpu-alloc: [0] 32 33 34 35 [0] 36 37 38 39
      pcpu-alloc: [0] 40 41 42 43 [0] 44 45 46 47
    
    To fix it we need an early_cpu_to_node() which can run prior to percpu being
    setup. We already have the numa_cpu_lookup_table we can use, so just plumb it
    in. With the patch dmesg output shows two groups, 0 and 1:
    
      pcpu-alloc: [0] 00 01 02 03 [0] 04 05 06 07
      pcpu-alloc: [0] 08 09 10 11 [0] 12 13 14 15
      pcpu-alloc: [0] 16 17 18 19 [0] 20 21 22 23
      pcpu-alloc: [1] 24 25 26 27 [1] 28 29 30 31
      pcpu-alloc: [1] 32 33 34 35 [1] 36 37 38 39
      pcpu-alloc: [1] 40 41 42 43 [1] 44 45 46 47
    
    We can also check the data_offset in the paca of various CPUs, with the fix we
    see:
    
      CPU 0:  data_offset = 0x0ffe8b0000
      CPU 24: data_offset = 0x1ffe5b0000
    
    And we can see from dmesg that CPU 24 has an allocation on node 1:
    
      node   0: [mem 0x0000000000000000-0x0000000fffffffff]
      node   1: [mem 0x0000001000000000-0x0000001fffffffff]
    
    Fixes: 8c272261194d ("powerpc/numa: Enable USE_PERCPU_NUMA_NODE_ID")
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Reviewed-by: Nicholas Piggin <npiggin@gmail.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 82ee8ae3ca2e0888ba1812a5e350a24676cb5fe0
Author: Russell Currey <ruscur@russell.cc>
Date:   Wed Apr 19 17:39:26 2017 +1000

    powerpc/eeh: Avoid use after free in eeh_handle_special_event()
    
    commit daeba2956f32f91f3493788ff6ee02fb1b2f02fa upstream.
    
    eeh_handle_special_event() is called when an EEH event is detected but
    can't be narrowed down to a specific PE.  This function looks through
    every PE to find one in an erroneous state, then calls the regular event
    handler eeh_handle_normal_event() once it knows which PE has an error.
    
    However, if eeh_handle_normal_event() found that the PE cannot possibly
    be recovered, it will free it, rendering the passed PE stale.
    This leads to a use after free in eeh_handle_special_event() as it attempts to
    clear the "recovering" state on the PE after eeh_handle_normal_event() returns.
    
    Thus, make sure the PE is valid when attempting to clear state in
    eeh_handle_special_event().
    
    Fixes: 8a6b1bc70dbb ("powerpc/eeh: EEH core to handle special event")
    Reported-by: Alexey Kardashevskiy <aik@ozlabs.ru>
    Signed-off-by: Russell Currey <ruscur@russell.cc>
    Reviewed-by: Gavin Shan <gwshan@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1c59546e786a7c0d46e27be6eda05a3731a59951
Author: Johannes Thumshirn <jthumshirn@suse.de>
Date:   Tue May 23 16:50:47 2017 +0200

    scsi: qla2xxx: don't disable a not previously enabled PCI device
    
    commit ddff7ed45edce4a4c92949d3c61cd25d229c4a14 upstream.
    
    When pci_enable_device() or pci_enable_device_mem() fail in
    qla2x00_probe_one() we bail out but do a call to
    pci_disable_device(). This causes the dev_WARN_ON() in
    pci_disable_device() to trigger, as the device wasn't enabled
    previously.
    
    So instead of taking the 'probe_out' error path we can directly return
    *iff* one of the pci_enable_device() calls fails.
    
    Additionally rename the 'probe_out' goto label's name to the more
    descriptive 'disable_device'.
    
    Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
    Fixes: e315cd28b9ef ("[SCSI] qla2xxx: Code changes for qla data structure refactoring")
    Reviewed-by: Bart Van Assche <bart.vanassche@sandisk.com>
    Reviewed-by: Giridhar Malavali <giridhar.malavali@cavium.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 167d652e194eb628f132055b01b40e80e7802060
Author: Jeff Mahoney <jeffm@suse.com>
Date:   Wed May 17 09:49:37 2017 -0400

    btrfs: fix memory leak in update_space_info failure path
    
    commit 896533a7da929136d0432713f02a3edffece2826 upstream.
    
    If we fail to add the space_info kobject, we'll leak the memory
    for the percpu counter.
    
    Fixes: 6ab0a2029c (btrfs: publish allocation data in sysfs)
    Signed-off-by: Jeff Mahoney <jeffm@suse.com>
    Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0ff6be8f9e7b575547a852f9c77dc6f7dd138c2e
Author: David Sterba <dsterba@suse.com>
Date:   Fri May 12 01:03:52 2017 +0200

    btrfs: use correct types for page indices in btrfs_page_exists_in_range
    
    commit cc2b702c52094b637a351d7491ac5200331d0445 upstream.
    
    Variables start_idx and end_idx are supposed to hold a page index
    derived from the file offsets. The int type is not the right one though,
    offsets larger than 1 << 44 will get silently trimmed off the high bits.
    (1 << 44 is 16TiB)
    
    What can go wrong, if start is below the boundary and end gets trimmed:
    - if there's a page after start, we'll find it (radix_tree_gang_lookup_slot)
    - the final check "if (page->index <= end_idx)" will unexpectedly fail
    
    The function will return false, ie. "there's no page in the range",
    although there is at least one.
    
    btrfs_page_exists_in_range is used to prevent races in:
    
    * in hole punching, where we make sure there are not pages in the
      truncated range, otherwise we'll wait for them to finish and redo
      truncation, but we're going to replace the pages with holes anyway so
      the only problem is the intermediate state
    
    * lock_extent_direct: we want to make sure there are no pages before we
      lock and start DIO, to prevent stale data reads
    
    For practical occurence of the bug, there are several constaints.  The
    file must be quite large, the affected range must cross the 16TiB
    boundary and the internal state of the file pages and pending operations
    must match.  Also, we must not have started any ordered data in the
    range, otherwise we don't even reach the buggy function check.
    
    DIO locking tries hard in several places to avoid deadlocks with
    buffered IO and avoids waiting for ranges. The worst consequence seems
    to be stale data read.
    
    CC: Liu Bo <bo.li.liu@oracle.com>
    Fixes: fc4adbff823f7 ("btrfs: Drop EXTENT_UPTODATE check in hole punching and direct locking")
    Reviewed-by: Liu Bo <bo.li.liu@oracle.com>
    Signed-off-by: David Sterba <dsterba@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 74d7dce0243947af84f1c0b70afb709b02f922ad
Author: Daniel Micay <danielmicay@gmail.com>
Date:   Thu May 4 09:32:09 2017 -0400

    stackprotector: Increase the per-task stack canary's random range from 32 bits to 64 bits on 64-bit platforms
    
    commit 5ea30e4e58040cfd6434c2f33dc3ea76e2c15b05 upstream.
    
    The stack canary is an 'unsigned long' and should be fully initialized to
    random data rather than only 32 bits of random data.
    
    Signed-off-by: Daniel Micay <danielmicay@gmail.com>
    Acked-by: Arjan van de Ven <arjan@linux.intel.com>
    Acked-by: Rik van Riel <riel@redhat.com>
    Acked-by: Kees Cook <keescook@chromium.org>
    Cc: Arjan van Ven <arjan@linux.intel.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: kernel-hardening@lists.openwall.com
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/20170504133209.3053-1-danielmicay@gmail.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 804b19cabfb6637c048d4bb53433f5ebaa30482d
Author: Eric Biggers <ebiggers3@gmail.com>
Date:   Wed May 4 21:08:39 2016 -0400

    random: properly align get_random_int_hash
    
    commit b1132deac01c2332d234fa821a70022796b79182 upstream.
    
    get_random_long() reads from the get_random_int_hash array using an
    unsigned long pointer.  For this code to be guaranteed correct on all
    architectures, the array must be aligned to an unsigned long boundary.
    
    Signed-off-by: Eric Biggers <ebiggers3@gmail.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f7533e654b909e728675e23da581f40c98a4c9e0
Author: Daniel Cashman <dcashman@android.com>
Date:   Fri Feb 26 15:19:34 2016 -0800

    drivers: char: random: add get_random_long()
    
    commit ec9ee4acd97c0039a61c0ae4f12705767ae62153 upstream.
    
    Commit d07e22597d1d ("mm: mmap: add new /proc tunable for mmap_base
    ASLR") added the ability to choose from a range of values to use for
    entropy count in generating the random offset to the mmap_base address.
    
    The maximum value on this range was set to 32 bits for 64-bit x86
    systems, but this value could be increased further, requiring more than
    the 32 bits of randomness provided by get_random_int(), as is already
    possible for arm64.  Add a new function: get_random_long() which more
    naturally fits with the mmap usage of get_random_int() but operates
    exactly the same as get_random_int().
    
    Also, fix the shifting constant in mmap_rnd() to be an unsigned long so
    that values greater than 31 bits generate an appropriate mask without
    overflow.  This is especially important on x86, as its shift instruction
    uses a 5-bit mask for the shift operand, which meant that any value for
    mmap_rnd_bits over 31 acts as a no-op and effectively disables mmap_base
    randomization.
    
    Finally, replace calls to get_random_int() with get_random_long() where
    appropriate.
    
    This patch (of 2):
    
    Add get_random_long().
    
    Signed-off-by: Daniel Cashman <dcashman@android.com>
    Acked-by: Kees Cook <keescook@chromium.org>
    Cc: "Theodore Ts'o" <tytso@mit.edu>
    Cc: Arnd Bergmann <arnd@arndb.de>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
    Cc: Paul Mackerras <paulus@samba.org>
    Cc: Michael Ellerman <mpe@ellerman.id.au>
    Cc: David S. Miller <davem@davemloft.net>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Ingo Molnar <mingo@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: Nick Kralevich <nnk@google.com>
    Cc: Jeff Vander Stoep <jeffv@google.com>
    Cc: Mark Salyzyn <salyzyn@android.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 74eab0e85f670debb1427b009b8dd6c6c308fc25
Author: Matt Ranostay <matt.ranostay@konsulko.com>
Date:   Thu Apr 27 00:52:32 2017 -0700

    iio: proximity: as3935: fix AS3935_INT mask
    
    commit 275292d3a3d62670b1b13484707b74e5239b4bb0 upstream.
    
    AS3935 interrupt mask has been incorrect so valid lightning events
    would never trigger an buffer event. Also noise interrupt should be
    BIT(0).
    
    Fixes: 24ddb0e4bba4 ("iio: Add AS3935 lightning sensor support")
    Signed-off-by: Matt Ranostay <matt.ranostay@konsulko.com>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1bd1abfad7a72826ed56e75385b87f3518eb2351
Author: Oleg Drokin <green@linuxhacker.ru>
Date:   Fri May 26 23:40:33 2017 -0400

    staging/lustre/lov: remove set_fs() call from lov_getstripe()
    
    commit 0a33252e060e97ed3fbdcec9517672f1e91aaef3 upstream.
    
    lov_getstripe() calls set_fs(KERNEL_DS) so that it can handle a struct
    lov_user_md pointer from user- or kernel-space.  This changes the
    behavior of copy_from_user() on SPARC and may result in a misaligned
    access exception which in turn oopses the kernel.  In fact the
    relevant argument to lov_getstripe() is never called with a
    kernel-space pointer and so changing the address limits is unnecessary
    and so we remove the calls to save, set, and restore the address
    limits.
    
    Signed-off-by: John L. Hammond <john.hammond@intel.com>
    Reviewed-on: http://review.whamcloud.com/6150
    Intel-bug-id: https://jira.hpdd.intel.com/browse/LU-3221
    Reviewed-by: Andreas Dilger <andreas.dilger@intel.com>
    Reviewed-by: Li Wei <wei.g.li@intel.com>
    Signed-off-by: Oleg Drokin <green@linuxhacker.ru>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0d335f5b5194d931d52fd3b9633375c5aa183316
Author: Michael Thalmeier <michael.thalmeier@hale.at>
Date:   Thu May 18 16:14:14 2017 +0200

    usb: chipidea: debug: check before accessing ci_role
    
    commit 0340ff83cd4475261e7474033a381bc125b45244 upstream.
    
    ci_role BUGs when the role is >= CI_ROLE_END.
    
    Signed-off-by: Michael Thalmeier <michael.thalmeier@hale.at>
    Signed-off-by: Peter Chen <peter.chen@nxp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 900b4568b39c7d93604ab6ebdca95f520eb71da7
Author: Jisheng Zhang <jszhang@marvell.com>
Date:   Mon Apr 24 12:35:51 2017 +0000

    usb: chipidea: udc: fix NULL pointer dereference if udc_start failed
    
    commit aa1f058d7d9244423b8c5a75b9484b1115df7f02 upstream.
    
    Fix below NULL pointer dereference. we set ci->roles[CI_ROLE_GADGET]
    too early in ci_hdrc_gadget_init(), if udc_start() fails due to some
    reason, the ci->roles[CI_ROLE_GADGET] check in  ci_hdrc_gadget_destroy
    can't protect us.
    
    We fix this issue by only setting ci->roles[CI_ROLE_GADGET] if
    udc_start() succeed.
    
    [    1.398550] Unable to handle kernel NULL pointer dereference at
    virtual address 00000000
    ...
    [    1.448600] PC is at dma_pool_free+0xb8/0xf0
    [    1.453012] LR is at dma_pool_free+0x28/0xf0
    [    2.113369] [<ffffff80081817d8>] dma_pool_free+0xb8/0xf0
    [    2.118857] [<ffffff800841209c>] destroy_eps+0x4c/0x68
    [    2.124165] [<ffffff8008413770>] ci_hdrc_gadget_destroy+0x28/0x50
    [    2.130461] [<ffffff800840fa30>] ci_hdrc_probe+0x588/0x7e8
    [    2.136129] [<ffffff8008380fb8>] platform_drv_probe+0x50/0xb8
    [    2.142066] [<ffffff800837f494>] driver_probe_device+0x1fc/0x2a8
    [    2.148270] [<ffffff800837f68c>] __device_attach_driver+0x9c/0xf8
    [    2.154563] [<ffffff800837d570>] bus_for_each_drv+0x58/0x98
    [    2.160317] [<ffffff800837f174>] __device_attach+0xc4/0x138
    [    2.166072] [<ffffff800837f738>] device_initial_probe+0x10/0x18
    [    2.172185] [<ffffff800837e58c>] bus_probe_device+0x94/0xa0
    [    2.177940] [<ffffff800837c560>] device_add+0x3f0/0x560
    [    2.183337] [<ffffff8008380d20>] platform_device_add+0x180/0x240
    [    2.189541] [<ffffff800840f0e8>] ci_hdrc_add_device+0x440/0x4f8
    [    2.195654] [<ffffff8008414194>] ci_hdrc_usb2_probe+0x13c/0x2d8
    [    2.201769] [<ffffff8008380fb8>] platform_drv_probe+0x50/0xb8
    [    2.207705] [<ffffff800837f494>] driver_probe_device+0x1fc/0x2a8
    [    2.213910] [<ffffff800837f5ec>] __driver_attach+0xac/0xb0
    [    2.219575] [<ffffff800837d4b0>] bus_for_each_dev+0x60/0xa0
    [    2.225329] [<ffffff800837ec80>] driver_attach+0x20/0x28
    [    2.230816] [<ffffff800837e880>] bus_add_driver+0x1d0/0x238
    [    2.236571] [<ffffff800837fdb0>] driver_register+0x60/0xf8
    [    2.242237] [<ffffff8008380ef4>] __platform_driver_register+0x44/0x50
    [    2.248891] [<ffffff80086fd440>] ci_hdrc_usb2_driver_init+0x18/0x20
    [    2.255365] [<ffffff8008082950>] do_one_initcall+0x38/0x128
    [    2.261121] [<ffffff80086e0d00>] kernel_init_freeable+0x1ac/0x250
    [    2.267414] [<ffffff800852f0b8>] kernel_init+0x10/0x100
    [    2.272810] [<ffffff8008082680>] ret_from_fork+0x10/0x50
    
    Fixes: 3f124d233e97 ("usb: chipidea: add role init and destroy APIs")
    Signed-off-by: Jisheng Zhang <jszhang@marvell.com>
    Signed-off-by: Peter Chen <peter.chen@nxp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 52d2cabeb614c5abe1dec45de2d4c9aa3a7cf6a1
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Thu May 11 17:26:48 2017 -0700

    usb: gadget: f_mass_storage: Serialize wake and sleep execution
    
    commit dc9217b69dd6089dcfeb86ed4b3c671504326087 upstream.
    
    f_mass_storage has a memorry barrier issue with the sleep and wake
    functions that can cause a deadlock. This results in intermittent hangs
    during MSC file transfer. The host will reset the device after receiving
    no response to resume the transfer. This issue is seen when dwc3 is
    processing 2 transfer-in-progress events at the same time, invoking
    completion handlers for CSW and CBW. Also this issue occurs depending on
    the system timing and latency.
    
    To increase the chance to hit this issue, you can force dwc3 driver to
    wait and process those 2 events at once by adding a small delay (~100us)
    in dwc3_check_event_buf() whenever the request is for CSW and read the
    event count again. Avoid debugging with printk and ftrace as extra
    delays and memory barrier will mask this issue.
    
    Scenario which can lead to failure:
    -----------------------------------
    1) The main thread sleeps and waits for the next command in
       get_next_command().
    2) bulk_in_complete() wakes up main thread for CSW.
    3) bulk_out_complete() tries to wake up the running main thread for CBW.
    4) thread_wakeup_needed is not loaded with correct value in
       sleep_thread().
    5) Main thread goes to sleep again.
    
    The pattern is shown below. Note the 2 critical variables.
     * common->thread_wakeup_needed
     * bh->state
    
            CPU 0 (sleep_thread)            CPU 1 (wakeup_thread)
            ==============================  ===============================
    
                                            bh->state = BH_STATE_FULL;
                                            smp_wmb();
            thread_wakeup_needed = 0;       thread_wakeup_needed = 1;
            smp_rmb();
            if (bh->state != BH_STATE_FULL)
                    sleep again ...
    
    As pointed out by Alan Stern, this is an R-pattern issue. The issue can
    be seen when there are two wakeups in quick succession. The
    thread_wakeup_needed can be overwritten in sleep_thread, and the read of
    the bh->state maybe reordered before the write to thread_wakeup_needed.
    
    This patch applies full memory barrier smp_mb() in both sleep_thread()
    and wakeup_thread() to ensure the order which the thread_wakeup_needed
    and bh->state are written and loaded.
    
    However, a better solution in the future would be to use wait_queue
    method that takes care of managing memory barrier between waker and
    waiter.
    
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 99362b9cf1fc5a179c3a975b32f98b0453e56815
Author: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Date:   Sun May 21 22:36:23 2017 -0400

    ext4: keep existing extra fields when inode expands
    
    commit 887a9730614727c4fff7cb756711b190593fc1df upstream.
    
    ext4_expand_extra_isize() should clear only space between old and new
    size.
    
    Fixes: 6dd4ee7cab7e # v2.6.23
    Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 07e47097fb7ddf31ecff18e435d3ac3d996cf60d
Author: Jan Kara <jack@suse.cz>
Date:   Sun May 21 22:33:23 2017 -0400

    ext4: fix SEEK_HOLE
    
    commit 7d95eddf313c88b24f99d4ca9c2411a4b82fef33 upstream.
    
    Currently, SEEK_HOLE implementation in ext4 may both return that there's
    a hole at some offset although that offset already has data and skip
    some holes during a search for the next hole. The first problem is
    demostrated by:
    
    xfs_io -c "falloc 0 256k" -c "pwrite 0 56k" -c "seek -h 0" file
    wrote 57344/57344 bytes at offset 0
    56 KiB, 14 ops; 0.0000 sec (2.054 GiB/sec and 538461.5385 ops/sec)
    Whence  Result
    HOLE    0
    
    Where we can see that SEEK_HOLE wrongly returned offset 0 as containing
    a hole although we have written data there. The second problem can be
    demonstrated by:
    
    xfs_io -c "falloc 0 256k" -c "pwrite 0 56k" -c "pwrite 128k 8k"
           -c "seek -h 0" file
    
    wrote 57344/57344 bytes at offset 0
    56 KiB, 14 ops; 0.0000 sec (1.978 GiB/sec and 518518.5185 ops/sec)
    wrote 8192/8192 bytes at offset 131072
    8 KiB, 2 ops; 0.0000 sec (2 GiB/sec and 500000.0000 ops/sec)
    Whence  Result
    HOLE    139264
    
    Where we can see that hole at offsets 56k..128k has been ignored by the
    SEEK_HOLE call.
    
    The underlying problem is in the ext4_find_unwritten_pgoff() which is
    just buggy. In some cases it fails to update returned offset when it
    finds a hole (when no pages are found or when the first found page has
    higher index than expected), in some cases conditions for detecting hole
    are just missing (we fail to detect a situation where indices of
    returned pages are not contiguous).
    
    Fix ext4_find_unwritten_pgoff() to properly detect non-contiguous page
    indices and also handle all cases where we got less pages then expected
    in one place and handle it properly there.
    
    Fixes: c8c0df241cc2719b1262e627f999638411934f60
    CC: Zheng Liu <wenqing.lz@taobao.com>
    Signed-off-by: Jan Kara <jack@suse.cz>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b6c8d5688bd6f0850cb7cb768fc29b889588880f
Author: Alexander Sverdlin <alexander.sverdlin@gmail.com>
Date:   Mon May 22 16:05:22 2017 +0200

    dmaengine: ep93xx: Always start from BASE0
    
    commit 0037ae47812b1f431cc602100d1d51f37d77b61e upstream.
    
    The current buffer is being reset to zero on device_free_chan_resources()
    but not on device_terminate_all(). It could happen that HW is restarted and
    expects BASE0 to be used, but the driver is not synchronized and will start
    from BASE1. One solution is to reset the buffer explicitly in
    m2p_hw_setup().
    
    Signed-off-by: Alexander Sverdlin <alexander.sverdlin@gmail.com>
    Signed-off-by: Vinod Koul <vinod.koul@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 84b4744447629e3ac4d63582a1b196e49a1d1854
Author: Marc Zyngier <marc.zyngier@arm.com>
Date:   Tue Jun 6 19:08:35 2017 +0100

    arm: KVM: Allow unaligned accesses at HYP
    
    commit 33b5c38852b29736f3b472dd095c9a18ec22746f upstream.
    
    We currently have the HSCTLR.A bit set, trapping unaligned accesses
    at HYP, but we're not really prepared to deal with it.
    
    Since the rest of the kernel is pretty happy about that, let's follow
    its example and set HSCTLR.A to zero. Modern CPUs don't really care.
    
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Christoffer Dall <cdall@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9cdc5d2e13226b733563a67a028224523902cfa3
Author: Wanpeng Li <wanpeng.li@hotmail.com>
Date:   Thu Jun 8 01:22:07 2017 -0700

    KVM: cpuid: Fix read/write out-of-bounds vulnerability in cpuid emulation
    
    commit a3641631d14571242eec0d30c9faa786cbf52d44 upstream.
    
    If "i" is the last element in the vcpu->arch.cpuid_entries[] array, it
    potentially can be exploited the vulnerability. this will out-of-bounds
    read and write.  Luckily, the effect is small:
    
            /* when no next entry is found, the current entry[i] is reselected */
            for (j = i + 1; ; j = (j + 1) % nent) {
                    struct kvm_cpuid_entry2 *ej = &vcpu->arch.cpuid_entries[j];
                    if (ej->function == e->function) {
    
    It reads ej->maxphyaddr, which is user controlled.  However...
    
                            ej->flags |= KVM_CPUID_FLAG_STATE_READ_NEXT;
    
    After cpuid_entries there is
    
            int maxphyaddr;
            struct x86_emulate_ctxt emulate_ctxt;  /* 16-byte aligned */
    
    So we have:
    
    - cpuid_entries at offset 1B50 (6992)
    - maxphyaddr at offset 27D0 (6992 + 3200 = 10192)
    - padding at 27D4...27DF
    - emulate_ctxt at 27E0
    
    And it writes in the padding.  Pfew, writing the ops field of emulate_ctxt
    would have been much worse.
    
    This patch fixes it by modding the index to avoid the out-of-bounds
    access. Worst case, i == j and ej->function == e->function,
    the loop can bail out.
    
    Reported-by: Moguofang <moguofang@huawei.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Guofang Mo <moguofang@huawei.com>
    Signed-off-by: Wanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1173e90e46e4421c6b8d74d9d0fc6ac0f00a68f8
Author: Paolo Bonzini <pbonzini@redhat.com>
Date:   Wed Apr 26 16:56:26 2017 +0200

    kvm: async_pf: fix rcu_irq_enter() with irqs enabled
    
    commit bbaf0e2b1c1b4f88abd6ef49576f0efb1734eae5 upstream.
    
    native_safe_halt enables interrupts, and you just shouldn't
    call rcu_irq_enter() with interrupts enabled.  Reorder the
    call with the following local_irq_disable() to respect the
    invariant.
    
    Reported-by: Ross Zwisler <ross.zwisler@linux.intel.com>
    Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
    Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
    Tested-by: Wanpeng Li <wanpeng.li@hotmail.com>
    Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b324fbe2dc79856152a5403547d8fbbb16b23076
Author: J. Bruce Fields <bfields@redhat.com>
Date:   Tue May 23 12:24:40 2017 -0400

    nfsd4: fix null dereference on replay
    
    commit 9a307403d374b993061f5992a6e260c944920d0b upstream.
    
    if we receive a compound such that:
    
            - the sessionid, slot, and sequence number in the SEQUENCE op
              match a cached succesful reply with N ops, and
            - the Nth operation of the compound is a PUTFH, PUTPUBFH,
              PUTROOTFH, or RESTOREFH,
    
    then nfsd4_sequence will return 0 and set cstate->status to
    nfserr_replay_cache.  The current filehandle will not be set.  This will
    cause us to call check_nfsd_access with first argument NULL.
    
    To nfsd4_compound it looks like we just succesfully executed an
    operation that set a filehandle, but the current filehandle is not set.
    
    Fix this by moving the nfserr_replay_cache earlier.  There was never any
    reason to have it after the encode_op label, since the only case where
    he hit that is when opdesc->op_func sets it.
    
    Note that there are two ways we could hit this case:
    
            - a client is resending a previously sent compound that ended
              with one of the four PUTFH-like operations, or
            - a client is sending a *new* compound that (incorrectly) shares
              sessionid, slot, and sequence number with a previously sent
              compound, and the length of the previously sent compound
              happens to match the position of a PUTFH-like operation in the
              new compound.
    
    The second is obviously incorrect client behavior.  The first is also
    very strange--the only purpose of a PUTFH-like operation is to set the
    current filehandle to be used by the following operation, so there's no
    point in having it as the last in a compound.
    
    So it's likely this requires a buggy or malicious client to reproduce.
    
    Reported-by: Scott Mayhew <smayhew@redhat.com>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0640eeea056edb63ce212fa35545ac0f7e409e9c
Author: Gilad Ben-Yossef <gilad@benyossef.com>
Date:   Thu May 18 16:29:25 2017 +0300

    crypto: gcm - wait for crypto op not signal safe
    
    commit f3ad587070d6bd961ab942b3fd7a85d00dfc934b upstream.
    
    crypto_gcm_setkey() was using wait_for_completion_interruptible() to
    wait for completion of async crypto op but if a signal occurs it
    may return before DMA ops of HW crypto provider finish, thus
    corrupting the data buffer that is kfree'ed in this case.
    
    Resolve this by using wait_for_completion() instead.
    
    Reported-by: Eric Biggers <ebiggers3@gmail.com>
    Signed-off-by: Gilad Ben-Yossef <gilad@benyossef.com>
    Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 45771cd795ec2feed01917cb25c0bb141d9c748b
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Jun 8 14:48:47 2017 +0100

    KEYS: fix freeing uninitialized memory in key_update()
    
    commit 63a0b0509e700717a59f049ec6e4e04e903c7fe2 upstream.
    
    key_update() freed the key_preparsed_payload even if it was not
    initialized first.  This would cause a crash if userspace called
    keyctl_update() on a key with type like "asymmetric" that has a
    ->preparse() method but not an ->update() method.  Possibly it could
    even be triggered for other key types by racing with keyctl_setperm() to
    make the KEY_NEED_WRITE check fail (the permission was already checked,
    so normally it wouldn't fail there).
    
    Reproducer with key type "asymmetric", given a valid cert.der:
    
    keyctl new_session
    keyid=$(keyctl padd asymmetric desc @s < cert.der)
    keyctl setperm $keyid 0x3f000000
    keyctl update $keyid data
    
    [  150.686666] BUG: unable to handle kernel NULL pointer dereference at 0000000000000001
    [  150.687601] IP: asymmetric_key_free_kids+0x12/0x30
    [  150.688139] PGD 38a3d067
    [  150.688141] PUD 3b3de067
    [  150.688447] PMD 0
    [  150.688745]
    [  150.689160] Oops: 0000 [#1] SMP
    [  150.689455] Modules linked in:
    [  150.689769] CPU: 1 PID: 2478 Comm: keyctl Not tainted 4.11.0-rc4-xfstests-00187-ga9f6b6b8cd2f #742
    [  150.690916] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.10.2-20170228_101828-anatol 04/01/2014
    [  150.692199] task: ffff88003b30c480 task.stack: ffffc90000350000
    [  150.692952] RIP: 0010:asymmetric_key_free_kids+0x12/0x30
    [  150.693556] RSP: 0018:ffffc90000353e58 EFLAGS: 00010202
    [  150.694142] RAX: 0000000000000000 RBX: 0000000000000001 RCX: 0000000000000004
    [  150.694845] RDX: ffffffff81ee3920 RSI: ffff88003d4b0700 RDI: 0000000000000001
    [  150.697569] RBP: ffffc90000353e60 R08: ffff88003d5d2140 R09: 0000000000000000
    [  150.702483] R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000001
    [  150.707393] R13: 0000000000000004 R14: ffff880038a4d2d8 R15: 000000000040411f
    [  150.709720] FS:  00007fcbcee35700(0000) GS:ffff88003fd00000(0000) knlGS:0000000000000000
    [  150.711504] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [  150.712733] CR2: 0000000000000001 CR3: 0000000039eab000 CR4: 00000000003406e0
    [  150.714487] Call Trace:
    [  150.714975]  asymmetric_key_free_preparse+0x2f/0x40
    [  150.715907]  key_update+0xf7/0x140
    [  150.716560]  ? key_default_cmp+0x20/0x20
    [  150.717319]  keyctl_update_key+0xb0/0xe0
    [  150.718066]  SyS_keyctl+0x109/0x130
    [  150.718663]  entry_SYSCALL_64_fastpath+0x1f/0xc2
    [  150.719440] RIP: 0033:0x7fcbce75ff19
    [  150.719926] RSP: 002b:00007ffd5d167088 EFLAGS: 00000206 ORIG_RAX: 00000000000000fa
    [  150.720918] RAX: ffffffffffffffda RBX: 0000000000404d80 RCX: 00007fcbce75ff19
    [  150.721874] RDX: 00007ffd5d16785e RSI: 000000002866cd36 RDI: 0000000000000002
    [  150.722827] RBP: 0000000000000006 R08: 000000002866cd36 R09: 00007ffd5d16785e
    [  150.723781] R10: 0000000000000004 R11: 0000000000000206 R12: 0000000000404d80
    [  150.724650] R13: 00007ffd5d16784d R14: 00007ffd5d167238 R15: 000000000040411f
    [  150.725447] Code: 83 c4 08 31 c0 5b 41 5c 41 5d 41 5e 41 5f 5d c3 66 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 48 85 ff 74 23 55 48 89 e5 53 48 89 fb <48> 8b 3f e8 06 21 c5 ff 48 8b 7b 08 e8 fd 20 c5 ff 48 89 df e8
    [  150.727489] RIP: asymmetric_key_free_kids+0x12/0x30 RSP: ffffc90000353e58
    [  150.728117] CR2: 0000000000000001
    [  150.728430] ---[ end trace f7f8fe1da2d5ae8d ]---
    
    Fixes: 4d8c0250b841 ("KEYS: Call ->free_preparse() even after ->preparse() returns an error")
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: James Morris <james.l.morris@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8206e0a25785c58e88a444fed1d4646da60b14a4
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Jun 8 14:48:40 2017 +0100

    KEYS: fix dereferencing NULL payload with nonzero length
    
    commit 5649645d725c73df4302428ee4e02c869248b4c5 upstream.
    
    sys_add_key() and the KEYCTL_UPDATE operation of sys_keyctl() allowed a
    NULL payload with nonzero length to be passed to the key type's
    ->preparse(), ->instantiate(), and/or ->update() methods.  Various key
    types including asymmetric, cifs.idmap, cifs.spnego, and pkcs7_test did
    not handle this case, allowing an unprivileged user to trivially cause a
    NULL pointer dereference (kernel oops) if one of these key types was
    present.  Fix it by doing the copy_from_user() when 'plen' is nonzero
    rather than when '_payload' is non-NULL, causing the syscall to fail
    with EFAULT as expected when an invalid buffer is specified.
    
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: James Morris <james.l.morris@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ff1a321f9acda32dbb47b22638ddcadfc9f7773c
Author: Johan Hovold <johan@kernel.org>
Date:   Wed Apr 26 12:24:21 2017 +0200

    serial: ifx6x60: fix use-after-free on module unload
    
    commit 1e948479b3d63e3ac0ecca13cbf4921c7d17c168 upstream.
    
    Make sure to deregister the SPI driver before releasing the tty driver
    to avoid use-after-free in the SPI remove callback where the tty
    devices are deregistered.
    
    Fixes: 72d4724ea54c ("serial: ifx6x60: Add modem power off function in the platform reboot process")
    Cc: Jun Chen <jun.d.chen@intel.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 665fe924d6c01d300c96f6250a57328f95b55fdf
Author: Max Filippov <jcmvbkbc@gmail.com>
Date:   Mon Jun 5 18:31:16 2017 -0700

    net: ethoc: enable NAPI before poll may be scheduled
    
    
    [ Upstream commit d220b942a4b6a0640aee78841608f4aa5e8e185e ]
    
    ethoc_reset enables device interrupts, ethoc_interrupt may schedule a
    NAPI poll before NAPI is enabled in the ethoc_open, which results in
    device being unable to send or receive anything until it's closed and
    reopened. In case the device is flooded with ingress packets it may be
    unable to recover at all.
    Move napi_enable above ethoc_reset in the ethoc_open to fix that.
    
    Fixes: a1702857724f ("net: Add support for the OpenCores 10/100 Mbps Ethernet MAC.")
    Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
    Reviewed-by: Tobias Klauser <tklauser@distanz.ch>
    Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7c7c21ee8b7ac6699ab9d6b7a260f3c11e31ad28
Author: Eric Dumazet <edumazet@google.com>
Date:   Sat Jun 3 09:29:25 2017 -0700

    net: ping: do not abuse udp_poll()
    
    
    [ Upstream commit 77d4b1d36926a9b8387c6b53eeba42bcaaffcea3 ]
    
    Alexander reported various KASAN messages triggered in recent kernels
    
    The problem is that ping sockets should not use udp_poll() in the first
    place, and recent changes in UDP stack finally exposed this old bug.
    
    Fixes: c319b4d76b9e ("net: ipv4: add IPPROTO_ICMP socket kind")
    Fixes: 6d0bfe226116 ("net: ipv6: Add IPv6 support to the ping socket.")
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Reported-by: Sasha Levin <alexander.levin@verizon.com>
    Cc: Solar Designer <solar@openwall.com>
    Cc: Vasiliy Kulikov <segoon@openwall.com>
    Cc: Lorenzo Colitti <lorenzo@google.com>
    Acked-By: Lorenzo Colitti <lorenzo@google.com>
    Tested-By: Lorenzo Colitti <lorenzo@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 22315daf2f6f19bdfd804450ac35f9ba925d2472
Author: David S. Miller <davem@davemloft.net>
Date:   Sun Jun 4 21:41:10 2017 -0400

    ipv6: Fix leak in ipv6_gso_segment().
    
    
    [ Upstream commit e3e86b5119f81e5e2499bea7ea1ebe8ac6aab789 ]
    
    If ip6_find_1stfragopt() fails and we return an error we have to free
    up 'segs' because nobody else is going to.
    
    Fixes: 2423496af35d ("ipv6: Prevent overrun when parsing v6 header options")
    Reported-by: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bca288c7932253f0f12c8facc65406e1ff43ae8b
Author: Yuchung Cheng <ycheng@google.com>
Date:   Wed May 31 11:21:27 2017 -0700

    tcp: disallow cwnd undo when switching congestion control
    
    
    [ Upstream commit 44abafc4cc094214a99f860f778c48ecb23422fc ]
    
    When the sender switches its congestion control during loss
    recovery, if the recovery is spurious then it may incorrectly
    revert cwnd and ssthresh to the older values set by a previous
    congestion control. Consider a congestion control (like BBR)
    that does not use ssthresh and keeps it infinite: the connection
    may incorrectly revert cwnd to an infinite value when switching
    from BBR to another congestion control.
    
    This patch fixes it by disallowing such cwnd undo operation
    upon switching congestion control.  Note that undo_marker
    is not reset s.t. the packets that were incorrectly marked
    lost would be corrected. We only avoid undoing the cwnd in
    tcp_undo_cwnd_reduction().
    
    Signed-off-by: Yuchung Cheng <ycheng@google.com>
    Signed-off-by: Soheil Hassas Yeganeh <soheil@google.com>
    Signed-off-by: Neal Cardwell <ncardwell@google.com>
    Signed-off-by: Eric Dumazet <edumazet@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8c66bf2f245e32cdcfa8652894732a5a4f2100d9
Author: Ganesh Goudar <ganeshgr@chelsio.com>
Date:   Wed May 31 18:26:28 2017 +0530

    cxgb4: avoid enabling napi twice to the same queue
    
    
    [ Upstream commit e7519f9926f1d0d11c776eb0475eb098c7760f68 ]
    
    Take uld mutex to avoid race between cxgb_up() and
    cxgb4_register_uld() to enable napi for the same uld
    queue.
    
    Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 45039be5f52226bcd268caf924efadd53cdfa5b4
Author: Ben Hutchings <ben@decadent.org.uk>
Date:   Wed May 31 13:15:41 2017 +0100

    ipv6: xfrm: Handle errors reported by xfrm6_find_1stfragopt()
    
    
    [ Upstream commit 6e80ac5cc992ab6256c3dae87f7e57db15e1a58c ]
    
    xfrm6_find_1stfragopt() may now return an error code and we must
    not treat it as a length.
    
    Fixes: 2423496af35d ("ipv6: Prevent overrun when parsing v6 header options")
    Signed-off-by: Ben Hutchings <ben@decadent.org.uk>
    Acked-by: Craig Gallek <kraig@google.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 697d4230cfd6f0b8384fde9e0ffddf74443d871e
Author: Mintz, Yuval <Yuval.Mintz@cavium.com>
Date:   Thu Jun 1 15:57:56 2017 +0300

    bnx2x: Fix Multi-Cos
    
    
    [ Upstream commit 3968d38917eb9bd0cd391265f6c9c538d9b33ffa ]
    
    Apparently multi-cos isn't working for bnx2x quite some time -
    driver implements ndo_select_queue() to allow queue-selection
    for FCoE, but the regular L2 flow would cause it to modulo the
    fallback's result by the number of queues.
    The fallback would return a queue matching the needed tc
    [via __skb_tx_hash()], but since the modulo is by the number of TSS
    queues where number of TCs is not accounted, transmission would always
    be done by a queue configured into using TC0.
    
    Fixes: ada7c19e6d27 ("bnx2x: use XPS if possible for bnx2x_select_queue instead of pure hash")
    Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>