commit b409ba3b053501181d47a35769fe61823da012e9
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Thu May 25 14:50:50 2017 +0200

    Linux 4.4.70

commit 837bfdb41337fc6b82dbde4b2ec3ce923845049f
Author: Julius Werner <jwerner@chromium.org>
Date:   Fri May 12 14:42:58 2017 -0700

    drivers: char: mem: Check for address space wraparound with mmap()
    
    commit b299cde245b0b76c977f4291162cf668e087b408 upstream.
    
    /dev/mem currently allows mmap() mappings that wrap around the end of
    the physical address space, which should probably be illegal. It
    circumvents the existing STRICT_DEVMEM permission check because the loop
    immediately terminates (as the start address is already higher than the
    end address). On the x86_64 architecture it will then cause a panic
    (from the BUG(start >= end) in arch/x86/mm/pat.c:reserve_memtype()).
    
    This patch adds an explicit check to make sure offset + size will not
    wrap around in the physical address type.
    
    Signed-off-by: Julius Werner <jwerner@chromium.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 52cf24769487de7100d824e8c12ecc310de841d7
Author: J. Bruce Fields <bfields@redhat.com>
Date:   Fri May 5 16:17:57 2017 -0400

    nfsd: encoders mustn't use unitialized values in error cases
    
    commit f961e3f2acae94b727380c0b74e2d3954d0edf79 upstream.
    
    In error cases, lgp->lg_layout_type may be out of bounds; so we
    shouldn't be using it until after the check of nfserr.
    
    This was seen to crash nfsd threads when the server receives a LAYOUTGET
    request with a large layout type.
    
    GETDEVICEINFO has the same problem.
    
    Reported-by: Ari Kauppi <Ari.Kauppi@synopsys.com>
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit da922dc48dcf0d4412905c4856a36aa0147699ed
Author: Mario Kleiner <mario.kleiner.de@gmail.com>
Date:   Fri Apr 21 17:05:08 2017 +0200

    drm/edid: Add 10 bpc quirk for LGD 764 panel in HP zBook 17 G2
    
    commit e345da82bd6bdfa8492f80b3ce4370acfd868d95 upstream.
    
    The builtin eDP panel in the HP zBook 17 G2 supports 10 bpc,
    as advertised by the Laptops product specs and verified via
    injecting a fixed edid + photometer measurements, but edid
    reports unknown depth, so drivers fall back to 6 bpc.
    
    Add a quirk to get the full 10 bpc.
    
    Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
    Acked-by: Harry Wentland <harry.wentland@amd.com>
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Link: http://patchwork.freedesktop.org/patch/msgid/1492787108-23959-1-git-send-email-mario.kleiner.de@gmail.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bc428e94070e13ac25b2c7c59a52959af6c904ee
Author: Lukas Wunner <lukas@wunner.de>
Date:   Tue Apr 18 20:44:30 2017 +0200

    PCI: Freeze PME scan before suspending devices
    
    commit ea00353f36b64375518662a8ad15e39218a1f324 upstream.
    
    Laurent Pinchart reported that the Renesas R-Car H2 Lager board (r8a7790)
    crashes during suspend tests.  Geert Uytterhoeven managed to reproduce the
    issue on an M2-W Koelsch board (r8a7791):
    
      It occurs when the PME scan runs, once per second.  During PME scan, the
      PCI host bridge (rcar-pci) registers are accessed while its module clock
      has already been disabled, leading to the crash.
    
    One reproducer is to configure s2ram to use "s2idle" instead of "deep"
    suspend:
    
      # echo 0 > /sys/module/printk/parameters/console_suspend
      # echo s2idle > /sys/power/mem_sleep
      # echo mem > /sys/power/state
    
    Another reproducer is to write either "platform" or "processors" to
    /sys/power/pm_test.  It does not (or is less likely) to happen during full
    system suspend ("core" or "none") because system suspend also disables
    timers, and thus the workqueue handling PME scans no longer runs.  Geert
    believes the issue may still happen in the small window between disabling
    module clocks and disabling timers:
    
      # echo 0 > /sys/module/printk/parameters/console_suspend
      # echo platform > /sys/power/pm_test    # Or "processors"
      # echo mem > /sys/power/state
    
    (Make sure CONFIG_PCI_RCAR_GEN2 and CONFIG_USB_OHCI_HCD_PCI are enabled.)
    
    Rafael Wysocki agrees that PME scans should be suspended before the host
    bridge registers become inaccessible.  To that end, queue the task on a
    workqueue that gets frozen before devices suspend.
    
    Rafael notes however that as a result, some wakeup events may be missed if
    they are delivered via PME from a device without working IRQ (which hence
    must be polled) and occur after the workqueue has been frozen.  If that
    turns out to be an issue in practice, it may be possible to solve it by
    calling pci_pme_list_scan() once directly from one of the host bridge's
    pm_ops callbacks.
    
    Stacktrace for posterity:
    
      PM: Syncing filesystems ... [   38.566237] done.
      PM: Preparing system for sleep (mem)
      Freezing user space processes ... [   38.579813] (elapsed 0.001 seconds) done.
      Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done.
      PM: Suspending system (mem)
      PM: suspend of devices complete after 152.456 msecs
      PM: late suspend of devices complete after 2.809 msecs
      PM: noirq suspend of devices complete after 29.863 msecs
      suspend debug: Waiting for 5 second(s).
      Unhandled fault: asynchronous external abort (0x1211) at 0x00000000
      pgd = c0003000
      [00000000] *pgd=80000040004003, *pmd=00000000
      Internal error: : 1211 [#1] SMP ARM
      Modules linked in:
      CPU: 1 PID: 20 Comm: kworker/1:1 Not tainted
      4.9.0-rc1-koelsch-00011-g68db9bc814362e7f #3383
      Hardware name: Generic R8A7791 (Flattened Device Tree)
      Workqueue: events pci_pme_list_scan
      task: eb56e140 task.stack: eb58e000
      PC is at pci_generic_config_read+0x64/0x6c
      LR is at rcar_pci_cfg_base+0x64/0x84
      pc : [<c041d7b4>]    lr : [<c04309a0>]    psr: 600d0093
      sp : eb58fe98  ip : c041d750  fp : 00000008
      r10: c0e2283c  r9 : 00000000  r8 : 600d0013
      r7 : 00000008  r6 : eb58fed6  r5 : 00000002  r4 : eb58feb4
      r3 : 00000000  r2 : 00000044  r1 : 00000008  r0 : 00000000
      Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment user
      Control: 30c5387d  Table: 6a9f6c80  DAC: 55555555
      Process kworker/1:1 (pid: 20, stack limit = 0xeb58e210)
      Stack: (0xeb58fe98 to 0xeb590000)
      fe80:                                                       00000002 00000044
      fea0: eb6f5800 c041d9b0 eb58feb4 00000008 00000044 00000000 eb78a000 eb78a000
      fec0: 00000044 00000000 eb9aff00 c0424bf0 eb78a000 00000000 eb78a000 c0e22830
      fee0: ea8a6fc0 c0424c5c eaae79c0 c0424ce0 eb55f380 c0e22838 eb9a9800 c0235fbc
      ff00: eb55f380 c0e22838 eb55f380 eb9a9800 eb9a9800 eb58e000 eb9a9824 c0e02100
      ff20: eb55f398 c02366c4 eb56e140 eb5631c0 00000000 eb55f380 c023641c 00000000
      ff40: 00000000 00000000 00000000 c023a928 cd105598 00000000 40506a34 eb55f380
      ff60: 00000000 00000000 dead4ead ffffffff ffffffff eb58ff74 eb58ff74 00000000
      ff80: 00000000 dead4ead ffffffff ffffffff eb58ff90 eb58ff90 eb58ffac eb5631c0
      ffa0: c023a844 00000000 00000000 c0206d68 00000000 00000000 00000000 00000000
      ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
      ffe0: 00000000 00000000 00000000 00000000 00000013 00000000 3a81336c 10ccd1dd
      [<c041d7b4>] (pci_generic_config_read) from [<c041d9b0>]
      (pci_bus_read_config_word+0x58/0x80)
      [<c041d9b0>] (pci_bus_read_config_word) from [<c0424bf0>]
      (pci_check_pme_status+0x34/0x78)
      [<c0424bf0>] (pci_check_pme_status) from [<c0424c5c>] (pci_pme_wakeup+0x28/0x54)
      [<c0424c5c>] (pci_pme_wakeup) from [<c0424ce0>] (pci_pme_list_scan+0x58/0xb4)
      [<c0424ce0>] (pci_pme_list_scan) from [<c0235fbc>]
      (process_one_work+0x1bc/0x308)
      [<c0235fbc>] (process_one_work) from [<c02366c4>] (worker_thread+0x2a8/0x3e0)
      [<c02366c4>] (worker_thread) from [<c023a928>] (kthread+0xe4/0xfc)
      [<c023a928>] (kthread) from [<c0206d68>] (ret_from_fork+0x14/0x2c)
      Code: ea000000 e5903000 f57ff04f e3a00000 (e5843000)
      ---[ end trace 667d43ba3aa9e589 ]---
    
    Fixes: df17e62e5bff ("PCI: Add support for polling PME state on suspended legacy PCI devices")
    Reported-and-tested-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
    Reported-and-tested-by: Geert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
    Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: Mika Westerberg <mika.westerberg@linux.intel.com>
    Cc: Niklas Söderlund <niklas.soderlund+renesas@ragnatech.se>
    Cc: Simon Horman <horms+renesas@verge.net.au>
    Cc: Yinghai Lu <yinghai@kernel.org>
    Cc: Matthew Garrett <mjg59@srcf.ucam.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5f36c8b4e4a336fdf797d1e4a59a429f541befdf
Author: David Woodhouse <dwmw@amazon.co.uk>
Date:   Wed Apr 12 13:25:50 2017 +0100

    PCI: Fix pci_mmap_fits() for HAVE_PCI_RESOURCE_TO_USER platforms
    
    commit 6bccc7f426abd640f08d8c75fb22f99483f201b4 upstream.
    
    In the PCI_MMAP_PROCFS case when the address being passed by the user is a
    'user visible' resource address based on the bus window, and not the actual
    contents of the resource, that's what we need to be checking it against.
    
    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6384f782a69cf93a8a59322e1b6cf29f27fa0c8f
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Wed May 17 10:19:49 2017 +0200

    tracing/kprobes: Enforce kprobes teardown after testing
    
    commit 30e7d894c1478c88d50ce94ddcdbd7f9763d9cdd upstream.
    
    Enabling the tracer selftest triggers occasionally the warning in
    text_poke(), which warns when the to be modified page is not marked
    reserved.
    
    The reason is that the tracer selftest installs kprobes on functions marked
    __init for testing. These probes are removed after the tests, but that
    removal schedules the delayed kprobes_optimizer work, which will do the
    actual text poke. If the work is executed after the init text is freed,
    then the warning triggers. The bug can be reproduced reliably when the work
    delay is increased.
    
    Flush the optimizer work and wait for the optimizing/unoptimizing lists to
    become empty before returning from the kprobes tracer selftest. That
    ensures that all operations which were queued due to the probes removal
    have completed.
    
    Link: http://lkml.kernel.org/r/20170516094802.76a468bb@gandalf.local.home
    
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Masami Hiramatsu <mhiramat@kernel.org>
    Fixes: 6274de498 ("kprobes: Support delayed unoptimizing")
    Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d5fb96b955ff53e31f8d83553e28510a6e5cb90b
Author: Al Viro <viro@zeniv.linux.org.uk>
Date:   Sun May 14 21:47:25 2017 -0400

    osf_wait4(): fix infoleak
    
    commit a8c39544a6eb2093c04afd5005b6192bd0e880c6 upstream.
    
    failing sys_wait4() won't fill struct rusage...
    
    Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e07db0d720d37678976956a5f972828fa6dca5a9
Author: Thomas Gleixner <tglx@linutronix.de>
Date:   Thu May 11 13:54:11 2017 +0200

    genirq: Fix chained interrupt data ordering
    
    commit 2c4569ca26986d18243f282dd727da27e9adae4c upstream.
    
    irq_set_chained_handler_and_data() sets up the chained interrupt and then
    stores the handler data.
    
    That's racy against an immediate interrupt which gets handled before the
    store of the handler data happened. The handler will dereference a NULL
    pointer and crash.
    
    Cure it by storing handler data before installing the chained handler.
    
    Reported-by: Borislav Petkov <bp@alien8.de>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1736f2b3de6295a3ba9965731e64b50ecdad50a7
Author: Johan Hovold <johan@kernel.org>
Date:   Fri May 12 12:06:32 2017 +0200

    uwb: fix device quirk on big-endian hosts
    
    commit 41318a2b82f5d5fe1fb408f6d6e0b22aa557111d upstream.
    
    Add missing endianness conversion when using the USB device-descriptor
    idProduct field to apply a hardware quirk.
    
    Fixes: 1ba47da52712 ("uwb: add the i1480 DFU driver")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ca19dd15e7bb29ed8fc0d531af96df37a4988737
Author: James Hogan <james.hogan@imgtec.com>
Date:   Tue May 2 19:41:06 2017 +0100

    metag/uaccess: Check access_ok in strncpy_from_user
    
    commit 3a158a62da0673db918b53ac1440845a5b64fd90 upstream.
    
    The metag implementation of strncpy_from_user() doesn't validate the src
    pointer, which could allow reading of arbitrary kernel memory. Add a
    short access_ok() check to prevent that.
    
    Its still possible for it to read across the user/kernel boundary, but
    it will invariably reach a NUL character after only 9 bytes, leaking
    only a static kernel address being loaded into D0Re0 at the beginning of
    __start, which is acceptable for the immediate fix.
    
    Reported-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: linux-metag@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2d9b2e7808325ea8f534041a8affb44c461406fd
Author: James Hogan <james.hogan@imgtec.com>
Date:   Fri Apr 28 10:50:26 2017 +0100

    metag/uaccess: Fix access_ok()
    
    commit 8a8b56638bcac4e64cccc88bf95a0f9f4b19a2fb upstream.
    
    The __user_bad() macro used by access_ok() has a few corner cases
    noticed by Al Viro where it doesn't behave correctly:
    
     - The kernel range check has off by 1 errors which permit access to the
       first and last byte of the kernel mapped range.
    
     - The kernel range check ends at LINCORE_BASE rather than
       META_MEMORY_LIMIT, which is ineffective when the kernel is in global
       space (an extremely uncommon configuration).
    
    There are a couple of other shortcomings here too:
    
     - Access to the whole of the other address space is permitted (i.e. the
       global half of the address space when the kernel is in local space).
       This isn't ideal as it could theoretically still contain privileged
       mappings set up by the bootloader.
    
     - The size argument is unused, permitting user copies which start on
       valid pages at the end of the user address range and cross the
       boundary into the kernel address space (e.g. addr = 0x3ffffff0, size
       > 0x10).
    
    It isn't very convenient to add size checks when disallowing certain
    regions, and it seems far safer to be sure and explicit about what
    userland is able to access, so invert the logic to allow certain regions
    instead, and fix the off by 1 errors and missing size checks. This also
    allows the get_fs() == KERNEL_DS check to be more easily optimised into
    the user address range case.
    
    We now have 3 such allowed regions:
    
     - The user address range (incorporating the get_fs() == KERNEL_DS
       check).
    
     - NULL (some kernel code expects this to work, and we'll always catch
       the fault anyway).
    
     - The core code memory region.
    
    Fixes: 373cd784d0fc ("metag: Memory handling")
    Reported-by: Al Viro <viro@zeniv.linux.org.uk>
    Signed-off-by: James Hogan <james.hogan@imgtec.com>
    Cc: linux-metag@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 98d5e84363ea81f300e7f1806f4cd2e0637407aa
Author: KarimAllah Ahmed <karahmed@amazon.de>
Date:   Fri May 5 11:39:59 2017 -0700

    iommu/vt-d: Flush the IOTLB to get rid of the initial kdump mappings
    
    commit f73a7eee900e95404b61408a23a1df5c5811704c upstream.
    
    Ever since commit 091d42e43d ("iommu/vt-d: Copy translation tables from
    old kernel") the kdump kernel copies the IOMMU context tables from the
    previous kernel. Each device mappings will be destroyed once the driver
    for the respective device takes over.
    
    This unfortunately breaks the workflow of mapping and unmapping a new
    context to the IOMMU. The mapping function assumes that either:
    
    1) Unmapping did the proper IOMMU flushing and it only ever flush if the
       IOMMU unit supports caching invalid entries.
    2) The system just booted and the initialization code took care of
       flushing all IOMMU caches.
    
    This assumption is not true for the kdump kernel since the context
    tables have been copied from the previous kernel and translations could
    have been cached ever since. So make sure to flush the IOTLB as well
    when we destroy these old copied mappings.
    
    Cc: Joerg Roedel <joro@8bytes.org>
    Cc: David Woodhouse <dwmw2@infradead.org>
    Cc: David Woodhouse <dwmw@amazon.co.uk>
    Cc: Anthony Liguori <aliguori@amazon.com>
    Signed-off-by: KarimAllah Ahmed <karahmed@amazon.de>
    Acked-by: David Woodhouse <dwmw@amazon.co.uk>
    Fixes: 091d42e43d ("iommu/vt-d: Copy translation tables from old kernel")
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cb89b1f9dff9a336b23b23a3bd7e59adcf77e86a
Author: Malcolm Priestley <tvboxspy@gmail.com>
Date:   Thu May 11 18:57:45 2017 +0100

    staging: rtl8192e: rtl92e_get_eeprom_size Fix read size of EPROM_CMD.
    
    commit 90be652c9f157d44b9c2803f902a8839796c090d upstream.
    
    EPROM_CMD is 2 byte aligned on PCI map so calling with rtl92e_readl
    will return invalid data so use rtl92e_readw.
    
    The device is unable to select the right eeprom type.
    
    Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 427907e599fa7f4e3313740a8f54be467261c167
Author: Malcolm Priestley <tvboxspy@gmail.com>
Date:   Thu May 11 18:57:44 2017 +0100

    staging: rtl8192e: fix 2 byte alignment of register BSSIDR.
    
    commit 867510bde14e7b7fc6dd0f50b48f6753cfbd227a upstream.
    
    BSSIDR has two byte alignment on PCI ioremap correct the write
    by swapping to 16 bits first.
    
    This fixes a problem that the device associates fail because
    the filter is not set correctly.
    
    Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8b26f53bf0260c71072a504f7f1d6f8c1baee3d2
Author: Keno Fischer <keno@juliacomputing.com>
Date:   Tue Jan 24 15:17:48 2017 -0800

    mm/huge_memory.c: respect FOLL_FORCE/FOLL_COW for thp
    
    commit 8310d48b125d19fcd9521d83b8293e63eb1646aa upstream.
    
    In commit 19be0eaffa3a ("mm: remove gup_flags FOLL_WRITE games from
    __get_user_pages()"), the mm code was changed from unsetting FOLL_WRITE
    after a COW was resolved to setting the (newly introduced) FOLL_COW
    instead.  Simultaneously, the check in gup.c was updated to still allow
    writes with FOLL_FORCE set if FOLL_COW had also been set.
    
    However, a similar check in huge_memory.c was forgotten.  As a result,
    remote memory writes to ro regions of memory backed by transparent huge
    pages cause an infinite loop in the kernel (handle_mm_fault sets
    FOLL_COW and returns 0 causing a retry, but follow_trans_huge_pmd bails
    out immidiately because `(flags & FOLL_WRITE) && !pmd_write(*pmd)` is
    true.
    
    While in this state the process is stil SIGKILLable, but little else
    works (e.g.  no ptrace attach, no other signals).  This is easily
    reproduced with the following code (assuming thp are set to always):
    
        #include <assert.h>
        #include <fcntl.h>
        #include <stdint.h>
        #include <stdio.h>
        #include <string.h>
        #include <sys/mman.h>
        #include <sys/stat.h>
        #include <sys/types.h>
        #include <sys/wait.h>
        #include <unistd.h>
    
        #define TEST_SIZE 5 * 1024 * 1024
    
        int main(void) {
          int status;
          pid_t child;
          int fd = open("/proc/self/mem", O_RDWR);
          void *addr = mmap(NULL, TEST_SIZE, PROT_READ,
                            MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
          assert(addr != MAP_FAILED);
          pid_t parent_pid = getpid();
          if ((child = fork()) == 0) {
            void *addr2 = mmap(NULL, TEST_SIZE, PROT_READ | PROT_WRITE,
                               MAP_ANONYMOUS | MAP_PRIVATE, 0, 0);
            assert(addr2 != MAP_FAILED);
            memset(addr2, 'a', TEST_SIZE);
            pwrite(fd, addr2, TEST_SIZE, (uintptr_t)addr);
            return 0;
          }
          assert(child == waitpid(child, &status, 0));
          assert(WIFEXITED(status) && WEXITSTATUS(status) == 0);
          return 0;
        }
    
    Fix this by updating follow_trans_huge_pmd in huge_memory.c analogously
    to the update in gup.c in the original commit.  The same pattern exists
    in follow_devmap_pmd.  However, we should not be able to reach that
    check with FOLL_COW set, so add WARN_ONCE to make sure we notice if we
    ever do.
    
    [akpm@linux-foundation.org: coding-style fixes]
    Link: http://lkml.kernel.org/r/20170106015025.GA38411@juliacomputing.com
    Signed-off-by: Keno Fischer <keno@juliacomputing.com>
    Acked-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
    Cc: Greg Thelen <gthelen@google.com>
    Cc: Nicholas Piggin <npiggin@gmail.com>
    Cc: Willy Tarreau <w@1wt.eu>
    Cc: Oleg Nesterov <oleg@redhat.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    [AmitP: Minor refactoring of upstream changes for linux-3.18.y,
            where follow_devmap_pmd() doesn't exist.]
    Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f03484fd5a3ad9f6176e23ee85edc2891af9d0a6
Author: Takashi Iwai <tiwai@suse.de>
Date:   Thu Nov 17 10:49:31 2016 +0100

    xc2028: Fix use-after-free bug properly
    
    commit 22a1e7783e173ab3d86018eb590107d68df46c11 upstream.
    
    The commit 8dfbcc4351a0 ("[media] xc2028: avoid use after free") tried
    to address the reported use-after-free by clearing the reference.
    
    However, it's clearing the wrong pointer; it sets NULL to
    priv->ctrl.fname, but it's anyway overwritten by the next line
    memcpy(&priv->ctrl, p, sizeof(priv->ctrl)).
    
    OTOH, the actual code accessing the freed string is the strcmp() call
    with priv->fname:
            if (!firmware_name[0] && p->fname &&
                priv->fname && strcmp(p->fname, priv->fname))
                    free_firmware(priv);
    
    where priv->fname points to the previous file name, and this was
    already freed by kfree().
    
    For fixing the bug properly, this patch does the following:
    
    - Keep the copy of firmware file name in only priv->fname,
      priv->ctrl.fname isn't changed;
    - The allocation is done only when the firmware gets loaded;
    - The kfree() is called in free_firmware() commonly
    
    Fixes: commit 8dfbcc4351a0 ('[media] xc2028: avoid use after free')
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Amit Pundir <amit.pundir@linaro.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    arm64: documentation: document tagged pointer stack constraints
    
    commit f0e421b1bf7af97f026e1bb8bfe4c5a7a8c08f42 upstream.
    
    Some kernel features don't currently work if a task puts a non-zero
    address tag in its stack pointer, frame pointer, or frame record entries
    (FP, LR).
    
    For example, with a tagged stack pointer, the kernel can't deliver
    signals to the process, and the task is killed instead. As another
    example, with a tagged frame pointer or frame records, perf fails to
    generate call graphs or resolve symbols.
    
    For now, just document these limitations, instead of finding and fixing
    everything that doesn't work, as it's not known if anyone needs to use
    tags in these places anyway.
    
    In addition, as requested by Dave Martin, generalize the limitations
    into a general kernel address tag policy, and refactor
    tagged-pointers.txt to include it.
    
    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 06dd8281a7d35b677bddc8fdc7366cf55355d002
Author: Mark Rutland <mark.rutland@arm.com>
Date:   Wed May 3 16:09:35 2017 +0100

    arm64: uaccess: ensure extension of access_ok() addr
    
    commit a06040d7a791a9177581dcf7293941bd92400856 upstream.
    
    Our access_ok() simply hands its arguments over to __range_ok(), which
    implicitly assummes that the addr parameter is 64 bits wide. This isn't
    necessarily true for compat code, which might pass down a 32-bit address
    parameter.
    
    In these cases, we don't have a guarantee that the address has been zero
    extended to 64 bits, and the upper bits of the register may contain
    unknown values, potentially resulting in a suprious failure.
    
    Avoid this by explicitly casting the addr parameter to an unsigned long
    (as is done on other architectures), ensuring that the parameter is
    widened appropriately.
    
    Fixes: 0aea86a2176c ("arm64: User access library functions")
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

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

    arm64: xchg: hazard against entire exchange variable
    
    commit fee960bed5e857eb126c4e56dd9ff85938356579 upstream.
    
    The inline assembly in __XCHG_CASE() uses a +Q constraint to hazard
    against other accesses to the memory location being exchanged. However,
    the pointer passed to the constraint is a u8 pointer, and thus the
    hazard only applies to the first byte of the location.
    
    GCC can take advantage of this, assuming that other portions of the
    location are unchanged, as demonstrated with the following test case:
    
    union u {
            unsigned long l;
            unsigned int i[2];
    };
    
    unsigned long update_char_hazard(union u *u)
    {
            unsigned int a, b;
    
            a = u->i[1];
            asm ("str %1, %0" : "+Q" (*(char *)&u->l) : "r" (0UL));
            b = u->i[1];
    
            return a ^ b;
    }
    
    unsigned long update_long_hazard(union u *u)
    {
            unsigned int a, b;
    
            a = u->i[1];
            asm ("str %1, %0" : "+Q" (*(long *)&u->l) : "r" (0UL));
            b = u->i[1];
    
            return a ^ b;
    }
    
    The linaro 15.08 GCC 5.1.1 toolchain compiles the above as follows when
    using -O2 or above:
    
    0000000000000000 <update_char_hazard>:
       0:   d2800001        mov     x1, #0x0                        // #0
       4:   f9000001        str     x1, [x0]
       8:   d2800000        mov     x0, #0x0                        // #0
       c:   d65f03c0        ret
    
    0000000000000010 <update_long_hazard>:
      10:   b9400401        ldr     w1, [x0,#4]
      14:   d2800002        mov     x2, #0x0                        // #0
      18:   f9000002        str     x2, [x0]
      1c:   b9400400        ldr     w0, [x0,#4]
      20:   4a000020        eor     w0, w1, w0
      24:   d65f03c0        ret
    
    This patch fixes the issue by passing an unsigned long pointer into the
    +Q constraint, as we do for our cmpxchg code. This may hazard against
    more than is necessary, but this is better than missing a necessary
    hazard.
    
    Fixes: 305d454aaa29 ("arm64: atomics: implement native {relaxed, acquire, release} atomics")
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Mark Rutland <mark.rutland@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit acbab784a9b6ea3a808e6d30098601b69db1214b
Author: Ludovic Desroches <ludovic.desroches@microchip.com>
Date:   Mon Apr 10 10:25:17 2017 +0200

    ARM: dts: at91: sama5d3_xplained: not all ADC channels are available
    
    commit d3df1ec06353e51fc44563d2e7e18d42811af290 upstream.
    
    Remove ADC channels that are not available by default on the sama5d3_xplained
    board (resistor not populated) in order to not create confusion.
    
    Signed-off-by: Ludovic Desroches <ludovic.desroches@microchip.com>
    Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
    Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6ae3be7167b70d106c631a6b9b629d926651e054
Author: Ludovic Desroches <ludovic.desroches@microchip.com>
Date:   Mon Apr 10 10:25:16 2017 +0200

    ARM: dts: at91: sama5d3_xplained: fix ADC vref
    
    commit 9cdd31e5913c1f86dce7e201b086155b3f24896b upstream.
    
    The voltage reference for the ADC is not 3V but 3.3V since it is connected to
    VDDANA.
    
    Signed-off-by: Ludovic Desroches <ludovic.desroches@microchip.com>
    Acked-by: Nicolas Ferre <nicolas.ferre@microchip.com>
    Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1ab43a59899610f5b67a781494bd8a84be342fd6
Author: LiuHailong <liu.hailong6@zte.com.cn>
Date:   Tue Feb 7 10:35:52 2017 +0800

    powerpc/64e: Fix hang when debugging programs with relocated kernel
    
    commit fd615f69a18a9d4aa5ef02a1dc83f319f75da8e7 upstream.
    
    Debug interrupts can be taken during interrupt entry, since interrupt
    entry does not automatically turn them off.  The kernel will check
    whether the faulting instruction is between [interrupt_base_book3e,
    __end_interrupts], and if so clear MSR[DE] and return.
    
    However, when the kernel is built with CONFIG_RELOCATABLE, it can't use
    LOAD_REG_IMMEDIATE(r14,interrupt_base_book3e) and
    LOAD_REG_IMMEDIATE(r15,__end_interrupts), as they ignore relocation.
    Thus, if the kernel is actually running at a different address than it
    was built at, the address comparison will fail, and the exception entry
    code will hang at kernel_dbg_exc.
    
    r2(toc) is also not usable here, as r2 still holds data from the
    interrupted context, so LOAD_REG_ADDR() doesn't work either.  So we use
    the *name@got* to get the EV of two labels directly.
    
    Test programs test.c shows as follows:
    int main(int argc, char *argv[])
    {
            if (access("/proc/sys/kernel/perf_event_paranoid", F_OK) == -1)
                    printf("Kernel doesn't have perf_event support\n");
    }
    
    Steps to reproduce the bug, for example:
     1) ./gdb ./test
     2) (gdb) b access
     3) (gdb) r
     4) (gdb) s
    
    Signed-off-by: Liu Hailong <liu.hailong6@zte.com.cn>
    Signed-off-by: Jiang Xuexin <jiang.xuexin@zte.com.cn>
    Reviewed-by: Jiang Biao <jiang.biao2@zte.com.cn>
    Reviewed-by: Liu Song <liu.song11@zte.com.cn>
    Reviewed-by: Huang Jian <huang.jian@zte.com.cn>
    [scottwood: cleaned up commit message, and specified bad behavior
     as a hang rather than an oops to correspond to mainline kernel behavior]
    Fixes: 1cb6e0649248 ("powerpc/book3e: support CONFIG_RELOCATABLE")
    Signed-off-by: Scott Wood <oss@buserror.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 33c0c0f8edb9c677608a93c3d4fbb40b05841174
Author: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
Date:   Mon Apr 17 20:21:40 2017 -0400

    powerpc/pseries: Fix of_node_put() underflow during DLPAR remove
    
    commit 68baf692c435339e6295cb470ea5545cbc28160e upstream.
    
    Historically struct device_node references were tracked using a kref embedded as
    a struct field. Commit 75b57ecf9d1d ("of: Make device nodes kobjects so they
    show up in sysfs") (Mar 2014) refactored device_nodes to be kobjects such that
    the device tree could by more simply exposed to userspace using sysfs.
    
    Commit 0829f6d1f69e ("of: device_node kobject lifecycle fixes") (Mar 2014)
    followed up these changes to better control the kobject lifecycle and in
    particular the referecne counting via of_node_get(), of_node_put(), and
    of_node_init().
    
    A result of this second commit was that it introduced an of_node_put() call when
    a dynamic node is detached, in of_node_remove(), that removes the initial kobj
    reference created by of_node_init().
    
    Traditionally as the original dynamic device node user the pseries code had
    assumed responsibilty for releasing this final reference in its platform
    specific DLPAR detach code.
    
    This patch fixes a refcount underflow introduced by commit 0829f6d1f6, and
    recently exposed by the upstreaming of the recount API.
    
    Messages like the following are no longer seen in the kernel log with this
    patch following DLPAR remove operations of cpus and pci devices.
    
      rpadlpar_io: slot PHB 72 removed
      refcount_t: underflow; use-after-free.
      ------------[ cut here ]------------
      WARNING: CPU: 5 PID: 3335 at lib/refcount.c:128 refcount_sub_and_test+0xf4/0x110
    
    Fixes: 0829f6d1f69e ("of: device_node kobject lifecycle fixes")
    Signed-off-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
    [mpe: Make change log commit references more verbose]
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a86b9ecf1158b62f97587e498f336952dc9c0231
Author: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
Date:   Tue Apr 18 22:08:17 2017 +0530

    powerpc/book3s/mce: Move add_taint() later in virtual mode
    
    commit d93b0ac01a9ce276ec39644be47001873d3d183c upstream.
    
    machine_check_early() gets called in real mode. The very first time when
    add_taint() is called, it prints a warning which ends up calling opal
    call (that uses OPAL_CALL wrapper) for writing it to console. If we get a
    very first machine check while we are in opal we are doomed. OPAL_CALL
    overwrites the PACASAVEDMSR in r13 and in this case when we are done with
    MCE handling the original opal call will use this new MSR on it's way
    back to opal_return. This usually leads to unexpected behaviour or the
    kernel to panic. Instead move the add_taint() call later in the virtual
    mode where it is safe to call.
    
    This is broken with current FW level. We got lucky so far for not getting
    very first MCE hit while in OPAL. But easily reproducible on Mambo.
    
    Fixes: 27ea2c420cad ("powerpc: Set the correct kernel taint on machine check errors.")
    Signed-off-by: Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f3ffc64bf3dd4878fe2fe36a5a30880604a441dc
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 09:53:56 2017 -0300

    cx231xx-cards: fix NULL-deref at probe
    
    commit 0cd273bb5e4d1828efaaa8dfd11b7928131ed149 upstream.
    
    Make sure to check the number of endpoints to avoid dereferencing a
    NULL-pointer or accessing memory beyond the endpoint array should a
    malicious device lack the expected endpoints.
    
    Fixes: e0d3bafd0258 ("V4L/DVB (10954): Add cx231xx USB driver")
    
    Cc: Sri Deevi <Srinivasa.Deevi@conexant.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3208e455284bf6167434ed1d85f0fbb8f3564ab2
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 09:53:58 2017 -0300

    cx231xx-audio: fix NULL-deref at probe
    
    commit 65f921647f4c89a2068478c89691f39b309b58f7 upstream.
    
    Make sure to check the number of endpoints to avoid dereferencing a
    NULL-pointer or accessing memory beyond the endpoint array should a
    malicious device lack the expected endpoints.
    
    Fixes: e0d3bafd0258 ("V4L/DVB (10954): Add cx231xx USB driver")
    
    Cc: Sri Deevi <Srinivasa.Deevi@conexant.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bd14c18861c73e3b10630597b0bc90855af1623e
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 09:53:57 2017 -0300

    cx231xx-audio: fix init error path
    
    commit fff1abc4d54e469140a699612b4db8d6397bfcba upstream.
    
    Make sure to release the snd_card also on a late allocation error.
    
    Fixes: e0d3bafd0258 ("V4L/DVB (10954): Add cx231xx USB driver")
    
    Cc: Sri Deevi <Srinivasa.Deevi@conexant.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f7c778fa707d9ba6a01788bdd58728f5749d6fde
Author: Daniel Scheller <d.scheller@gmx.net>
Date:   Sun Mar 19 12:26:39 2017 -0300

    dvb-frontends/cxd2841er: define symbol_rate_min/max in T/C fe-ops
    
    commit 158f0328af86a99d64073851967a02694bff987d upstream.
    
    Fixes "w_scan -f c" complaining with
    
      This dvb driver is *buggy*: the symbol rate limits are undefined - please
      report to linuxtv.org)
    
    Signed-off-by: Daniel Scheller <d.scheller@gmx.net>
    Acked-by: Abylay Ospan <aospan@netup.ru>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e5a9ebb4387aad53a3a81aa634734e3edcca8784
Author: Alyssa Milburn <amilburn@zall.org>
Date:   Sat Apr 1 14:34:08 2017 -0300

    zr364xx: enforce minimum size when reading header
    
    commit ee0fe833d96793853335844b6d99fb76bd12cbeb upstream.
    
    This code copies actual_length-128 bytes from the header, which will
    underflow if the received buffer is too small.
    
    Signed-off-by: Alyssa Milburn <amilburn@zall.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a6e0caa3471598df6c7268c57912b24eee0e8402
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 09:53:54 2017 -0300

    dib0700: fix NULL-deref at probe
    
    commit d5823511c0f8719a39e72ede1bce65411ac653b7 upstream.
    
    Make sure to check the number of endpoints to avoid dereferencing a
    NULL-pointer should a malicious device lack endpoints.
    
    Fixes: c4018fa2e4c0 ("[media] dib0700: fix RC support on Hauppauge
    Nova-TD")
    
    Cc: Mauro Carvalho Chehab <mchehab@kernel.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a896652f6ad33cd695275f4a8d65aaac9f82d728
Author: Marek Szyprowski <m.szyprowski@samsung.com>
Date:   Wed Mar 22 04:53:57 2017 -0300

    s5p-mfc: Fix unbalanced call to clock management
    
    commit a5cb00eb4223458250b55daf03ac7ea5f424d601 upstream.
    
    Clock should be turned off after calling s5p_mfc_init_hw() from the
    watchdog worker, like it is already done in the s5p_mfc_open() which also
    calls this function.
    
    Fixes: af93574678108 ("[media] MFC: Add MFC 5.1 V4L2 driver")
    
    Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
    Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fc9753aa6ce969cce6f007e6dac8dccf00241f10
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 09:53:59 2017 -0300

    gspca: konica: add missing endpoint sanity check
    
    commit aa58fedb8c7b6cf2f05941d238495f9e2f29655c upstream.
    
    Make sure to check the number of endpoints to avoid accessing memory
    beyond the endpoint array should a device lack the expected endpoints.
    
    Note that, as far as I can tell, the gspca framework has already made
    sure there is at least one endpoint in the current alternate setting so
    there should be no risk for a NULL-pointer dereference here.
    
    Fixes: b517af722860 ("V4L/DVB: gspca_konica: New gspca subdriver for
    konica chipset using cams")
    
    Cc: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hansverk@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 04f522476a267e5d2d15d4b0c9e1500027e69879
Author: Yan, Zheng <zyan@redhat.com>
Date:   Wed Apr 19 10:01:48 2017 +0800

    ceph: fix recursion between ceph_set_acl() and __ceph_setattr()
    
    commit 8179a101eb5f4ef0ac9a915fcea9a9d3109efa90 upstream.
    
    ceph_set_acl() calls __ceph_setattr() if the setacl operation needs
    to modify inode's i_mode. __ceph_setattr() updates inode's i_mode,
    then calls posix_acl_chmod().
    
    The problem is that __ceph_setattr() calls posix_acl_chmod() before
    sending the setattr request. The get_acl() call in posix_acl_chmod()
    can trigger a getxattr request. The reply of the getxattr request
    can restore inode's i_mode to its old value. The set_acl() call in
    posix_acl_chmod() sees old value of inode's i_mode, so it calls
    __ceph_setattr() again.
    
    Cc: stable@vger.kernel.org # needs backporting for < 4.9
    Link: http://tracker.ceph.com/issues/19688
    Reported-by: Jerry Lee <leisurelysw24@gmail.com>
    Signed-off-by: "Yan, Zheng" <zyan@redhat.com>
    Reviewed-by: Jeff Layton <jlayton@redhat.com>
    Tested-by: Luis Henriques <lhenriques@suse.com>
    Signed-off-by: Ilya Dryomov <idryomov@gmail.com>
    [luis: introduce __ceph_setattr() and make ceph_set_acl() call it, as
     suggested by Yan.]
    Signed-off-by: Luis Henriques <lhenriques@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Reviewed-by: “Yan, Zheng” <zyan@redhat.com>

commit 0e9e19a6653079415bb33f515b14a1de15bd3126
Author: Matt Ranostay <matt.ranostay@konsulko.com>
Date:   Thu Apr 13 23:21:56 2017 -0700

    iio: proximity: as3935: fix as3935_write
    
    commit 84ca8e364acb26aba3292bc113ca8ed4335380fd upstream.
    
    AS3935_WRITE_DATA macro bit is incorrect and the actual write
    sequence is two leading zeros.
    
    Cc: George McCollister <george.mccollister@gmail.com>
    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 8a5b15e198f1701da75a8223cfe72c04bcb15160
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Tue May 2 13:58:53 2017 +0300

    ipx: call ipxitf_put() in ioctl error path
    
    commit ee0d8d8482345ff97a75a7d747efc309f13b0d80 upstream.
    
    We should call ipxitf_put() if the copy_to_user() fails.
    
    Reported-by: 李强 <liqiang6-s@360.cn>
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4ae1efc7cc9899ca90d280d4e5ea322afb773908
Author: Johan Hovold <johan@kernel.org>
Date:   Wed May 10 18:18:28 2017 +0200

    USB: hub: fix non-SS hub-descriptor handling
    
    commit bec444cd1c94c48df409a35ad4e5b143c245c3f7 upstream.
    
    Add missing sanity check on the non-SuperSpeed hub-descriptor length in
    order to avoid parsing and leaking two bytes of uninitialised slab data
    through sysfs removable-attributes (or a compound-device debug
    statement).
    
    Note that we only make sure that the DeviceRemovable field is always
    present (and specifically ignore the unused PortPwrCtrlMask field) in
    order to continue support any hubs with non-compliant descriptors. As a
    further safeguard, the descriptor buffer is also cleared.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit af4e23402409a84c1e34d3aead6c624cfa851961
Author: Johan Hovold <johan@kernel.org>
Date:   Wed May 10 18:18:27 2017 +0200

    USB: hub: fix SS hub-descriptor handling
    
    commit 2c25a2c818023df64463aac3288a9f969491e507 upstream.
    
    A SuperSpeed hub descriptor does not have any variable-length fields so
    bail out when reading a short descriptor.
    
    This avoids parsing and leaking two bytes of uninitialised slab data
    through sysfs removable-attributes.
    
    Fixes: dbe79bbe9dcb ("USB 3.0 Hub Changes")
    Cc: John Youn <John.Youn@synopsys.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1e6e9c4c36f9626d5ad2b63aa7ad5686dde737e7
Author: Johan Hovold <johan@kernel.org>
Date:   Thu May 11 11:41:21 2017 +0200

    USB: serial: io_ti: fix div-by-zero in set_termios
    
    commit 6aeb75e6adfaed16e58780309613a578fe1ee90b upstream.
    
    Fix a division-by-zero in set_termios when debugging is enabled and a
    high-enough speed has been requested so that the divisor value becomes
    zero.
    
    Instead of just fixing the offending debug statement, cap the baud rate
    at the base as a zero divisor value also appears to crash the firmware.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4be0ae3d314c197865bc742069fa7f66e22ee8bf
Author: Johan Hovold <johan@kernel.org>
Date:   Thu May 11 11:41:20 2017 +0200

    USB: serial: mct_u232: fix big-endian baud-rate handling
    
    commit 26cede343656c0bc2c33cdc783771282405c7fb2 upstream.
    
    Drop erroneous cpu_to_le32 when setting the baud rate, something which
    corrupted the divisor on big-endian hosts.
    
    Found using sparse:
    
            warning: incorrect type in argument 1 (different base types)
                expected unsigned int [unsigned] [usertype] val
                got restricted __le32 [usertype] <noident>
    
    Fixes: af2ac1a091bc ("USB: serial mct_usb232: move DMA buffers to heap")
    Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Acked-By: Pete Zaitcev <zaitcev@yahoo.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 704f23f20c5effd3592453c06a77b3cbb4ab34d5
Author: Bjørn Mork <bjorn@mork.no>
Date:   Wed May 17 16:30:50 2017 +0200

    USB: serial: qcserial: add more Lenovo EM74xx device IDs
    
    commit 8d7a10dd323993cc40bd37bce8bc570133b0c396 upstream.
    
    In their infinite wisdom, and never ending quest for end user frustration,
    Lenovo has decided to use new USB device IDs for the wwan modules in
    their 2017 laptops.  The actual hardware is still the Sierra Wireless
    EM7455 or EM7430, depending on region.
    
    Signed-off-by: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1c7f99aa29793f43431a6f58d1ec8e12f98165d2
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Wed May 3 10:28:54 2017 +0200

    usb: serial: option: add Telit ME910 support
    
    commit 40dd46048c155b8f0683f468c950a1c107f77a7c upstream.
    
    This patch adds support for Telit ME910 PID 0x1100.
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 319be2ab4731527307e914fd70906423444d84e5
Author: Johan Hovold <johan@kernel.org>
Date:   Thu May 11 11:36:02 2017 +0200

    USB: iowarrior: fix info ioctl on big-endian hosts
    
    commit dd5ca753fa92fb736b1395db892bd29f78e6d408 upstream.
    
    Drop erroneous le16_to_cpu when returning the USB device speed which is
    already in host byte order.
    
    Found using sparse:
    
            warning: cast to restricted __le16
    
    Fixes: 946b960d13c1 ("USB: add driver for iowarrior devices.")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1beae7405705688bb9b93e0440fc2b1fabe34428
Author: Peter Ujfalusi <peter.ujfalusi@ti.com>
Date:   Wed May 17 11:23:11 2017 -0500

    usb: musb: tusb6010_omap: Do not reset the other direction's packet size
    
    commit 6df2b42f7c040d57d9ecb67244e04e905ab87ac6 upstream.
    
    We have one register for each EP to set the maximum packet size for both
    TX and RX.
    If for example an RX programming would happen before the previous TX
    transfer finishes we would reset the TX packet side.
    
    To fix this issue, only modify the TX or RX part of the register.
    
    Fixes: 550a7375fe72 ("USB: Add MUSB and TUSB support")
    Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com>
    Tested-by: Tony Lindgren <tony@atomide.com>
    Signed-off-by: Bin Liu <b-liu@ti.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5cbfae4ad3604154efd9e14f3ceddf462b916d84
Author: Alyssa Milburn <amilburn@zall.org>
Date:   Sat Apr 1 14:34:32 2017 -0300

    ttusb2: limit messages to buffer size
    
    commit a12b8ab8c5ff7ccd7b107a564743507c850a441d upstream.
    
    Otherwise ttusb2_i2c_xfer can read or write beyond the end of static and
    heap buffers.
    
    Signed-off-by: Alyssa Milburn <amilburn@zall.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9737909ff9d4ff421199e2c2238cadaacf2022cc
Author: Johan Hovold <johan@kernel.org>
Date:   Tue Mar 7 15:14:13 2017 -0300

    mceusb: fix NULL-deref at probe
    
    commit 03eb2a557ed552e920a0942b774aaf931596eec1 upstream.
    
    Make sure to check for the required out endpoint to avoid dereferencing
    a NULL-pointer in mce_request_packet should a malicious device lack such
    an endpoint. Note that this path is hit during probe.
    
    Fixes: 66e89522aff7 ("V4L/DVB: IR: add mceusb IR receiver driver")
    
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Sean Young <sean@mess.org>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f05c0dfd394fd4fe8aada5b78152ad8fbbdb51d2
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 09:53:55 2017 -0300

    usbvision: fix NULL-deref at probe
    
    commit eacb975b48272f54532b62f515a3cf7eefa35123 upstream.
    
    Make sure to check the number of endpoints to avoid dereferencing a
    NULL-pointer or accessing memory beyond the endpoint array should a
    malicious device lack the expected endpoints.
    
    Fixes: 2a9f8b5d25be ("V4L/DVB (5206): Usbvision: set alternate interface
    modification")
    
    Cc: Thierry MERLE <thierry.merle@free.fr>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 14d0cafd3f95d08eb0f1f44e32fec1ed0376f474
Author: Johan Hovold <johan@kernel.org>
Date:   Fri May 12 12:11:13 2017 +0200

    net: irda: irda-usb: fix firmware name on big-endian hosts
    
    commit 75cf067953d5ee543b3bda90bbfcbee5e1f94ae8 upstream.
    
    Add missing endianness conversion when using the USB device-descriptor
    bcdDevice field to construct a firmware file name.
    
    Fixes: 8ef80aef118e ("[IRDA]: irda-usb.c: STIR421x cleanups")
    Cc: Nick Fedchik <nfedchik@atlantic-link.com.ua>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ec0b553bd8df4b2b968e4a71530eec49f52f5222
Author: Peter Chen <peter.chen@nxp.com>
Date:   Wed May 17 18:32:01 2017 +0300

    usb: host: xhci-mem: allocate zeroed Scratchpad Buffer
    
    commit 7480d912d549f414e0ce39331870899e89a5598c upstream.
    
    According to xHCI ch4.20 Scratchpad Buffers, the Scratchpad
    Buffer needs to be zeroed.
    
            ...
            The following operations take place to allocate
            Scratchpad Buffers to the xHC:
            ...
                    b. Software clears the Scratchpad Buffer to '0'
    
    Signed-off-by: Peter Chen <peter.chen@nxp.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c0791b605fac86a8219403ca06ffbe92b993974d
Author: Mathias Nyman <mathias.nyman@linux.intel.com>
Date:   Wed May 17 18:32:00 2017 +0300

    xhci: apply PME_STUCK_QUIRK and MISSING_CAS quirk for Denverton
    
    commit a0c16630d35a874e82bdf2088f58ecaca1024315 upstream.
    
    Intel Denverton microserver is Atom based and need the PME and CAS quirks
    as well.
    
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 65ba07489dcd5cc49b14bc2b0ce50ad4708a903c
Author: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
Date:   Wed May 17 18:32:06 2017 +0300

    usb: host: xhci-plat: propagate return value of platform_get_irq()
    
    commit 4b148d5144d64ee135b8924350cb0b3a7fd21150 upstream.
    
    platform_get_irq() returns an error code, but the xhci-plat driver
    ignores it and always returns -ENODEV. This is not correct, and
    prevents -EPROBE_DEFER from being propagated properly.
    
    Signed-off-by: Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
    Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ada79b5ecda79ec7b53053d9955a5ee04c8dd633
Author: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Date:   Thu Jun 16 15:57:01 2016 +0300

    sched/fair: Initialize throttle_count for new task-groups lazily
    
    commit 094f469172e00d6ab0a3130b0e01c83b3cf3a98d upstream.
    
    Cgroup created inside throttled group must inherit current throttle_count.
    Broken throttle_count allows to nominate throttled entries as a next buddy,
    later this leads to null pointer dereference in pick_next_task_fair().
    
    This patch initialize cfs_rq->throttle_count at first enqueue: laziness
    allows to skip locking all rq at group creation. Lazy approach also allows
    to skip full sub-tree scan at throttling hierarchy (not in this patch).
    
    Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: bsegall@google.com
    Link: http://lkml.kernel.org/r/146608182119.21870.8439834428248129633.stgit@buzz
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Ben Pineau <benjamin.pineau@mirakl.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f01ae9cb0de282abfd20cd3c2e3477adbdb766ce
Author: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
Date:   Thu Jun 16 15:57:15 2016 +0300

    sched/fair: Do not announce throttled next buddy in dequeue_task_fair()
    
    commit 754bd598be9bbc953bc709a9e8ed7f3188bfb9d7 upstream.
    
    Hierarchy could be already throttled at this point. Throttled next
    buddy could trigger a NULL pointer dereference in pick_next_task_fair().
    
    Signed-off-by: Konstantin Khlebnikov <khlebnikov@yandex-team.ru>
    Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
    Reviewed-by: Ben Segall <bsegall@google.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/146608183552.21905.15924473394414832071.stgit@buzz
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Cc: Ben Pineau <benjamin.pineau@mirakl.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ae3d7b8931eb3151d8ad4fb8be6fe885000d3838
Author: Eric Biggers <ebiggers@google.com>
Date:   Mon Apr 24 10:00:09 2017 -0700

    fscrypt: avoid collisions when presenting long encrypted filenames
    
    commit 6b06cdee81d68a8a829ad8e8d0f31d6836744af9 upstream.
    
    When accessing an encrypted directory without the key, userspace must
    operate on filenames derived from the ciphertext names, which contain
    arbitrary bytes.  Since we must support filenames as long as NAME_MAX,
    we can't always just base64-encode the ciphertext, since that may make
    it too long.  Currently, this is solved by presenting long names in an
    abbreviated form containing any needed filesystem-specific hashes (e.g.
    to identify a directory block), then the last 16 bytes of ciphertext.
    This needs to be sufficient to identify the actual name on lookup.
    
    However, there is a bug.  It seems to have been assumed that due to the
    use of a CBC (ciphertext block chaining)-based encryption mode, the last
    16 bytes (i.e. the AES block size) of ciphertext would depend on the
    full plaintext, preventing collisions.  However, we actually use CBC
    with ciphertext stealing (CTS), which handles the last two blocks
    specially, causing them to appear "flipped".  Thus, it's actually the
    second-to-last block which depends on the full plaintext.
    
    This caused long filenames that differ only near the end of their
    plaintexts to, when observed without the key, point to the wrong inode
    and be undeletable.  For example, with ext4:
    
        # echo pass | e4crypt add_key -p 16 edir/
        # seq -f "edir/abcdefghijklmnopqrstuvwxyz012345%.0f" 100000 | xargs touch
        # find edir/ -type f | xargs stat -c %i | sort | uniq | wc -l
        100000
        # sync
        # echo 3 > /proc/sys/vm/drop_caches
        # keyctl new_session
        # find edir/ -type f | xargs stat -c %i | sort | uniq | wc -l
        2004
        # rm -rf edir/
        rm: cannot remove 'edir/_A7nNFi3rhkEQlJ6P,hdzluhODKOeWx5V': Structure needs cleaning
        ...
    
    To fix this, when presenting long encrypted filenames, encode the
    second-to-last block of ciphertext rather than the last 16 bytes.
    
    Although it would be nice to solve this without depending on a specific
    encryption mode, that would mean doing a cryptographic hash like SHA-256
    which would be much less efficient.  This way is sufficient for now, and
    it's still compatible with encryption modes like HEH which are strong
    pseudorandom permutations.  Also, changing the presented names is still
    allowed at any time because they are only provided to allow applications
    to do things like delete encrypted directories.  They're not designed to
    be used to persistently identify files --- which would be hard to do
    anyway, given that they're encrypted after all.
    
    For ease of backports, this patch only makes the minimal fix to both
    ext4 and f2fs.  It leaves ubifs as-is, since ubifs doesn't compare the
    ciphertext block yet.  Follow-on patches will clean things up properly
    and make the filesystems use a shared helper function.
    
    Fixes: 5de0b4d0cd15 ("ext4 crypto: simplify and speed up filename encryption")
    Reported-by: Gwendal Grignou <gwendal@chromium.org>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 129a883b01918aa18da337fda0aba309e92d329f
Author: Jaegeuk Kim <jaegeuk@kernel.org>
Date:   Mon Apr 24 10:00:08 2017 -0700

    f2fs: check entire encrypted bigname when finding a dentry
    
    commit 6332cd32c8290a80e929fc044dc5bdba77396e33 upstream.
    
    If user has no key under an encrypted dir, fscrypt gives digested dentries.
    Previously, when looking up a dentry, f2fs only checks its hash value with
    first 4 bytes of the digested dentry, which didn't handle hash collisions fully.
    This patch enhances to check entire dentry bytes likewise ext4.
    
    Eric reported how to reproduce this issue by:
    
     # seq -f "edir/abcdefghijklmnopqrstuvwxyz012345%.0f" 100000 | xargs touch
     # find edir -type f | xargs stat -c %i | sort | uniq | wc -l
    100000
     # sync
     # echo 3 > /proc/sys/vm/drop_caches
     # keyctl new_session
     # find edir -type f | xargs stat -c %i | sort | uniq | wc -l
    99999
    
    Cc: <stable@vger.kernel.org>
    Reported-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
    (fixed f2fs_dentry_hash() to work even when the hash is 0)
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 269d8211c400b42ff08cb1e047bd80e960c2705f
Author: Eric Biggers <ebiggers@google.com>
Date:   Fri Apr 7 10:58:37 2017 -0700

    fscrypt: fix context consistency check when key(s) unavailable
    
    commit 272f98f6846277378e1758a49a49d7bf39343c02 upstream.
    
    To mitigate some types of offline attacks, filesystem encryption is
    designed to enforce that all files in an encrypted directory tree use
    the same encryption policy (i.e. the same encryption context excluding
    the nonce).  However, the fscrypt_has_permitted_context() function which
    enforces this relies on comparing struct fscrypt_info's, which are only
    available when we have the encryption keys.  This can cause two
    incorrect behaviors:
    
    1. If we have the parent directory's key but not the child's key, or
       vice versa, then fscrypt_has_permitted_context() returned false,
       causing applications to see EPERM or ENOKEY.  This is incorrect if
       the encryption contexts are in fact consistent.  Although we'd
       normally have either both keys or neither key in that case since the
       master_key_descriptors would be the same, this is not guaranteed
       because keys can be added or removed from keyrings at any time.
    
    2. If we have neither the parent's key nor the child's key, then
       fscrypt_has_permitted_context() returned true, causing applications
       to see no error (or else an error for some other reason).  This is
       incorrect if the encryption contexts are in fact inconsistent, since
       in that case we should deny access.
    
    To fix this, retrieve and compare the fscrypt_contexts if we are unable
    to set up both fscrypt_infos.
    
    While this slightly hurts performance when accessing an encrypted
    directory tree without the key, this isn't a case we really need to be
    optimizing for; access *with* the key is much more important.
    Furthermore, the performance hit is barely noticeable given that we are
    already retrieving the fscrypt_context and doing two keyring searches in
    fscrypt_get_encryption_info().  If we ever actually wanted to optimize
    this case we might start by caching the fscrypt_contexts.
    
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0aa3b8ef69757fbb4655a92bf9934cec728dc38a
Author: Kristian Evensen <kristian.evensen@gmail.com>
Date:   Thu Jan 7 16:41:33 2016 +0100

    net: qmi_wwan: Add SIMCom 7230E
    
    commit 18715b261541f35ccede9b8686ee3ebaac697d38 upstream.
    
    SIMCom 7230E is a QMI LTE module with support for most "normal" bands.
    Manual testing has showed that only interface five works.
    
    Cc: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
    Acked-by: Bjørn Mork <bjorn@mork.no>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 22823e95193a0598b5681481eee9940e4128ad35
Author: Dan Carpenter <dan.carpenter@oracle.com>
Date:   Sat Apr 2 18:13:38 2016 -0400

    ext4 crypto: fix some error handling
    
    commit 4762cc3fbbd89e5fd316d6e4d3244a8984444f8d upstream.
    
    We should be testing for -ENOMEM but the minus sign is missing.
    
    Fixes: c9af28fdd449 ('ext4 crypto: don't let data integrity writebacks fail with ENOMEM')
    Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0a76f023e6f2073936cc87ff839b2aaeccc4fb9a
Author: Theodore Ts'o <tytso@mit.edu>
Date:   Sat Mar 26 16:14:34 2016 -0400

    ext4 crypto: don't let data integrity writebacks fail with ENOMEM
    
    commit c9af28fdd44922a6c10c9f8315718408af98e315 upstream.
    
    We don't want the writeback triggered from the journal commit (in
    data=writeback mode) to cause the journal to abort due to
    generic_writepages() returning an ENOMEM error.  In addition, if
    fsync() fails with ENOMEM, most applications will probably not do the
    right thing.
    
    So if we are doing a data integrity sync, and ext4_encrypt() returns
    ENOMEM, we will submit any queued I/O to date, and then retry the
    allocation using GFP_NOFAIL.
    
    Google-Bug-Id: 27641567
    
    Signed-off-by: Theodore Ts'o <tytso@mit.edu>
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f0486aa7bc805639d6c8a861e2d82eca02be39b7
Author: Andrey Korolyov <andrey@xdel.ru>
Date:   Tue May 16 23:54:41 2017 +0300

    USB: serial: ftdi_sio: add Olimex ARM-USB-TINY(H) PIDs
    
    commit 5f63424ab7daac840df2b12dd5bcc5b38d50f779 upstream.
    
    This patch adds support for recognition of ARM-USB-TINY(H) devices which
    are almost identical to ARM-USB-OCD(H) but lacking separate barrel jack
    and serial console.
    
    By suggestion from Johan Hovold it is possible to replace
    ftdi_jtag_quirk with a bit more generic construction. Since all
    Olimex-ARM debuggers has exactly two ports, we could safely always use
    only second port within the debugger family.
    
    Signed-off-by: Andrey Korolyov <andrey@xdel.ru>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 16ac61cf707c969f880d0432f2e532d88197a9b0
Author: Anthony Mallet <anthony.mallet@laas.fr>
Date:   Fri May 5 17:30:16 2017 +0200

    USB: serial: ftdi_sio: fix setting latency for unprivileged users
    
    commit bb246681b3ed0967489a7401ad528c1aaa1a4c2e upstream.
    
    Commit 557aaa7ffab6 ("ft232: support the ASYNC_LOW_LATENCY
    flag") enables unprivileged users to set the FTDI latency timer,
    but there was a logic flaw that skipped sending the corresponding
    USB control message to the device.
    
    Specifically, the device latency timer would not be updated until next
    open, something which was later also inadvertently broken by commit
    c19db4c9e49a ("USB: ftdi_sio: set device latency timeout at port
    probe").
    
    A recent commit c6dce2626606 ("USB: serial: ftdi_sio: fix extreme
    low-latency setting") disabled the low-latency mode by default so we now
    need this fix to allow unprivileged users to again enable it.
    
    Signed-off-by: Anthony Mallet <anthony.mallet@laas.fr>
    [johan: amend commit message]
    Fixes: 557aaa7ffab6 ("ft232: support the ASYNC_LOW_LATENCY flag")
    Fixes: c19db4c9e49a ("USB: ftdi_sio: set device latency timeout at port probe").
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6a70a5833ecc9147d8257e80f39e11d582810082
Author: Kirill Tkhai <ktkhai@virtuozzo.com>
Date:   Fri May 12 19:11:31 2017 +0300

    pid_ns: Fix race between setns'ed fork() and zap_pid_ns_processes()
    
    commit 3fd37226216620c1a468afa999739d5016fbc349 upstream.
    
    Imagine we have a pid namespace and a task from its parent's pid_ns,
    which made setns() to the pid namespace. The task is doing fork(),
    while the pid namespace's child reaper is dying. We have the race
    between them:
    
    Task from parent pid_ns             Child reaper
    copy_process()                      ..
      alloc_pid()                       ..
      ..                                zap_pid_ns_processes()
      ..                                  disable_pid_allocation()
      ..                                  read_lock(&tasklist_lock)
      ..                                  iterate over pids in pid_ns
      ..                                    kill tasks linked to pids
      ..                                  read_unlock(&tasklist_lock)
      write_lock_irq(&tasklist_lock);   ..
      attach_pid(p, PIDTYPE_PID);       ..
      ..                                ..
    
    So, just created task p won't receive SIGKILL signal,
    and the pid namespace will be in contradictory state.
    Only manual kill will help there, but does the userspace
    care about this? I suppose, the most users just inject
    a task into a pid namespace and wait a SIGCHLD from it.
    
    The patch fixes the problem. It simply checks for
    (pid_ns->nr_hashed & PIDNS_HASH_ADDING) in copy_process().
    We do it under the tasklist_lock, and can't skip
    PIDNS_HASH_ADDING as noted by Oleg:
    
    "zap_pid_ns_processes() does disable_pid_allocation()
    and then takes tasklist_lock to kill the whole namespace.
    Given that copy_process() checks PIDNS_HASH_ADDING
    under write_lock(tasklist) they can't race;
    if copy_process() takes this lock first, the new child will
    be killed, otherwise copy_process() can't miss
    the change in ->nr_hashed."
    
    If allocation is disabled, we just return -ENOMEM
    like it's made for such cases in alloc_pid().
    
    v2: Do not move disable_pid_allocation(), do not
    introduce a new variable in copy_process() and simplify
    the patch as suggested by Oleg Nesterov.
    Account the problem with double irq enabling
    found by Eric W. Biederman.
    
    Fixes: c876ad768215 ("pidns: Stop pid allocation when init dies")
    Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
    CC: Andrew Morton <akpm@linux-foundation.org>
    CC: Ingo Molnar <mingo@kernel.org>
    CC: Peter Zijlstra <peterz@infradead.org>
    CC: Oleg Nesterov <oleg@redhat.com>
    CC: Mike Rapoport <rppt@linux.vnet.ibm.com>
    CC: Michal Hocko <mhocko@suse.com>
    CC: Andy Lutomirski <luto@kernel.org>
    CC: "Eric W. Biederman" <ebiederm@xmission.com>
    CC: Andrei Vagin <avagin@openvz.org>
    CC: Cyrill Gorcunov <gorcunov@openvz.org>
    CC: Serge Hallyn <serge@hallyn.com>
    Acked-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ddf9b92f12dd9139789786a4ba1a33dbdf693b8a
Author: Eric W. Biederman <ebiederm@xmission.com>
Date:   Thu May 11 18:21:01 2017 -0500

    pid_ns: Sleep in TASK_INTERRUPTIBLE in zap_pid_ns_processes
    
    commit b9a985db98961ae1ba0be169f19df1c567e4ffe0 upstream.
    
    The code can potentially sleep for an indefinite amount of time in
    zap_pid_ns_processes triggering the hung task timeout, and increasing
    the system average.  This is undesirable.  Sleep with a task state of
    TASK_INTERRUPTIBLE instead of TASK_UNINTERRUPTIBLE to remove these
    undesirable side effects.
    
    Apparently under heavy load this has been allowing Chrome to trigger
    the hung time task timeout error and cause ChromeOS to reboot.
    
    Reported-by: Vovo Yang <vovoy@google.com>
    Reported-by: Guenter Roeck <linux@roeck-us.net>
    Tested-by: Guenter Roeck <linux@roeck-us.net>
    Fixes: 6347e9009104 ("pidns: guarantee that the pidns init will be the last pidns process reaped")
    Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 060d2642682e705a442bf6c4c454b367ad87abaa
Author: Pavel Roskin <plroskin@gmail.com>
Date:   Thu Apr 13 14:54:23 2017 -0700

    iio: dac: ad7303: fix channel description
    
    commit ce420fd4251809b4c3119b3b20c8b13bd8eba150 upstream.
    
    realbits, storagebits and shift should be numbers, not ASCII characters.
    
    Signed-off-by: Pavel Roskin <plroskin@gmail.com>
    Reviewed-by: Lars-Peter Clausen <lars@metafoo.de>
    Signed-off-by: Jonathan Cameron <jic23@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 14323b731072b09a375e7b53aba6d0d68f603fcb
Author: Rob Herring <robh@kernel.org>
Date:   Thu May 4 12:34:30 2017 -0500

    of: fix sparse warning in of_pci_range_parser_one
    
    commit eb3100365791b06242b8bb5c3c2854ba41dabfbc upstream.
    
    sparse gives the following warning for 'pci_space':
    
    ../drivers/of/address.c:266:26: warning: incorrect type in assignment (different base types)
    ../drivers/of/address.c:266:26:    expected unsigned int [unsigned] [usertype] pci_space
    ../drivers/of/address.c:266:26:    got restricted __be32 const [usertype] <noident>
    
    It appears that pci_space is only ever accessed on powerpc, so the endian
    swap is often not needed.
    
    Signed-off-by: Rob Herring <robh@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0009593163655ae403c462740c019b61f800d142
Author: Takashi Iwai <tiwai@suse.de>
Date:   Fri Apr 28 15:00:15 2017 +0200

    proc: Fix unbalanced hard link numbers
    
    commit d66bb1607e2d8d384e53f3d93db5c18483c8c4f7 upstream.
    
    proc_create_mount_point() forgot to increase the parent's nlink, and
    it resulted in unbalanced hard link numbers, e.g. /proc/fs shows one
    less than expected.
    
    Fixes: eb6d38d5427b ("proc: Allow creating permanently empty directories...")
    Reported-by: Tristan Ye <tristan.ye@suse.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d22b933fb8eb0a32918e8b2560b23f2a8bf300bc
Author: Tobias Herzog <t-herzog@gmx.de>
Date:   Thu Mar 30 22:15:10 2017 +0200

    cdc-acm: fix possible invalid access when processing notification
    
    commit 1bb9914e1730417d530de9ed37e59efdc647146b upstream.
    
    Notifications may only be 8 bytes long. Accessing the 9th and
    10th byte of unimplemented/unknown notifications may be insecure.
    Also check the length of known notifications before accessing anything
    behind the 8th byte.
    
    Signed-off-by: Tobias Herzog <t-herzog@gmx.de>
    Acked-by: Oliver Neukum <oneukum@suse.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e4add1cf6b4154804350c3385c6d447cff3570de
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Thu May 11 17:19:48 2017 +1000

    drm/nouveau/tmr: handle races with hw when updating the next alarm time
    
    commit 1b0f84380b10ee97f7d2dd191294de9017e94d1d upstream.
    
    If the time to the next alarm is short enough, we could race with HW and
    end up with an ~4 second delay until it triggers.
    
    Fix this by checking again after we update HW.
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9d78e40f5f41ad1db1849f8d15acbda99d0871b4
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Thu May 11 17:13:29 2017 +1000

    drm/nouveau/tmr: avoid processing completed alarms when adding a new one
    
    commit 330bdf62fe6a6c5b99a647f7bf7157107c9348b3 upstream.
    
    The idea here was to avoid having to "manually" program the HW if there's
    a new earliest alarm.  This was lazy and bad, as it leads to loads of fun
    races between inter-related callers (ie. therm).
    
    Turns out, it's not so difficult after all.  Go figure ;)
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5e07724c28f4e06fe42dd5b58bb6f9dd56510567
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Thu May 11 17:03:05 2017 +1000

    drm/nouveau/tmr: fix corruption of the pending list when rescheduling an alarm
    
    commit 9fc64667ee48c9a25e7dca1a6bcb6906fec5bcc5 upstream.
    
    At least therm/fantog "attempts" to work around this issue, which could
    lead to corruption of the pending alarm list.
    
    Fix it properly by not updating the timestamp without the lock held, or
    trying to add an already pending alarm to the pending alarm list....
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 27f82df2f02688c51d2c1d9f624cc0c5b8a62661
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Thu May 11 16:53:42 2017 +1000

    drm/nouveau/tmr: ack interrupt before processing alarms
    
    commit 3733bd8b407211739e72d051e5f30ad82a52c4bc upstream.
    
    Fixes a race where we can miss an alarm that triggers while we're already
    processing previous alarms.
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3819271d8a5f4c6e0c8f71c339e44e2efbe40710
Author: Ben Skeggs <bskeggs@redhat.com>
Date:   Thu May 11 17:33:39 2017 +1000

    drm/nouveau/therm: remove ineffective workarounds for alarm bugs
    
    commit e4311ee51d1e2676001b2d8fcefd92bdd79aad85 upstream.
    
    These were ineffective due to touching the list without the alarm lock,
    but should no longer be required.
    
    Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7d2d6022807aa5aea752ab9d37350ec9ce700353
Author: Mario Kleiner <mario.kleiner.de@gmail.com>
Date:   Wed Mar 29 22:09:11 2017 +0200

    drm/amdgpu: Make display watermark calculations more accurate
    
    commit d63c277dc672e0c568481af043359420fa9d4736 upstream.
    
    Avoid big roundoff errors in scanline/hactive durations for
    high pixel clocks, especially for >= 500 Mhz, and thereby
    program more accurate display fifo watermarks.
    
    Implemented here for DCE 6,8,10,11.
    Successfully tested on DCE 10 with AMD R9 380 Tonga.
    
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 349666cfbe76f62c12cab8e42be1f04408100754
Author: Mario Kleiner <mario.kleiner.de@gmail.com>
Date:   Wed Mar 29 22:09:12 2017 +0200

    drm/amdgpu: Avoid overflows/divide-by-zero in latency_watermark calculations.
    
    commit e190ed1ea7458e446230de4113cc5d53b8dc4ec8 upstream.
    
    At dot clocks > approx. 250 Mhz, some of these calcs will overflow and
    cause miscalculation of latency watermarks, and for some overflows also
    divide-by-zero driver crash ("divide error: 0000 [#1] PREEMPT SMP" in
    "dce_v10_0_latency_watermark+0x12d/0x190").
    
    This zero-divide happened, e.g., on AMD Tonga Pro under DCE-10,
    on a Displayport panel when trying to set a video mode of 2560x1440
    at 165 Hz vrefresh with a dot clock of 635.540 Mhz.
    
    Refine calculations to avoid the overflows.
    
    Tested for DCE-10 with R9 380 Tonga + ASUS ROG PG279 panel.
    
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 670a7c5db22e9a82822123166c0c12e2c560b9f6
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 13:44:20 2017 +0100

    ath9k_htc: fix NULL-deref at probe
    
    commit ebeb36670ecac36c179b5fb5d5c88ff03ba191ec upstream.
    
    Make sure to check the number of endpoints to avoid dereferencing a
    NULL-pointer or accessing memory beyond the endpoint array should a
    malicious device lack the expected endpoints.
    
    Fixes: 36bcce430657 ("ath9k_htc: Handle storage devices")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8431037ba10b5410d28cc3c86dc7fc32226270b9
Author: Dmitry Tunin <hanipouspilot@gmail.com>
Date:   Wed Mar 8 13:52:07 2017 +0200

    ath9k_htc: Add support of AirTies 1eda:2315 AR9271 device
    
    commit 16ff1fb0e32f76a5d285a6f23b82d21aa52813c6 upstream.
    
    T:  Bus=01 Lev=02 Prnt=02 Port=02 Cnt=01 Dev#=  7 Spd=480 MxCh= 0
    D:  Ver= 2.00 Cls=ff(vend.) Sub=ff Prot=ff MxPS=64 #Cfgs=  1
    P:  Vendor=1eda ProdID=2315 Rev=01.08
    S:  Manufacturer=ATHEROS
    S:  Product=USB2.0 WLAN
    S:  SerialNumber=12345
    C:  #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=500mA
    I:  If#= 0 Alt= 0 #EPs= 6 Cls=ff(vend.) Sub=00 Prot=00 Driver=(none)
    
    Signed-off-by: Dmitry Tunin <hanipouspilot@gmail.com>
    Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c26190b5378d25cfb6c84e06ca90eca5d95638fe
Author: Martin Schwidefsky <schwidefsky@de.ibm.com>
Date:   Tue May 2 13:36:00 2017 +0200

    s390/cputime: fix incorrect system time
    
    commit 07a63cbe8bcb6ba72fb989dcab1ec55ec6c36c7e upstream.
    
    git commit c5328901aa1db134 "[S390] entry[64].S improvements" removed
    the update of the exit_timer lowcore field from the critical section
    cleanup of the .Lsysc_restore/.Lsysc_done and .Lio_restore/.Lio_done
    blocks. If the PSW is updated by the critical section cleanup to point to
    user space again, the interrupt entry code will do a vtime calculation
    after the cleanup completed with an exit_timer value which has *not* been
    updated. Due to this incorrect system time deltas are calculated.
    
    If an interrupt occured with an old PSW between .Lsysc_restore/.Lsysc_done
    or .Lio_restore/.Lio_done update __LC_EXIT_TIMER with the system entry
    time of the interrupt.
    
    Tested-by: Christian Borntraeger <borntraeger@de.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d1f8ea3bd0950c183700a1ee4abd43c1b9aeb91e
Author: Michael Holzheu <holzheu@linux.vnet.ibm.com>
Date:   Thu Mar 23 21:02:54 2017 +0100

    s390/kdump: Add final note
    
    commit dcc00b79fc3d076832f7240de8870f492629b171 upstream.
    
    Since linux v3.14 with commit 38dfac843cb6d7be1 ("vmcore: prevent PT_NOTE
    p_memsz overflow during header update") on s390 we get the following
    message in the kdump kernel:
    
      Warning: Exceeded p_memsz, dropping PT_NOTE entry n_namesz=0x6b6b6b6b,
      n_descsz=0x6b6b6b6b
    
    The reason for this is that we don't create a final zero note in
    the ELF header which the proc/vmcore code uses to find out the end
    of the notes section (see also kernel/kexec_core.c:final_note()).
    
    It still worked on s390 by chance because we (most of the time?) have the
    byte pattern 0x6b6b6b6b after the notes section which also makes the notes
    parsing code stop in update_note_header_size_elf64() because 0x6b6b6b6b is
    interpreded as note size:
    
      if ((real_sz + sz) > max_sz) {
              pr_warn("Warning: Exceeded p_memsz, dropping P ...);
              break;
      }
    
    So fix this and add the missing final note to the ELF header.
    We don't have to adjust the memory size for ELF header ("alloc_size")
    because the new ELF note still fits into the 0x1000 base memory.
    
    Signed-off-by: Michael Holzheu <holzheu@linux.vnet.ibm.com>
    Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit de74aedd71c0b19c50545440b2efa31d3f4fbff5
Author: Richard Cochran <rcochran@linutronix.de>
Date:   Mon Apr 17 10:23:36 2017 +0200

    regulator: tps65023: Fix inverted core enable logic.
    
    commit c90722b54a4f5e21ac59301ed9a6dbaa439bdb16 upstream.
    
    Commit 43530b69d758328d3ffe6ab98fd640463e8e3667 ("regulator: Use
    regmap_read/write(), regmap_update_bits functions directly") intended
    to replace working inline helper functions with standard regmap
    calls.  However, it also inverted the set/clear logic of the "CORE ADJ
    Allowed" bit.  That patch was clearly never tested, since without that
    bit cleared, the core VDCDC1 voltage output does not react to I2C
    configuration changes.
    
    This patch fixes the issue by clearing the bit as in the original,
    correct implementation.  Note for stable back porting that, due to
    subsequent driver churn, this patch will not apply on every kernel
    version.
    
    Fixes: 43530b69d758 ("regulator: Use regmap_read/write(), regmap_update_bits functions directly")
    Signed-off-by: Richard Cochran <rcochran@linutronix.de>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6d380f50113c984d7aa5fe0fe3dcf65844a3ccc6
Author: Wanpeng Li <wanpeng.li@hotmail.com>
Date:   Fri May 19 02:46:56 2017 -0700

    KVM: X86: Fix read out-of-bounds vulnerability in kvm pio emulation
    
    commit cbfc6c9184ce71b52df4b1d82af5afc81a709178 upstream.
    
    Huawei folks reported a read out-of-bounds vulnerability in kvm pio emulation.
    
    - "inb" instruction to access PIT Mod/Command register (ioport 0x43, write only,
      a read should be ignored) in guest can get a random number.
    - "rep insb" instruction to access PIT register port 0x43 can control memcpy()
      in emulator_pio_in_emulated() to copy max 0x400 bytes but only read 1 bytes,
      which will disclose the unimportant kernel memory in host but no crash.
    
    The similar test program below can reproduce the read out-of-bounds vulnerability:
    
    void hexdump(void *mem, unsigned int len)
    {
            unsigned int i, j;
    
            for(i = 0; i < len + ((len % HEXDUMP_COLS) ? (HEXDUMP_COLS - len % HEXDUMP_COLS) : 0); i++)
            {
                    /* print offset */
                    if(i % HEXDUMP_COLS == 0)
                    {
                            printf("0x%06x: ", i);
                    }
    
                    /* print hex data */
                    if(i < len)
                    {
                            printf("%02x ", 0xFF & ((char*)mem)[i]);
                    }
                    else /* end of block, just aligning for ASCII dump */
                    {
                            printf("   ");
                    }
    
                    /* print ASCII dump */
                    if(i % HEXDUMP_COLS == (HEXDUMP_COLS - 1))
                    {
                            for(j = i - (HEXDUMP_COLS - 1); j <= i; j++)
                            {
                                    if(j >= len) /* end of block, not really printing */
                                    {
                                            putchar(' ');
                                    }
                                    else if(isprint(((char*)mem)[j])) /* printable char */
                                    {
                                            putchar(0xFF & ((char*)mem)[j]);
                                    }
                                    else /* other char */
                                    {
                                            putchar('.');
                                    }
                            }
                            putchar('\n');
                    }
            }
    }
    
    int main(void)
    {
            int i;
            if (iopl(3))
            {
                    err(1, "set iopl unsuccessfully\n");
                    return -1;
            }
            static char buf[0x40];
    
            /* test ioport 0x40,0x41,0x42,0x43,0x44,0x45 */
    
            memset(buf, 0xab, sizeof(buf));
    
            asm volatile("push %rdi;");
            asm volatile("mov %0, %%rdi;"::"q"(buf));
    
            asm volatile ("mov $0x40, %rdx;");
            asm volatile ("in %dx,%al;");
            asm volatile ("stosb;");
    
            asm volatile ("mov $0x41, %rdx;");
            asm volatile ("in %dx,%al;");
            asm volatile ("stosb;");
    
            asm volatile ("mov $0x42, %rdx;");
            asm volatile ("in %dx,%al;");
            asm volatile ("stosb;");
    
            asm volatile ("mov $0x43, %rdx;");
            asm volatile ("in %dx,%al;");
            asm volatile ("stosb;");
    
            asm volatile ("mov $0x44, %rdx;");
            asm volatile ("in %dx,%al;");
            asm volatile ("stosb;");
    
            asm volatile ("mov $0x45, %rdx;");
            asm volatile ("in %dx,%al;");
            asm volatile ("stosb;");
    
            asm volatile ("pop %rdi;");
            hexdump(buf, 0x40);
    
            printf("\n");
    
            /* ins port 0x40 */
    
            memset(buf, 0xab, sizeof(buf));
    
            asm volatile("push %rdi;");
            asm volatile("mov %0, %%rdi;"::"q"(buf));
    
            asm volatile ("mov $0x20, %rcx;");
            asm volatile ("mov $0x40, %rdx;");
            asm volatile ("rep insb;");
    
            asm volatile ("pop %rdi;");
            hexdump(buf, 0x40);
    
            printf("\n");
    
            /* ins port 0x43 */
    
            memset(buf, 0xab, sizeof(buf));
    
            asm volatile("push %rdi;");
            asm volatile("mov %0, %%rdi;"::"q"(buf));
    
            asm volatile ("mov $0x20, %rcx;");
            asm volatile ("mov $0x43, %rdx;");
            asm volatile ("rep insb;");
    
            asm volatile ("pop %rdi;");
            hexdump(buf, 0x40);
    
            printf("\n");
            return 0;
    }
    
    The vcpu->arch.pio_data buffer is used by both in/out instrutions emulation
    w/o clear after using which results in some random datas are left over in
    the buffer. Guest reads port 0x43 will be ignored since it is write only,
    however, the function kernel_pio() can't distigush this ignore from successfully
    reads data from device's ioport. There is no new data fill the buffer from
    port 0x43, however, emulator_pio_in_emulated() will copy the stale data in
    the buffer to the guest unconditionally. This patch fixes it by clearing the
    buffer before in instruction emulation to avoid to grant guest the stale data
    in the buffer.
    
    In addition, string I/O is not supported for in kernel device. So there is no
    iteration to read ioport %RCX times for string I/O. The function kernel_pio()
    just reads one round, and then copy the io size * %RCX to the guest unconditionally,
    actually it copies the one round ioport data w/ other random datas which are left
    over in the vcpu->arch.pio_data buffer to the guest. This patch fixes it by
    introducing the string I/O support for in kernel device in order to grant the right
    ioport datas to the guest.
    
    Before the patch:
    
    0x000000: fe 38 93 93 ff ff ab ab .8......
    0x000008: ab ab ab ab ab ab ab ab ........
    0x000010: ab ab ab ab ab ab ab ab ........
    0x000018: ab ab ab ab ab ab ab ab ........
    0x000020: ab ab ab ab ab ab ab ab ........
    0x000028: ab ab ab ab ab ab ab ab ........
    0x000030: ab ab ab ab ab ab ab ab ........
    0x000038: ab ab ab ab ab ab ab ab ........
    
    0x000000: f6 00 00 00 00 00 00 00 ........
    0x000008: 00 00 00 00 00 00 00 00 ........
    0x000010: 00 00 00 00 4d 51 30 30 ....MQ00
    0x000018: 30 30 20 33 20 20 20 20 00 3
    0x000020: ab ab ab ab ab ab ab ab ........
    0x000028: ab ab ab ab ab ab ab ab ........
    0x000030: ab ab ab ab ab ab ab ab ........
    0x000038: ab ab ab ab ab ab ab ab ........
    
    0x000000: f6 00 00 00 00 00 00 00 ........
    0x000008: 00 00 00 00 00 00 00 00 ........
    0x000010: 00 00 00 00 4d 51 30 30 ....MQ00
    0x000018: 30 30 20 33 20 20 20 20 00 3
    0x000020: ab ab ab ab ab ab ab ab ........
    0x000028: ab ab ab ab ab ab ab ab ........
    0x000030: ab ab ab ab ab ab ab ab ........
    0x000038: ab ab ab ab ab ab ab ab ........
    
    After the patch:
    
    0x000000: 1e 02 f8 00 ff ff ab ab ........
    0x000008: ab ab ab ab ab ab ab ab ........
    0x000010: ab ab ab ab ab ab ab ab ........
    0x000018: ab ab ab ab ab ab ab ab ........
    0x000020: ab ab ab ab ab ab ab ab ........
    0x000028: ab ab ab ab ab ab ab ab ........
    0x000030: ab ab ab ab ab ab ab ab ........
    0x000038: ab ab ab ab ab ab ab ab ........
    
    0x000000: d2 e2 d2 df d2 db d2 d7 ........
    0x000008: d2 d3 d2 cf d2 cb d2 c7 ........
    0x000010: d2 c4 d2 c0 d2 bc d2 b8 ........
    0x000018: d2 b4 d2 b0 d2 ac d2 a8 ........
    0x000020: ab ab ab ab ab ab ab ab ........
    0x000028: ab ab ab ab ab ab ab ab ........
    0x000030: ab ab ab ab ab ab ab ab ........
    0x000038: ab ab ab ab ab ab ab ab ........
    
    0x000000: 00 00 00 00 00 00 00 00 ........
    0x000008: 00 00 00 00 00 00 00 00 ........
    0x000010: 00 00 00 00 00 00 00 00 ........
    0x000018: 00 00 00 00 00 00 00 00 ........
    0x000020: ab ab ab ab ab ab ab ab ........
    0x000028: ab ab ab ab ab ab ab ab ........
    0x000030: ab ab ab ab ab ab ab ab ........
    0x000038: ab ab ab ab ab ab ab ab ........
    
    Reported-by: Moguofang <moguofang@huawei.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Cc: Moguofang <moguofang@huawei.com>
    Signed-off-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 e9c9e7588ef5a7dac583eb54dccef4f801b68adf
Author: Wanpeng Li <wanpeng.li@hotmail.com>
Date:   Thu May 11 02:58:55 2017 -0700

    KVM: x86: Fix load damaged SSEx MXCSR register
    
    commit a575813bfe4bc15aba511a5e91e61d242bff8b9d upstream.
    
    Reported by syzkaller:
    
       BUG: unable to handle kernel paging request at ffffffffc07f6a2e
       IP: report_bug+0x94/0x120
       PGD 348e12067
       P4D 348e12067
       PUD 348e14067
       PMD 3cbd84067
       PTE 80000003f7e87161
    
       Oops: 0003 [#1] SMP
       CPU: 2 PID: 7091 Comm: kvm_load_guest_ Tainted: G           OE   4.11.0+ #8
       task: ffff92fdfb525400 task.stack: ffffbda6c3d04000
       RIP: 0010:report_bug+0x94/0x120
       RSP: 0018:ffffbda6c3d07b20 EFLAGS: 00010202
        do_trap+0x156/0x170
        do_error_trap+0xa3/0x170
        ? kvm_load_guest_fpu.part.175+0x12a/0x170 [kvm]
        ? mark_held_locks+0x79/0xa0
        ? retint_kernel+0x10/0x10
        ? trace_hardirqs_off_thunk+0x1a/0x1c
        do_invalid_op+0x20/0x30
        invalid_op+0x1e/0x30
       RIP: 0010:kvm_load_guest_fpu.part.175+0x12a/0x170 [kvm]
        ? kvm_load_guest_fpu.part.175+0x1c/0x170 [kvm]
        kvm_arch_vcpu_ioctl_run+0xed6/0x1b70 [kvm]
        kvm_vcpu_ioctl+0x384/0x780 [kvm]
        ? kvm_vcpu_ioctl+0x384/0x780 [kvm]
        ? sched_clock+0x13/0x20
        ? __do_page_fault+0x2a0/0x550
        do_vfs_ioctl+0xa4/0x700
        ? up_read+0x1f/0x40
        ? __do_page_fault+0x2a0/0x550
        SyS_ioctl+0x79/0x90
        entry_SYSCALL_64_fastpath+0x23/0xc2
    
    SDM mentioned that "The MXCSR has several reserved bits, and attempting to write
    a 1 to any of these bits will cause a general-protection exception(#GP) to be
    generated". The syzkaller forks' testcase overrides xsave area w/ random values
    and steps on the reserved bits of MXCSR register. The damaged MXCSR register
    values of guest will be restored to SSEx MXCSR register before vmentry. This
    patch fixes it by catching userspace override MXCSR register reserved bits w/
    random values and bails out immediately.
    
    Reported-by: Andrey Konovalov <andreyknvl@google.com>
    Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Paolo Bonzini <pbonzini@redhat.com>
    Cc: Radim Krčmář <rkrcmar@redhat.com>
    Signed-off-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 08e589a97d3884820ccbb96fe58af36ae544e31e
Author: Daniel Glöckner <dg@emlix.com>
Date:   Fri Feb 24 15:05:14 2017 +0100

    ima: accept previously set IMA_NEW_FILE
    
    commit 1ac202e978e18f045006d75bd549612620c6ec3a upstream.
    
    Modifying the attributes of a file makes ima_inode_post_setattr reset
    the IMA cache flags. So if the file, which has just been created,
    is opened a second time before the first file descriptor is closed,
    verification fails since the security.ima xattr has not been written
    yet. We therefore have to look at the IMA_NEW_FILE even if the file
    already existed.
    
    With this patch there should no longer be an error when cat tries to
    open testfile:
    
    $ rm -f testfile
    $ ( echo test >&3 ; touch testfile ; cat testfile ) 3>testfile
    
    A file being new is no reason to accept that it is missing a digital
    signature demanded by the policy.
    
    Signed-off-by: Daniel Glöckner <dg@emlix.com>
    Signed-off-by: Mimi Zohar <zohar@linux.vnet.ibm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0c99c8a22cc4ce06cb6af3cf9113fa93d1408470
Author: Brian Norris <briannorris@chromium.org>
Date:   Fri Apr 14 14:51:17 2017 -0700

    mwifiex: pcie: fix cmd_buf use-after-free in remove/reset
    
    commit 3c8cb9ad032d737b874e402c59eb51e3c991a144 upstream.
    
    Command buffers (skb's) are allocated by the main driver, and freed upon
    the last use. That last use is often in mwifiex_free_cmd_buffer(). In
    the meantime, if the command buffer gets used by the PCI driver, we map
    it as DMA-able, and store the mapping information in the 'cb' memory.
    
    However, if a command was in-flight when resetting the device (and
    therefore was still mapped), we don't get a chance to unmap this memory
    until after the core has cleaned up its command handling.
    
    Let's keep a refcount within the PCI driver, so we ensure the memory
    only gets freed after we've finished unmapping it.
    
    Noticed by KASAN when forcing a reset via:
    
      echo 1 > /sys/bus/pci/.../reset
    
    The same code path can presumably be exercised in remove() and
    shutdown().
    
    [  205.390377] mwifiex_pcie 0000:01:00.0: info: shutdown mwifiex...
    [  205.400393] ==================================================================
    [  205.407719] BUG: KASAN: use-after-free in mwifiex_unmap_pci_memory.isra.14+0x4c/0x100 [mwifiex_pcie] at addr ffffffc0ad471b28
    [  205.419040] Read of size 16 by task bash/1913
    [  205.423421] =============================================================================
    [  205.431625] BUG skbuff_head_cache (Tainted: G    B          ): kasan: bad access detected
    [  205.439815] -----------------------------------------------------------------------------
    [  205.439815]
    [  205.449534] INFO: Allocated in __build_skb+0x48/0x114 age=1311 cpu=4 pid=1913
    [  205.456709]  alloc_debug_processing+0x124/0x178
    [  205.461282]  ___slab_alloc.constprop.58+0x528/0x608
    [  205.466196]  __slab_alloc.isra.54.constprop.57+0x44/0x54
    [  205.471542]  kmem_cache_alloc+0xcc/0x278
    [  205.475497]  __build_skb+0x48/0x114
    [  205.479019]  __netdev_alloc_skb+0xe0/0x170
    [  205.483244]  mwifiex_alloc_cmd_buffer+0x68/0xdc [mwifiex]
    [  205.488759]  mwifiex_init_fw+0x40/0x6cc [mwifiex]
    [  205.493584]  _mwifiex_fw_dpc+0x158/0x520 [mwifiex]
    [  205.498491]  mwifiex_reinit_sw+0x2c4/0x398 [mwifiex]
    [  205.503510]  mwifiex_pcie_reset_notify+0x114/0x15c [mwifiex_pcie]
    [  205.509643]  pci_reset_notify+0x5c/0x6c
    [  205.513519]  pci_reset_function+0x6c/0x7c
    [  205.517567]  reset_store+0x68/0x98
    [  205.521003]  dev_attr_store+0x54/0x60
    [  205.524705]  sysfs_kf_write+0x9c/0xb0
    [  205.528413] INFO: Freed in __kfree_skb+0xb0/0xbc age=131 cpu=4 pid=1913
    [  205.535064]  free_debug_processing+0x264/0x370
    [  205.539550]  __slab_free+0x84/0x40c
    [  205.543075]  kmem_cache_free+0x1c8/0x2a0
    [  205.547030]  __kfree_skb+0xb0/0xbc
    [  205.550465]  consume_skb+0x164/0x178
    [  205.554079]  __dev_kfree_skb_any+0x58/0x64
    [  205.558304]  mwifiex_free_cmd_buffer+0xa0/0x158 [mwifiex]
    [  205.563817]  mwifiex_shutdown_drv+0x578/0x5c4 [mwifiex]
    [  205.569164]  mwifiex_shutdown_sw+0x178/0x310 [mwifiex]
    [  205.574353]  mwifiex_pcie_reset_notify+0xd4/0x15c [mwifiex_pcie]
    [  205.580398]  pci_reset_notify+0x5c/0x6c
    [  205.584274]  pci_dev_save_and_disable+0x24/0x6c
    [  205.588837]  pci_reset_function+0x30/0x7c
    [  205.592885]  reset_store+0x68/0x98
    [  205.596324]  dev_attr_store+0x54/0x60
    [  205.600017]  sysfs_kf_write+0x9c/0xb0
    ...
    [  205.800488] Call trace:
    [  205.802980] [<ffffffc00020a69c>] dump_backtrace+0x0/0x190
    [  205.808415] [<ffffffc00020a96c>] show_stack+0x20/0x28
    [  205.813506] [<ffffffc0005d020c>] dump_stack+0xa4/0xcc
    [  205.818598] [<ffffffc0003be44c>] print_trailer+0x158/0x168
    [  205.824120] [<ffffffc0003be5f0>] object_err+0x4c/0x5c
    [  205.829210] [<ffffffc0003c45bc>] kasan_report+0x334/0x500
    [  205.834641] [<ffffffc0003c3994>] check_memory_region+0x20/0x14c
    [  205.840593] [<ffffffc0003c3b14>] __asan_loadN+0x14/0x1c
    [  205.845879] [<ffffffbffc46171c>] mwifiex_unmap_pci_memory.isra.14+0x4c/0x100 [mwifiex_pcie]
    [  205.854282] [<ffffffbffc461864>] mwifiex_pcie_delete_cmdrsp_buf+0x94/0xa8 [mwifiex_pcie]
    [  205.862421] [<ffffffbffc462028>] mwifiex_pcie_free_buffers+0x11c/0x158 [mwifiex_pcie]
    [  205.870302] [<ffffffbffc4620d4>] mwifiex_pcie_down_dev+0x70/0x80 [mwifiex_pcie]
    [  205.877736] [<ffffffbffc1397a8>] mwifiex_shutdown_sw+0x190/0x310 [mwifiex]
    [  205.884658] [<ffffffbffc4606b4>] mwifiex_pcie_reset_notify+0xd4/0x15c [mwifiex_pcie]
    [  205.892446] [<ffffffc000635f54>] pci_reset_notify+0x5c/0x6c
    [  205.898048] [<ffffffc00063a044>] pci_dev_save_and_disable+0x24/0x6c
    [  205.904350] [<ffffffc00063cf0c>] pci_reset_function+0x30/0x7c
    [  205.910134] [<ffffffc000641118>] reset_store+0x68/0x98
    [  205.915312] [<ffffffc000771588>] dev_attr_store+0x54/0x60
    [  205.920750] [<ffffffc00046f53c>] sysfs_kf_write+0x9c/0xb0
    [  205.926182] [<ffffffc00046dfb0>] kernfs_fop_write+0x184/0x1f8
    [  205.931963] [<ffffffc0003d64f4>] __vfs_write+0x6c/0x17c
    [  205.937221] [<ffffffc0003d7164>] vfs_write+0xf0/0x1c4
    [  205.942310] [<ffffffc0003d7da0>] SyS_write+0x78/0xd8
    [  205.947312] [<ffffffc000204634>] el0_svc_naked+0x24/0x28
    ...
    [  205.998268] ==================================================================
    
    This bug has been around in different forms for a while. It was sort of
    noticed in commit 955ab095c51a ("mwifiex: Do not kfree cmd buf while
    unregistering PCIe"), but it just fixed the double-free, without
    acknowledging the potential for use-after-free.
    
    Fixes: fc3314609047 ("mwifiex: use pci_alloc/free_consistent APIs for PCIe")
    Signed-off-by: Brian Norris <briannorris@chromium.org>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e367d1b00f813c70894b7e560618f78715be88ae
Author: Larry Finger <Larry.Finger@lwfinger.net>
Date:   Sun Apr 16 19:32:07 2017 -0500

    rtlwifi: rtl8821ae: setup 8812ae RFE according to device type
    
    commit 46cfa2148e7371c537efff1a1c693e58f523089d upstream.
    
    Current channel switch implementation sets 8812ae RFE reg value assuming
    that device always has type 2.
    
    Extend possible RFE types set and write corresponding reg values.
    
    Source for new code is
    http://dlcdnet.asus.com/pub/ASUS/wireless/PCE-AC51/DR_PCE_AC51_20232801152016.zip
    
    Signed-off-by: Maxim Samoylov <max7255@gmail.com>
    Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
    Cc: Yan-Hsuan Chuang <yhchuang@realtek.com>
    Cc: Pkshih <pkshih@realtek.com>
    Cc: Birming Chiu <birming@realtek.com>
    Cc: Shaofu <shaofu@realtek.com>
    Cc: Steven Ting <steventing@realtek.com>
    Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c5ff397f075e124e15d0d78054986ec24c769fb0
Author: Dennis Yang <dennisyang@qnap.com>
Date:   Wed Mar 29 15:46:13 2017 +0800

    md: update slab_cache before releasing new stripes when stripes resizing
    
    commit 583da48e388f472e8818d9bb60ef6a1d40ee9f9d upstream.
    
    When growing raid5 device on machine with small memory, there is chance that
    mdadm will be killed and the following bug report can be observed. The same
    bug could also be reproduced in linux-4.10.6.
    
    [57600.075774] BUG: unable to handle kernel NULL pointer dereference at           (null)
    [57600.083796] IP: [<ffffffff81a6aa87>] _raw_spin_lock+0x7/0x20
    [57600.110378] PGD 421cf067 PUD 4442d067 PMD 0
    [57600.114678] Oops: 0002 [#1] SMP
    [57600.180799] CPU: 1 PID: 25990 Comm: mdadm Tainted: P           O    4.2.8 #1
    [57600.187849] Hardware name: To be filled by O.E.M. To be filled by O.E.M./MAHOBAY, BIOS QV05AR66 03/06/2013
    [57600.197490] task: ffff880044e47240 ti: ffff880043070000 task.ti: ffff880043070000
    [57600.204963] RIP: 0010:[<ffffffff81a6aa87>]  [<ffffffff81a6aa87>] _raw_spin_lock+0x7/0x20
    [57600.213057] RSP: 0018:ffff880043073810  EFLAGS: 00010046
    [57600.218359] RAX: 0000000000000000 RBX: 000000000000000c RCX: ffff88011e296dd0
    [57600.225486] RDX: 0000000000000001 RSI: ffffe8ffffcb46c0 RDI: 0000000000000000
    [57600.232613] RBP: ffff880043073878 R08: ffff88011e5f8170 R09: 0000000000000282
    [57600.239739] R10: 0000000000000005 R11: 28f5c28f5c28f5c3 R12: ffff880043073838
    [57600.246872] R13: ffffe8ffffcb46c0 R14: 0000000000000000 R15: ffff8800b9706a00
    [57600.253999] FS:  00007f576106c700(0000) GS:ffff88011e280000(0000) knlGS:0000000000000000
    [57600.262078] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [57600.267817] CR2: 0000000000000000 CR3: 00000000428fe000 CR4: 00000000001406e0
    [57600.274942] Stack:
    [57600.276949]  ffffffff8114ee35 ffff880043073868 0000000000000282 000000000000eb3f
    [57600.284383]  ffffffff81119043 ffff880043073838 ffff880043073838 ffff88003e197b98
    [57600.291820]  ffffe8ffffcb46c0 ffff88003e197360 0000000000000286 ffff880043073968
    [57600.299254] Call Trace:
    [57600.301698]  [<ffffffff8114ee35>] ? cache_flusharray+0x35/0xe0
    [57600.307523]  [<ffffffff81119043>] ? __page_cache_release+0x23/0x110
    [57600.313779]  [<ffffffff8114eb53>] kmem_cache_free+0x63/0xc0
    [57600.319344]  [<ffffffff81579942>] drop_one_stripe+0x62/0x90
    [57600.324915]  [<ffffffff81579b5b>] raid5_cache_scan+0x8b/0xb0
    [57600.330563]  [<ffffffff8111b98a>] shrink_slab.part.36+0x19a/0x250
    [57600.336650]  [<ffffffff8111e38c>] shrink_zone+0x23c/0x250
    [57600.342039]  [<ffffffff8111e4f3>] do_try_to_free_pages+0x153/0x420
    [57600.348210]  [<ffffffff8111e851>] try_to_free_pages+0x91/0xa0
    [57600.353959]  [<ffffffff811145b1>] __alloc_pages_nodemask+0x4d1/0x8b0
    [57600.360303]  [<ffffffff8157a30b>] check_reshape+0x62b/0x770
    [57600.365866]  [<ffffffff8157a4a5>] raid5_check_reshape+0x55/0xa0
    [57600.371778]  [<ffffffff81583df7>] update_raid_disks+0xc7/0x110
    [57600.377604]  [<ffffffff81592b73>] md_ioctl+0xd83/0x1b10
    [57600.382827]  [<ffffffff81385380>] blkdev_ioctl+0x170/0x690
    [57600.388307]  [<ffffffff81195238>] block_ioctl+0x38/0x40
    [57600.393525]  [<ffffffff811731c5>] do_vfs_ioctl+0x2b5/0x480
    [57600.399010]  [<ffffffff8115e07b>] ? vfs_write+0x14b/0x1f0
    [57600.404400]  [<ffffffff811733cc>] SyS_ioctl+0x3c/0x70
    [57600.409447]  [<ffffffff81a6ad97>] entry_SYSCALL_64_fastpath+0x12/0x6a
    [57600.415875] Code: 00 00 00 00 55 48 89 e5 8b 07 85 c0 74 04 31 c0 5d c3 ba 01 00 00 00 f0 0f b1 17 85 c0 75 ef b0 01 5d c3 90 31 c0 ba 01 00 00 00 <f0> 0f b1 17 85 c0 75 01 c3 55 89 c6 48 89 e5 e8 85 d1 63 ff 5d
    [57600.435460] RIP  [<ffffffff81a6aa87>] _raw_spin_lock+0x7/0x20
    [57600.441208]  RSP <ffff880043073810>
    [57600.444690] CR2: 0000000000000000
    [57600.448000] ---[ end trace cbc6b5cc4bf9831d ]---
    
    The problem is that resize_stripes() releases new stripe_heads before assigning new
    slab cache to conf->slab_cache. If the shrinker function raid5_cache_scan() gets called
    after resize_stripes() starting releasing new stripes but right before new slab cache
    being assigned, it is possible that these new stripe_heads will be freed with the old
    slab_cache which was already been destoryed and that triggers this bug.
    
    Signed-off-by: Dennis Yang <dennisyang@qnap.com>
    Fixes: edbe83ab4c27 ("md/raid5: allow the stripe_cache to grow and shrink.")
    Reviewed-by: NeilBrown <neilb@suse.com>
    Signed-off-by: Shaohua Li <shli@fb.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d3df9403c0758f35538bb172578d1c6dcf552622
Author: Joe Thornber <ejt@redhat.com>
Date:   Mon May 15 09:45:40 2017 -0400

    dm space map disk: fix some book keeping in the disk space map
    
    commit 0377a07c7a035e0d033cd8b29f0cb15244c0916a upstream.
    
    When decrementing the reference count for a block, the free count wasn't
    being updated if the reference count went to zero.
    
    Signed-off-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1dc9fb3cc12efb2807549d51a5574b22034abfe7
Author: Joe Thornber <ejt@redhat.com>
Date:   Mon May 15 09:43:05 2017 -0400

    dm thin metadata: call precommit before saving the roots
    
    commit 91bcdb92d39711d1adb40c26b653b7978d93eb98 upstream.
    
    These calls were the wrong way round in __write_initial_superblock.
    
    Signed-off-by: Joe Thornber <ejt@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ea4889d6f39ddeb4f0ac87fc935a794db94b7895
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Sun Apr 30 17:32:28 2017 -0400

    dm bufio: make the parameter "retain_bytes" unsigned long
    
    commit 13840d38016203f0095cd547b90352812d24b787 upstream.
    
    Change the type of the parameter "retain_bytes" from unsigned to
    unsigned long, so that on 64-bit machines the user can set more than
    4GiB of data to be retained.
    
    Also, change the type of the variable "count" in the function
    "__evict_old_buffers" to unsigned long.  The assignment
    "count = c->n_buffers[LIST_CLEAN] + c->n_buffers[LIST_DIRTY];"
    could result in unsigned long to unsigned overflow and that could result
    in buffers not being freed when they should.
    
    While at it, avoid division in get_retain_buffers().  Division is slow,
    we can change it to shift because we have precalculated the log2 of
    block size.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4a9631ffe5205583800d8bdf9735381f0a09324d
Author: Mike Snitzer <snitzer@redhat.com>
Date:   Fri May 5 14:40:13 2017 -0400

    dm cache metadata: fail operations if fail_io mode has been established
    
    commit 10add84e276432d9dd8044679a1028dd4084117e upstream.
    
    Otherwise it is possible to trigger crashes due to the metadata being
    inaccessible yet these methods don't safely account for that possibility
    without these checks.
    
    Reported-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8d8fb01a62f22b7430469879ae555a76e544ac4a
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Sun Apr 30 17:34:53 2017 -0400

    dm bufio: check new buffer allocation watermark every 30 seconds
    
    commit 390020ad2af9ca04844c4f3b1f299ad8746d84c8 upstream.
    
    dm-bufio checks a watermark when it allocates a new buffer in
    __bufio_new().  However, it doesn't check the watermark when the user
    changes /sys/module/dm_bufio/parameters/max_cache_size_bytes.
    
    This may result in a problem - if the watermark is high enough so that
    all possible buffers are allocated and if the user lowers the value of
    "max_cache_size_bytes", the watermark will never be checked against the
    new value because no new buffer would be allocated.
    
    To fix this, change __evict_old_buffers() so that it checks the
    watermark.  __evict_old_buffers() is called every 30 seconds, so if the
    user reduces "max_cache_size_bytes", dm-bufio will react to this change
    within 30 seconds and decrease memory consumption.
    
    Depends-on: 1b0fb5a5b2 ("dm bufio: avoid a possible ABBA deadlock")
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5d1df36c9d2c90cfebdc74b8d8f4121ddab07022
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Sun Apr 30 17:33:26 2017 -0400

    dm bufio: avoid a possible ABBA deadlock
    
    commit 1b0fb5a5b2dc0dddcfa575060441a7176ba7ac37 upstream.
    
    __get_memory_limit() tests if dm_bufio_cache_size changed and calls
    __cache_size_refresh() if it did.  It takes dm_bufio_clients_lock while
    it already holds the client lock.  However, lock ordering is violated
    because in cleanup_old_buffers() dm_bufio_clients_lock is taken before
    the client lock.
    
    This results in a possible deadlock and lockdep engine warning.
    
    Fix this deadlock by changing mutex_lock() to mutex_trylock().  If the
    lock can't be taken, it will be re-checked next time when a new buffer
    is allocated.
    
    Also add "unlikely" to the if condition, so that the optimizer assumes
    that the condition is false.
    
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4df4bf1df91680ef4f0c718a57a8371b56895347
Author: Mikulas Patocka <mpatocka@redhat.com>
Date:   Tue Mar 28 12:53:39 2017 -0400

    dm raid: select the Kconfig option CONFIG_MD_RAID0
    
    commit 7b81ef8b14f80033e4a4168d199a0f5fd79b9426 upstream.
    
    Since the commit 0cf4503174c1 ("dm raid: add support for the MD RAID0
    personality"), the dm-raid subsystem can activate a RAID-0 array.
    Therefore, add MD_RAID0 to the dependencies of DM_RAID, so that MD_RAID0
    will be selected when DM_RAID is selected.
    
    Fixes: 0cf4503174c1 ("dm raid: add support for the MD RAID0 personality")
    Signed-off-by: Mikulas Patocka <mpatocka@redhat.com>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fa499b361bd4771fed7b94c367edf102e3c078a6
Author: Vinothkumar Raja <vinraja@cs.stonybrook.edu>
Date:   Thu Apr 6 22:09:38 2017 -0400

    dm btree: fix for dm_btree_find_lowest_key()
    
    commit 7d1fedb6e96a960aa91e4ff70714c3fb09195a5a upstream.
    
    dm_btree_find_lowest_key() is giving incorrect results.  find_key()
    traverses the btree correctly for finding the highest key, but there is
    an error in the way it traverses the btree for retrieving the lowest
    key.  dm_btree_find_lowest_key() fetches the first key of the rightmost
    block of the btree instead of fetching the first key from the leftmost
    block.
    
    Fix this by conditionally passing the correct parameter to value64()
    based on the @find_highest flag.
    
    Signed-off-by: Erez Zadok <ezk@fsl.cs.sunysb.edu>
    Signed-off-by: Vinothkumar Raja <vinraja@cs.stonybrook.edu>
    Signed-off-by: Nidhi Panpalia <npanpalia@cs.stonybrook.edu>
    Signed-off-by: Mike Snitzer <snitzer@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c04397351fe577a4b4d046524118c38d87002e81
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Fri Apr 28 11:20:01 2017 +0200

    infiniband: call ipv6 route lookup via the stub interface
    
    commit eea40b8f624f25cbc02d55f2d93203f60cee9341 upstream.
    
    The infiniband address handle can be triggered to resolve an ipv6
    address in response to MAD packets, regardless of the ipv6
    module being disabled via the kernel command line argument.
    
    That will cause a call into the ipv6 routing code, which is not
    initialized, and a conseguent oops.
    
    This commit addresses the above issue replacing the direct lookup
    call with an indirect one via the ipv6 stub, which is properly
    initialized according to the ipv6 status (e.g. if ipv6 is
    disabled, the routing lookup fails gracefully)
    
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Doug Ledford <dledford@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 63450e38efe3ce80e563827d5b3f59b3f7a12ecf
Author: Jerry Snitselaar <jsnitsel@redhat.com>
Date:   Fri Mar 10 17:46:04 2017 -0700

    tpm_crb: check for bad response size
    
    commit 8569defde8057258835c51ce01a33de82e14b148 upstream.
    
    Make sure size of response buffer is at least 6 bytes, or
    we will underflow and pass large size_t to memcpy_fromio().
    This was encountered while testing earlier version of
    locality patchset.
    
    Fixes: 30fc8d138e912 ("tpm: TPM 2.0 CRB Interface")
    Signed-off-by: Jerry Snitselaar <jsnitsel@redhat.com>
    Reviewed-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 025e33ee387a398a51588834c3172bedf4f9c485
Author: Marc Dietrich <marvin24@gmx.de>
Date:   Fri Dec 9 10:20:38 2016 +0100

    ARM: tegra: paz00: Mark panel regulator as enabled on boot
    
    commit 0c18927f51f4d390abdcf385bff5f995407ee732 upstream.
    
    Current U-Boot enables the display already. Marking the regulator as
    enabled on boot fixes sporadic panel initialization failures.
    
    Signed-off-by: Marc Dietrich <marvin24@gmx.de>
    Tested-by: Misha Komarovskiy <zombah@gmail.com>
    Signed-off-by: Thierry Reding <treding@nvidia.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b171ce6c5e4106bd54e7b9108da58cdabb0cf111
Author: Vamsi Krishna Samavedam <vskrishn@codeaurora.org>
Date:   Tue May 16 14:38:08 2017 +0200

    USB: core: replace %p with %pK
    
    commit 2f964780c03b73de269b08d12aff96a9618d13f3 upstream.
    
    Format specifier %p can leak kernel addresses while not valuing the
    kptr_restrict system settings. When kptr_restrict is set to (1), kernel
    pointers printed using the %pK format specifier will be replaced with
    Zeros. Debugging Note : &pK prints only Zeros as address. If you need
    actual address information, write 0 to kptr_restrict.
    
    echo 0 > /proc/sys/kernel/kptr_restrict
    
    [Found by poking around in a random vendor kernel tree, it would be nice
    if someone would actually send these types of patches upstream - gkh]
    
    Signed-off-by: Vamsi Krishna Samavedam <vskrishn@codeaurora.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit cda5c7e625cefed46311cb0b37816fb2ff42a8ee
Author: Willy Tarreau <w@1wt.eu>
Date:   Tue May 16 19:18:55 2017 +0200

    char: lp: fix possible integer overflow in lp_setup()
    
    commit 3e21f4af170bebf47c187c1ff8bf155583c9f3b1 upstream.
    
    The lp_setup() code doesn't apply any bounds checking when passing
    "lp=none", and only in this case, resulting in an overflow of the
    parport_nr[] array. All versions in Git history are affected.
    
    Reported-By: Roee Hay <roee.hay@hcl.com>
    Cc: Ben Hutchings <ben@decadent.org.uk>
    Signed-off-by: Willy Tarreau <w@1wt.eu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ea99c2248495b60a1f1075b670f426875cc8e189
Author: Johan Hovold <johan@kernel.org>
Date:   Mon Mar 13 13:49:45 2017 +0100

    watchdog: pcwd_usb: fix NULL-deref at probe
    
    commit 46c319b848268dab3f0e7c4a5b6e9146d3bca8a4 upstream.
    
    Make sure to check the number of endpoints to avoid dereferencing a
    NULL-pointer should a malicious device lack endpoints.
    
    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Reviewed-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Wim Van Sebroeck <wim@iguana.be>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ca157f64dc9c05c2c48dfa7985eb600531ff35f3
Author: Alan Stern <stern@rowland.harvard.edu>
Date:   Tue May 16 11:47:29 2017 -0400

    USB: ene_usb6250: fix DMA to the stack
    
    commit 628c2893d44876ddd11602400c70606ade62e129 upstream.
    
    The ene_usb6250 sub-driver in usb-storage does USB I/O to buffers on
    the stack, which doesn't work with vmapped stacks.  This patch fixes
    the problem by allocating a separate 512-byte buffer at probe time and
    using it for all of the offending I/O operations.
    
    Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
    Reported-and-tested-by: Andreas Hartmann <andihartmann@01019freenet.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b572de59915e396b08feda897c7128d4e4d97e83
Author: Maksim Salau <maksim.salau@gmail.com>
Date:   Sat May 13 23:49:26 2017 +0300

    usb: misc: legousbtower: Fix memory leak
    
    commit 0bd193d62b4270a2a7a09da43ad1034c7ca5b3d3 upstream.
    
    get_version_reply is not freed if function returns with success.
    
    Fixes: 942a48730faf ("usb: misc: legousbtower: Fix buffers on stack")
    Reported-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
    Signed-off-by: Maksim Salau <maksim.salau@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8a7f9dfbd4aeb35987e0eb3d43de9e75616e8688
Author: Maksim Salau <maksim.salau@gmail.com>
Date:   Tue Apr 25 22:49:21 2017 +0300

    usb: misc: legousbtower: Fix buffers on stack
    
    commit 942a48730faf149ccbf3e12ac718aee120bb3529 upstream.
    
    Allocate buffers on HEAP instead of STACK for local structures
    that are to be received using usb_control_msg().
    
    Signed-off-by: Maksim Salau <maksim.salau@gmail.com>
    Tested-by: Alfredo Rafael Vicente Boix <alviboi@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>