commit 267ef1d332845c1d361ff3fd1d346613a12db773
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Feb 28 10:19:45 2018 +0100

    Linux 4.14.23

commit ac3d021048be9edb825f0794da5b42f04fefecef
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Jan 2 12:47:19 2018 +0100

    microblaze: fix endian handling
    
    commit 71e7673dadfdae0605d4c1f66ecb4b045c79fe0f upstream.
    
    Building an allmodconfig kernel fails horribly because of
    endian mismatch. It turns out that the -mlittle-endian
    switch was not honored at all as we were using the wrong
    Kconfig symbol and failing to apply CPUFLAGS to the CFLAGS.
    Finally, the linker flags did not get set right.
    
    This addresses all three of those issues, which now lets
    me build both big-endian and little-endian kernels for
    testing.
    
    Fixes: 428dbf156cc5 ("arch: change default endian for microblaze")
    Fixes: 206d3642d8ee ("arch/microblaze: add choice for endianness and update Makefile")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Michal Simek <michal.simek@xilinx.com>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9ce9f4e4a543b457551728764e2d297cd40dee53
Author: Geert Uytterhoeven <geert@linux-m68k.org>
Date:   Wed Nov 15 17:31:18 2017 -0800

    m32r: fix endianness constraints
    
    commit c95f121142a41c951fd62683a5574f2a7b37c573 upstream.
    
    The m32r Kconfig provides both CPU_BIG_ENDIAN and CPU_LITTLE_ENDIAN
    configuration options.  As they are user-selectable and independent,
    this allows invalid configurations:
    
      - All m32r defconfigs build a big endian kernel, but CPU_BIG_ENDIAN is
        not set, causing compiler warnings like:
    
            include/linux/byteorder/big_endian.h:7:2: warning: #warning inconsistent configuration, needs CONFIG_CPU_BIG_ENDIAN [-Wcpp]
             #warning inconsistent configuration, needs CONFIG_CPU_BIG_ENDIAN
              ^
    
      - Since commit 5bdfca6435b82944 ("m32r: define CPU_BIG_ENDIAN"),
        building an allmodconfig or allyesconfig enables both
        CONFIG_CPU_BIG_ENDIAN and CONFIG_CPU_LITTLE_ENDIAN.
        While this did get rid of the warning above, both options are
        obviously mutually exclusive.
    
    Fix this by making only CPU_LITTLE_ENDIAN configurable by the user, as
    before, and by making sure exactly one of CPU_BIG_ENDIAN and
    CPU_LITTLE_ENDIAN is always enabled.
    
    Link: http://lkml.kernel.org/r/1509361505-18150-1-git-send-email-geert@linux-m68k.org
    Fixes: 5bdfca6435b82944 ("m32r: define CPU_BIG_ENDIAN")
    Signed-off-by: Geert Uytterhoeven <geert@linux-m68k.org>
    Cc: Sudip Mukherjee <sudipm.mukherjee@gmail.com>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Guenter Roeck <linux@roeck-us.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 821e97898016456bc7b42063ac91c0063f88a8dd
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue Feb 13 09:01:54 2018 +0000

    drm/i915/breadcrumbs: Ignore unsubmitted signalers
    
    commit 117172c8f9d40ba1de8cb35c6e614422faa03330 upstream.
    
    When a request is preempted, it is unsubmitted from the HW queue and
    removed from the active list of breadcrumbs. In the process, this
    however triggers the signaler and it may see the clear rbtree with the
    old, and still valid, seqno, or it may match the cleared seqno with the
    now zero rq->global_seqno. This confuses the signaler into action and
    signaling the fence.
    
    Fixes: d6a2289d9d6b ("drm/i915: Remove the preempted request from the execution queue")
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Tvrtko Ursulin <tvrtko.ursulin@linux.intel.com>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v4.12+
    Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180206094633.30181-1-chris@chris-wilson.co.uk
    (cherry picked from commit fd10e2ce9905030d922e179a8047a4d50daffd8e)
    Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180213090154.17373-1-chris@chris-wilson.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1f0ffdc671080f22449387b6ed961edbe700b0a1
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Thu Feb 8 17:46:01 2018 +0800

    drm/amdgpu: add new device to use atpx quirk
    
    commit 6e59de2048eb375a9bfcd39461ef841cd2a78962 upstream.
    
    The affected system (0x0813) is pretty similar to another one (0x0812),
    it also needs to use ATPX power control.
    
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4517799bf6556d2cffc0dd3a0cfb53cde2ada47d
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Mon Jan 22 23:13:32 2018 -0500

    drm/amdgpu: Avoid leaking PM domain on driver unbind (v2)
    
    commit 458d876eb869d5a88b53074c6c271b8b9adc0f07 upstream.
    
    We only support vga_switcheroo and runtime pm on PX/HG systems
    so forcing runpm to 1 doesn't do anything useful anyway.
    
    Only call vga_switcheroo_init_domain_pm_ops() for PX/HG so
    that the cleanup path is correct as well.  This mirrors what
    radeon does as well.
    
    v2: rework the patch originally sent by Lukas (Alex)
    
    Acked-by: Lukas Wunner <lukas@wunner.de>
    Reported-by: Lukas Wunner <lukas@wunner.de>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Lukas Wunner <lukas@wunner.de> (v1)
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 14fdf444827770fcba67f3487924096bffd5ce19
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Wed Dec 20 13:29:58 2017 -0500

    drm/amdgpu: add atpx quirk handling (v2)
    
    commit 052c299080cd6859f82a8154a7a673fafabe644c upstream.
    
    Add quirks for handling PX/HG systems.  In this case, add
    a quirk for a weston dGPU that only seems to properly power
    down using ATPX power control rather than HG (_PR3).
    
    v2: append a new weston XT
    
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Junwei Zhang <Jerry.Zhang@amd.com> (v2)
    Reviewed-and-Tested-by: Junwei Zhang <Jerry.Zhang@amd.com>
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    Acked-by: Christian König <christian.koenig@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 30537deb089c4a695d27e6a39c914b6418a5cfc6
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Tue Dec 19 09:52:31 2017 -0500

    drm/amdgpu: only check mmBIF_IOV_FUNC_IDENTIFIER on tonga/fiji
    
    commit 57ad33a307bf85cafda3a77c03a555c9f9ee4139 upstream.
    
    We only support SR-IOV on tonga/fiji.  Don't check this register
    on other VI parts.
    
    Fixes: 048765ad5af7c89 (amdgpu: fix asic initialization for virtualized environments (v2))
    Reviewed-by: Xiangliang Yu <Xiangliang.Yu@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 46c1e4023b58a910cea8797cb1c2bd9b784a835c
Author: Alex Deucher <alexander.deucher@amd.com>
Date:   Tue Nov 21 12:10:57 2017 -0500

    drm/amdgpu: Add dpm quirk for Jet PRO (v2)
    
    commit f2e5262f75ecb40a6e56554e156a292ab9e1d1b7 upstream.
    
    Fixes stability issues.
    
    v2: clamp sclk to 600 Mhz
    
    Bug: https://bugs.freedesktop.org/show_bug.cgi?id=103370
    Acked-by: Christian König <christian.koenig@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 68de83c13b30fa01e39b184f71ca5cca63010c4d
Author: Huang Rui <ray.huang@amd.com>
Date:   Thu Dec 14 13:47:16 2017 +0800

    drm/amdgpu: disable MMHUB power gating on raven
    
    commit 400b6afbaa949914460e5fd1d769c5e26ef1f6b8 upstream.
    
    MMHUB power gating still has issue, and doesn't work on raven at current. So
    disable it for the moment.
    
    Signed-off-by: Huang Rui <ray.huang@amd.com>
    Acked-by: Hawking Zhang <Hawking.Zhang@amd.com>
    Acked-by: Alex Deucher <alexander.deucher@amd.com>
    Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8ac8aa5eba0e8b4d2bf21d46fa46713fa2bfbe0f
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Mon Feb 19 11:35:43 2018 +0000

    drm: Handle unexpected holes in color-eviction
    
    commit b8ff1802815913aad52695898cccbc9f77b7e726 upstream.
    
    During eviction, the driver may free more than one hole in the drm_mm
    due to the side-effects in evicting the scanned nodes. However,
    drm_mm_scan_color_evict() expects that the scan result is the first
    available hole (in the mru freed hole_stack list):
    
      kernel BUG at drivers/gpu/drm/drm_mm.c:844!
      invalid opcode: 0000 [#1] PREEMPT SMP KASAN PTI
      Dumping ftrace buffer:
         (ftrace buffer empty)
      Modules linked in: i915 snd_hda_codec_analog snd_hda_codec_generic coretemp snd_hda_intel snd_hda_codec snd_hwdep snd_hda_core lpc_ich snd_pcm e1000e mei_me prime_numbers mei
      CPU: 1 PID: 1490 Comm: gem_userptr_bli Tainted: G     U           4.16.0-rc1-g740f57c54ecf-kasan_6+ #1
      Hardware name: Dell Inc. OptiPlex 755                 /0PU052, BIOS A08 02/19/2008
      RIP: 0010:drm_mm_scan_color_evict+0x2b8/0x3d0
      RSP: 0018:ffff880057a573f8 EFLAGS: 00010287
      RAX: ffff8800611f5980 RBX: ffff880057a575d0 RCX: dffffc0000000000
      RDX: 00000000029d5000 RSI: 1ffff1000af4aec1 RDI: ffff8800611f5a10
      RBP: ffff88005ab884d0 R08: ffff880057a57600 R09: 000000000afff000
      R10: 1ffff1000b5710b5 R11: 0000000000001000 R12: 1ffff1000af4ae82
      R13: ffff8800611f59b0 R14: ffff8800611f5980 R15: ffff880057a57608
      FS:  00007f2de0c2e8c0(0000) GS:ffff88006ac40000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00007f2ddde1e000 CR3: 00000000609b2000 CR4: 00000000000006e0
      Call Trace:
       ? drm_mm_scan_remove_block+0x330/0x330
       ? drm_mm_scan_remove_block+0x151/0x330
       i915_gem_evict_something+0x711/0xbd0 [i915]
       ? igt_evict_contexts+0x50/0x50 [i915]
       ? nop_clear_range+0x10/0x10 [i915]
       ? igt_evict_something+0x90/0x90 [i915]
       ? i915_gem_gtt_reserve+0x1a1/0x320 [i915]
       i915_gem_gtt_insert+0x237/0x400 [i915]
       __i915_vma_do_pin+0xc25/0x1a20 [i915]
       eb_lookup_vmas+0x1c63/0x3790 [i915]
       ? i915_gem_check_execbuffer+0x250/0x250 [i915]
       ? trace_hardirqs_on_caller+0x33f/0x590
       ? _raw_spin_unlock_irqrestore+0x39/0x60
       ? __pm_runtime_resume+0x7d/0xf0
       i915_gem_do_execbuffer+0x86a/0x2ff0 [i915]
       ? __kmalloc+0x132/0x340
       ? i915_gem_execbuffer2_ioctl+0x10f/0x760 [i915]
       ? drm_ioctl_kernel+0x12e/0x1c0
       ? drm_ioctl+0x662/0x980
       ? eb_relocate_slow+0xa90/0xa90 [i915]
       ? i915_gem_execbuffer2_ioctl+0x10f/0x760 [i915]
       ? __might_fault+0xea/0x1a0
       i915_gem_execbuffer2_ioctl+0x3cc/0x760 [i915]
       ? i915_gem_execbuffer_ioctl+0xba0/0xba0 [i915]
       ? lock_acquire+0x3c0/0x3c0
       ? i915_gem_execbuffer_ioctl+0xba0/0xba0 [i915]
       drm_ioctl_kernel+0x12e/0x1c0
       drm_ioctl+0x662/0x980
       ? i915_gem_execbuffer_ioctl+0xba0/0xba0 [i915]
       ? drm_getstats+0x20/0x20
       ? debug_check_no_obj_freed+0x2a6/0x8c0
       do_vfs_ioctl+0x170/0xe70
       ? ioctl_preallocate+0x170/0x170
       ? task_work_run+0xbe/0x160
       ? lock_acquire+0x3c0/0x3c0
       ? trace_hardirqs_on_caller+0x33f/0x590
       ? _raw_spin_unlock_irq+0x2f/0x50
       SyS_ioctl+0x36/0x70
       ? do_vfs_ioctl+0xe70/0xe70
       do_syscall_64+0x18c/0x5d0
       entry_SYSCALL_64_after_hwframe+0x26/0x9b
      RIP: 0033:0x7f2ddf13b587
      RSP: 002b:00007fff15c4f9d8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
      RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 00007f2ddf13b587
      RDX: 00007fff15c4fa20 RSI: 0000000040406469 RDI: 0000000000000003
      RBP: 00007fff15c4fa20 R08: 0000000000000000 R09: 00007f2ddf3fe120
      R10: 0000000000000073 R11: 0000000000000246 R12: 0000000040406469
      R13: 0000000000000003 R14: 00007fff15c4fa20 R15: 00000000000000c7
      Code: 00 00 00 4a c7 44 22 08 00 00 00 00 42 c7 44 22 10 00 00 00 00 48 81 c4 b8 00 00 00 5b 5d 41 5c 41 5d 41 5e 41 5f c3 0f 0b 0f 0b <0f> 0b 31 c0 eb c0 4c 89 ef e8 9a 09 41 ff e9 1e fe ff ff 4c 89
      RIP: drm_mm_scan_color_evict+0x2b8/0x3d0 RSP: ffff880057a573f8
    
    We can trivially relax this assumption by searching the hole_stack for
    the scan result and warn instead if the driver called us without any
    result.
    
    Fixes: 3fa489dabea9 ("drm: Apply tight eviction scanning to color_adjust")
    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
    Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Cc: <stable@vger.kernel.org> # v4.11+
    Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180219113543.8010-1-chris@chris-wilson.co.uk
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5c9beaf3aca7ae80cf8b54b1abecf43082416f52
Author: Daniel Vetter <daniel.vetter@ffwll.ch>
Date:   Wed Jan 31 12:04:50 2018 +0100

    drm/cirrus: Load lut in crtc_commit
    
    commit 745fd50f3b044db6a3922e1718306555613164b0 upstream.
    
    In the past the ast driver relied upon the fbdev emulation helpers to
    call ->load_lut at boot-up. But since
    
    commit b8e2b0199cc377617dc238f5106352c06dcd3fa2
    Author: Peter Rosin <peda@axentia.se>
    Date:   Tue Jul 4 12:36:57 2017 +0200
    
    drm/fb-helper: factor out pseudo-palette
    
    that's cleaned up and drivers are expected to boot into a consistent
    lut state. This patch fixes that.
    
    Fixes: b8e2b0199cc3 ("drm/fb-helper: factor out pseudo-palette")
    Cc: Peter Rosin <peda@axenita.se>
    Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
    Cc: <stable@vger.kernel.org> # v4.14+
    References: https://bugzilla.kernel.org/show_bug.cgi?id=198123
    Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
    Link: http://patchwork.freedesktop.org/patch/msgid/20180131110450.22153-1-daniel.vetter@ffwll.ch
    Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit faf1a75046cb59e1a7573b4bb390fc5938ccf4df
Author: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
Date:   Mon Feb 5 17:12:35 2018 +0900

    usb: renesas_usbhs: missed the "running" flag in usb_dmac with rx path
    
    commit 17aa31f13cad25daa19d3f923323f552e87bc874 upstream.
    
    This fixes an issue that a gadget driver (usb_f_fs) is possible to
    stop rx transactions after the usb-dmac is used because the following
    functions missed to set/check the "running" flag.
     - usbhsf_dma_prepare_pop_with_usb_dmac()
     - usbhsf_dma_pop_done_with_usb_dmac()
    
    So, if next transaction uses pio, the usbhsf_prepare_pop() can not
    start the transaction because the "running" flag is 0.
    
    Fixes: 8355b2b3082d ("usb: renesas_usbhs: fix the behavior of some usbhs_pkt_handle")
    Cc: <stable@vger.kernel.org> # v3.19+
    Signed-off-by: Yoshihiro Shimoda <yoshihiro.shimoda.uh@renesas.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 51aba4e16ccc71925ea0bf89818da5bbc2397b11
Author: Jack Pham <jackp@codeaurora.org>
Date:   Wed Jan 24 23:58:20 2018 -0800

    usb: gadget: f_fs: Use config_ep_by_speed()
    
    commit 675272d092e4a5570bace92593776f7348daf4c5 upstream.
    
    In commit 2bfa0719ac2a ("usb: gadget: function: f_fs: pass
    companion descriptor along") there is a pointer arithmetic
    bug where the comp_desc is obtained as follows:
    
     comp_desc = (struct usb_ss_ep_comp_descriptor *)(ds +
                   USB_DT_ENDPOINT_SIZE);
    
    Since ds is a pointer to usb_endpoint_descriptor, adding
    7 to it ends up going out of bounds (7 * sizeof(struct
    usb_endpoint_descriptor), which is actually 7*9 bytes) past
    the SS descriptor. As a result the maxburst value will be
    read incorrectly, and the UDC driver will also get a garbage
    comp_desc (assuming it uses it).
    
    Since Felipe wrote, "Eventually, f_fs.c should be converted
    to use config_ep_by_speed() like all other functions, though",
    let's finally do it. This allows the other usb_ep fields to
    be properly populated, such as maxpacket and mult. It also
    eliminates the awkward speed-based descriptor lookup since
    config_ep_by_speed() does that already using the ones found
    in struct usb_function.
    
    Fixes: 2bfa0719ac2a ("usb: gadget: function: f_fs: pass companion descriptor along")
    Cc: stable@vger.kernel.org
    Signed-off-by: Jack Pham <jackp@codeaurora.org>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6e936140e0d746e96d26af3a8b02fd09909d7029
Author: Jack Pham <jackp@codeaurora.org>
Date:   Wed Jan 24 00:11:53 2018 -0800

    usb: gadget: f_fs: Process all descriptors during bind
    
    commit 6cf439e0d37463e42784271179c8a308fd7493c6 upstream.
    
    During _ffs_func_bind(), the received descriptors are evaluated
    to prepare for binding with the gadget in order to allocate
    endpoints and optionally set up OS descriptors. However, the
    high- and super-speed descriptors are only parsed based on
    whether the gadget_is_dualspeed() and gadget_is_superspeed()
    calls are true, respectively.
    
    This is a problem in case a userspace program always provides
    all of the {full,high,super,OS} descriptors when configuring a
    function. Then, for example if a gadget device is not capable
    of SuperSpeed, the call to ffs_do_descs() for the SS descriptors
    is skipped, resulting in an incorrect offset calculation for
    the vla_ptr when moving on to the OS descriptors that follow.
    This causes ffs_do_os_descs() to fail as it is now looking at
    the SS descriptors' offset within the raw_descs buffer instead.
    
    _ffs_func_bind() should evaluate the descriptors unconditionally,
    so remove the checks for gadget speed.
    
    Fixes: f0175ab51993 ("usb: gadget: f_fs: OS descriptors support")
    Cc: stable@vger.kernel.org
    Co-Developed-by: Mayank Rana <mrana@codeaurora.org>
    Signed-off-by: Mayank Rana <mrana@codeaurora.org>
    Signed-off-by: Jack Pham <jackp@codeaurora.org>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7551ff0ab230add761bc9ffdea855062e0778e21
Author: Bin Liu <b-liu@ti.com>
Date:   Tue Feb 20 07:31:35 2018 -0600

    Revert "usb: musb: host: don't start next rx urb if current one failed"
    
    commit 44eb5e12b845cc8a0634f21b70ef07d774eb4b25 upstream.
    
    This reverts commit dbac5d07d13e330e6706813c9fde477140fb5d80.
    
    commit dbac5d07d13e ("usb: musb: host: don't start next rx urb if current one failed")
    along with commit b5801212229f ("usb: musb: host: clear rxcsr error bit if set")
    try to solve the issue described in [1], but the latter alone is
    sufficient, and the former causes the issue as in [2], so now revert it.
    
    [1] https://marc.info/?l=linux-usb&m=146173995117456&w=2
    [2] https://marc.info/?l=linux-usb&m=151689238420622&w=2
    
    Cc: stable@vger.kernel.org # v4.7+
    Signed-off-by: Bin Liu <b-liu@ti.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7e402ea2cdc21d5f3fca6f7d99213528d147bab4
Author: Karsten Koop <kkoop@ld-didactic.de>
Date:   Fri Feb 9 09:12:06 2018 +0000

    usb: ldusb: add PIDs for new CASSY devices supported by this driver
    
    commit 52ad2bd8918158266fc88a05f95429b56b6a33c5 upstream.
    
    This patch adds support for new CASSY devices to the ldusb driver. The
    PIDs are also added to the ignore list in hid-quirks.
    
    Signed-off-by: Karsten Koop <kkoop@ld-didactic.de>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a1e8aa2176d2cfbfa444df0461a906b455e9e66b
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Fri Jan 12 18:18:27 2018 -0800

    usb: dwc3: ep0: Reset TRB counter for ep0 IN
    
    commit f035d139ffece7b6a7b8bfb17bd0ba715ee57a04 upstream.
    
    DWC3 tracks TRB counter for each ep0 direction separately. In control
    read transfer completion handler, the driver needs to reset the TRB
    enqueue counter for ep0 IN direction. Currently the driver only resets
    the TRB counter for control OUT endpoint. Check for the data direction
    and properly reset the TRB counter from correct control endpoint.
    
    Cc: stable@vger.kernel.org
    Fixes: c2da2ff00606 ("usb: dwc3: ep0: don't use ep0in for transfers")
    Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 49e18b2ba887724ae43b1169ad0b8e747fd5aad9
Author: Thinh Nguyen <Thinh.Nguyen@synopsys.com>
Date:   Fri Jan 12 18:18:05 2018 -0800

    usb: dwc3: gadget: Set maxpacket size for ep0 IN
    
    commit 6180026341e852a250e1f97ebdcf71684a3c81b9 upstream.
    
    There are 2 control endpoint structures for DWC3. However, the driver
    only updates the OUT direction control endpoint structure during
    ConnectDone event. DWC3 driver needs to update the endpoint max packet
    size for control IN endpoint as well. If the max packet size is not
    properly set, then the driver will incorrectly calculate the data
    transfer size and fail to send ZLP for HS/FS 3-stage control read
    transfer.
    
    The fix is simply to update the max packet size for the ep0 IN direction
    during ConnectDone event.
    
    Cc: stable@vger.kernel.org
    Fixes: 72246da40f37 ("usb: Introduce DesignWare USB3 DRD Driver")
    Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
    Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1075f607869283ad07a224c01b78e61b09f4bc7a
Author: Peter Chen <hzpeterchen@gmail.com>
Date:   Thu Feb 1 12:26:43 2018 +0800

    usb: host: ehci: use correct device pointer for dma ops
    
    commit 02a10f061a3f8bca1b37332672f50a107198adbe upstream.
    
    commit a8c06e407ef9 ("usb: separate out sysdev pointer from usb_bus")
    converted to use hcd->self.sysdev for DMA operations instead of
    hcd->self.controller, but forgot to do it for hcd test mode. Replace
    the correct one in this commit.
    
    Fixes: a8c06e407ef9 ("usb: separate out sysdev pointer from usb_bus")
    Signed-off-by: Peter Chen <peter.chen@nxp.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3b5061ec6fcab358e1cfa009a7e43fce27aca3e7
Author: Kai-Heng Feng <kai.heng.feng@canonical.com>
Date:   Sun Feb 18 16:53:59 2018 +0800

    drm/edid: Add 6 bpc quirk for CPT panel in Asus UX303LA
    
    commit 06998a756a3865817b87a129a7e5d5bb66dc1ec3 upstream.
    
    Similar to commit e10aec652f31 ("drm/edid: Add 6 bpc quirk for display
    AEO model 0."), the EDID reports "DFP 1.x compliant TMDS" but it support
    6bpc instead of 8 bpc.
    
    Hence, use 6 bpc quirk for this panel.
    
    Fixes: 196f954e2509 ("drm/i915/dp: Revert "drm/i915/dp: fall back to 18 bpp when sink capability is unknown"")
    BugLink: https://bugs.launchpad.net/bugs/1749420
    Signed-off-by: Kai-Heng Feng <kai.heng.feng@canonical.com>
    Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
    Cc: <stable@vger.kernel.org> # v4.8+
    Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20180218085359.7817-1-kai.heng.feng@canonical.com
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f74ddc2e6152b7c0e13d952403938bd41c530464
Author: Jack Stocker <jackstocker.93@gmail.com>
Date:   Thu Feb 15 18:24:10 2018 +0000

    Add delay-init quirk for Corsair K70 RGB keyboards
    
    commit 7a1646d922577b5b48c0d222e03831141664bb59 upstream.
    
    Following on from this patch: https://lkml.org/lkml/2017/11/3/516,
    Corsair K70 RGB keyboards also require the DELAY_INIT quirk to
    start correctly at boot.
    
    Device ids found here:
    usb 3-3: New USB device found, idVendor=1b1c, idProduct=1b13
    usb 3-3: New USB device strings: Mfr=1, Product=2, SerialNumber=3
    usb 3-3: Product: Corsair K70 RGB Gaming Keyboard
    
    Signed-off-by: Jack Stocker <jackstocker.93@gmail.com>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 21aadb063e70f858958a8b43f8bd661c8abc5575
Author: Will Deacon <will.deacon@arm.com>
Date:   Mon Feb 19 14:41:44 2018 +0000

    arm64: cpufeature: Fix CTR_EL0 field definitions
    
    commit be68a8aaf925aaf35574260bf820bb09d2f9e07f upstream.
    
    Our field definitions for CTR_EL0 suffer from a number of problems:
    
      - The IDC and DIC fields are missing, which causes us to enable CTR
        trapping on CPUs with either of these returning non-zero values.
    
      - The ERG is FTR_LOWER_SAFE, whereas it should be treated like CWG as
        FTR_HIGHER_SAFE so that applications can use it to avoid false sharing.
    
      - [nit] A RES1 field is described as "RAO"
    
    This patch updates the CTR_EL0 field definitions to fix these issues.
    
    Cc: <stable@vger.kernel.org>
    Cc: Shanker Donthineni <shankerd@codeaurora.org>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6842a512ad160e15be7985acb9992795f3d11af1
Author: Michael Weiser <michael.weiser@gmx.de>
Date:   Thu Feb 1 23:13:38 2018 +0100

    arm64: Disable unhandled signal log messages by default
    
    commit 5ee39a71fd89ab7240c5339d04161c44a8e03269 upstream.
    
    aarch64 unhandled signal kernel messages are very verbose, suggesting
    them to be more of a debugging aid:
    
    sigsegv[33]: unhandled level 2 translation fault (11) at 0x00000000, esr
    0x92000046, in sigsegv[400000+71000]
    CPU: 1 PID: 33 Comm: sigsegv Tainted: G        W        4.15.0-rc3+ #3
    Hardware name: linux,dummy-virt (DT)
    pstate: 60000000 (nZCv daif -PAN -UAO)
    pc : 0x4003f4
    lr : 0x4006bc
    sp : 0000fffffe94a060
    x29: 0000fffffe94a070 x28: 0000000000000000
    x27: 0000000000000000 x26: 0000000000000000
    x25: 0000000000000000 x24: 00000000004001b0
    x23: 0000000000486ac8 x22: 00000000004001c8
    x21: 0000000000000000 x20: 0000000000400be8
    x19: 0000000000400b30 x18: 0000000000484728
    x17: 000000000865ffc8 x16: 000000000000270f
    x15: 00000000000000b0 x14: 0000000000000002
    x13: 0000000000000001 x12: 0000000000000000
    x11: 0000000000000000 x10: 0008000020008008
    x9 : 000000000000000f x8 : ffffffffffffffff
    x7 : 0004000000000000 x6 : ffffffffffffffff
    x5 : 0000000000000000 x4 : 0000000000000000
    x3 : 00000000004003e4 x2 : 0000fffffe94a1e8
    x1 : 000000000000000a x0 : 0000000000000000
    
    Disable them by default, so they can be enabled using
    /proc/sys/debug/exception-trace.
    
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Michael Weiser <michael.weiser@gmx.de>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 96e99291728f4e975ef832f14a461720c0f98eeb
Author: Michael Weiser <michael.weiser@gmx.de>
Date:   Thu Feb 1 23:13:36 2018 +0100

    arm64: Remove unimplemented syscall log message
    
    commit 1962682d2b2fbe6cfa995a85c53c069fadda473e upstream.
    
    Stop printing a (ratelimited) kernel message for each instance of an
    unimplemented syscall being called. Userland making an unimplemented
    syscall is not necessarily misbehaviour and to be expected with a
    current userland running on an older kernel. Also, the current message
    looks scary to users but does not actually indicate a real problem nor
    help them narrow down the cause. Just rely on sys_ni_syscall() to return
    -ENOSYS.
    
    Cc: <stable@vger.kernel.org>
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Michael Weiser <michael.weiser@gmx.de>
    Signed-off-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7e8407d1462d3c965dea98fd182d602185241be0
Author: AMAN DEEP <aman.deep@samsung.com>
Date:   Thu Feb 8 11:55:01 2018 +0800

    usb: ohci: Proper handling of ed_rm_list to handle race condition between usb_kill_urb() and finish_unlinks()
    
    commit 46408ea558df13b110e0866b99624384a33bdeba upstream.
    
    There is a race condition between finish_unlinks->finish_urb() function
    and usb_kill_urb() in ohci controller case. The finish_urb calls
    spin_unlock(&ohci->lock) before usb_hcd_giveback_urb() function call,
    then if during this time, usb_kill_urb is called for another endpoint,
    then new ed will be added to ed_rm_list at beginning for unlink, and
    ed_rm_list will point to newly added.
    
    When finish_urb() is completed in finish_unlinks() and ed->td_list
    becomes empty as in below code (in finish_unlinks() function):
    
            if (list_empty(&ed->td_list)) {
                    *last = ed->ed_next;
                    ed->ed_next = NULL;
            } else if (ohci->rh_state == OHCI_RH_RUNNING) {
                    *last = ed->ed_next;
                    ed->ed_next = NULL;
                    ed_schedule(ohci, ed);
            }
    
    The *last = ed->ed_next will make ed_rm_list to point to ed->ed_next
    and previously added ed by usb_kill_urb will be left unreferenced by
    ed_rm_list. This causes usb_kill_urb() hang forever waiting for
    finish_unlink to remove added ed from ed_rm_list.
    
    The main reason for hang in this race condtion is addition and removal
    of ed from ed_rm_list in the beginning during usb_kill_urb and later
    last* is modified in finish_unlinks().
    
    As suggested by Alan Stern, the solution for proper handling of
    ohci->ed_rm_list is to remove ed from the ed_rm_list before finishing
    any URBs. Then at the end, we can add ed back to the list if necessary.
    
    This properly handle the updated ohci->ed_rm_list in usb_kill_urb().
    
    Fixes: 977dcfdc6031 ("USB: OHCI: don't lose track of EDs when a controller dies")
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    CC: <stable@vger.kernel.org>
    Signed-off-by: Aman Deep <aman.deep@samsung.com>
    Signed-off-by: Jeffy Chen <jeffy.chen@rock-chips.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 85c3d26bd754160f6be90d8b078d70a1b35820e7
Author: Shigeru Yoshida <shigeru.yoshida@windriver.com>
Date:   Fri Feb 2 13:51:39 2018 +0800

    ohci-hcd: Fix race condition caused by ohci_urb_enqueue() and io_watchdog_func()
    
    commit b2685bdacdaab065c172b97b55ab46c6be77a037 upstream.
    
    Running io_watchdog_func() while ohci_urb_enqueue() is running can
    cause a race condition where ohci->prev_frame_no is corrupted and the
    watchdog can mis-detect following error:
    
      ohci-platform 664a0800.usb: frame counter not updating; disabled
      ohci-platform 664a0800.usb: HC died; cleaning up
    
    Specifically, following scenario causes a race condition:
    
      1. ohci_urb_enqueue() calls spin_lock_irqsave(&ohci->lock, flags)
         and enters the critical section
      2. ohci_urb_enqueue() calls timer_pending(&ohci->io_watchdog) and it
         returns false
      3. ohci_urb_enqueue() sets ohci->prev_frame_no to a frame number
         read by ohci_frame_no(ohci)
      4. ohci_urb_enqueue() schedules io_watchdog_func() with mod_timer()
      5. ohci_urb_enqueue() calls spin_unlock_irqrestore(&ohci->lock,
         flags) and exits the critical section
      6. Later, ohci_urb_enqueue() is called
      7. ohci_urb_enqueue() calls spin_lock_irqsave(&ohci->lock, flags)
         and enters the critical section
      8. The timer scheduled on step 4 expires and io_watchdog_func() runs
      9. io_watchdog_func() calls spin_lock_irqsave(&ohci->lock, flags)
         and waits on it because ohci_urb_enqueue() is already in the
         critical section on step 7
     10. ohci_urb_enqueue() calls timer_pending(&ohci->io_watchdog) and it
         returns false
     11. ohci_urb_enqueue() sets ohci->prev_frame_no to new frame number
         read by ohci_frame_no(ohci) because the frame number proceeded
         between step 3 and 6
     12. ohci_urb_enqueue() schedules io_watchdog_func() with mod_timer()
     13. ohci_urb_enqueue() calls spin_unlock_irqrestore(&ohci->lock,
         flags) and exits the critical section, then wake up
         io_watchdog_func() which is waiting on step 9
     14. io_watchdog_func() enters the critical section
     15. io_watchdog_func() calls ohci_frame_no(ohci) and set frame_no
         variable to the frame number
     16. io_watchdog_func() compares frame_no and ohci->prev_frame_no
    
    On step 16, because this calling of io_watchdog_func() is scheduled on
    step 4, the frame number set in ohci->prev_frame_no is expected to the
    number set on step 3.  However, ohci->prev_frame_no is overwritten on
    step 11.  Because step 16 is executed soon after step 11, the frame
    number might not proceed, so ohci->prev_frame_no must equals to
    frame_no.
    
    To address above scenario, this patch introduces a special sentinel
    value IO_WATCHDOG_OFF and set this value to ohci->prev_frame_no when
    the watchdog is not pending or running.  When ohci_urb_enqueue()
    schedules the watchdog (step 4 and 12 above), it compares
    ohci->prev_frame_no to IO_WATCHDOG_OFF so that ohci->prev_frame_no is
    not overwritten while io_watchdog_func() is running.
    
    Signed-off-by: Shigeru Yoshida <Shigeru.Yoshida@windriver.com>
    Signed-off-by: Haiqing Bai <Haiqing.Bai@windriver.com>
    Acked-by: Alan Stern <stern@rowland.harvard.edu>
    Cc: stable <stable@vger.kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 50f80b646a2b76bde046ef180e2c5bfaef861510
Author: Casey Leedom <leedom@chelsio.com>
Date:   Thu Feb 15 20:03:18 2018 +0530

    PCI/cxgb4: Extend T3 PCI quirk to T4+ devices
    
    commit 7dcf688d4c78a18ba9538b2bf1b11dc7a43fe9be upstream.
    
    We've run into a problem where our device is attached
    to a Virtual Machine and the use of the new pci_set_vpd_size()
    API doesn't help.  The VM kernel has been informed that
    the accesses are okay, but all of the actual VPD Capability
    Accesses are trapped down into the KVM Hypervisor where it
    goes ahead and imposes the silent denials.
    
    The right idea is to follow the kernel.org
    commit 1c7de2b4ff88 ("PCI: Enable access to non-standard VPD for
    Chelsio devices (cxgb3)") which Alexey Kardashevskiy authored
    to establish a PCI Quirk for our T3-based adapters. This commit
    extends that PCI Quirk to cover Chelsio T4 devices and later.
    
    The advantage of this approach is that the VPD Size gets set early
    in the Base OS/Hypervisor Boot and doesn't require that the cxgb4
    driver even be available in the Base OS/Hypervisor.  Thus PF4 can
    be exported to a Virtual Machine and everything should work.
    
    Fixes: 67e658794ca1 ("cxgb4: Set VPD size so we can read both VPD structures")
    Cc: <stable@vger.kernel.org>  # v4.9+
    Signed-off-by: Casey Leedom <leedom@chelsio.com>
    Signed-off-by: Arjun Vynipadath <arjun@chelsio.com>
    Signed-off-by: Ganesh Goudar <ganeshgr@chelsio.com>
    Signed-off-by: David S. Miller <davem@davemloft.net>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4a665d628f938af3718e89247f5b8a77fbf8c536
Author: Matt Redfearn <matt.redfearn@mips.com>
Date:   Mon Feb 5 16:45:36 2018 +0000

    irqchip/mips-gic: Avoid spuriously handling masked interrupts
    
    commit 285cb4f62319737e6538252cf1a67ce9da5cf3d5 upstream.
    
    Commit 7778c4b27cbe ("irqchip: mips-gic: Use pcpu_masks to avoid reading
    GIC_SH_MASK*") removed the read of the hardware mask register when
    handling shared interrupts, instead using the driver's shadow pcpu_masks
    entry as the effective mask. Unfortunately this did not take account of
    the write to pcpu_masks during gic_shared_irq_domain_map, which
    effectively unmasks the interrupt early. If an interrupt is asserted,
    gic_handle_shared_int decodes and processes the interrupt even though it
    has not yet been unmasked via gic_unmask_irq, which also sets the
    appropriate bit in pcpu_masks.
    
    On the MIPS Boston board, when a console command line of
    "console=ttyS0,115200n8r" is passed, the modem status IRQ is enabled in
    the UART, which is immediately raised to the GIC. The interrupt has been
    mapped, but no handler has yet been registered, nor is it expected to be
    unmasked. However, the write to pcpu_masks in gic_shared_irq_domain_map
    has effectively unmasked it, resulting in endless reports of:
    
    [    5.058454] irq 13, desc: ffffffff80a7ad80, depth: 1, count: 0, unhandled: 0
    [    5.062057] ->handle_irq():  ffffffff801b1838,
    [    5.062175] handle_bad_irq+0x0/0x2c0
    
    Where IRQ 13 is the UART interrupt.
    
    To fix this, just remove the write to pcpu_masks in
    gic_shared_irq_domain_map. The existing write in gic_unmask_irq is the
    correct place for what is now the effective unmasking.
    
    Cc: stable@vger.kernel.org
    Fixes: 7778c4b27cbe ("irqchip: mips-gic: Use pcpu_masks to avoid reading GIC_SH_MASK*")
    Signed-off-by: Matt Redfearn <matt.redfearn@mips.com>
    Reviewed-by: Paul Burton <paul.burton@mips.com>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit bc4704f507cdb98689b7d637db9b2d0d4937652a
Author: Shanker Donthineni <shankerd@codeaurora.org>
Date:   Wed Jan 31 18:03:42 2018 -0600

    irqchip/gic-v3: Use wmb() instead of smb_wmb() in gic_raise_softirq()
    
    commit 21ec30c0ef5234fb1039cc7c7737d885bf875a9e upstream.
    
    A DMB instruction can be used to ensure the relative order of only
    memory accesses before and after the barrier. Since writes to system
    registers are not memory operations, barrier DMB is not sufficient
    for observability of memory accesses that occur before ICC_SGI1R_EL1
    writes.
    
    A DSB instruction ensures that no instructions that appear in program
    order after the DSB instruction, can execute until the DSB instruction
    has completed.
    
    Cc: stable@vger.kernel.org
    Acked-by: Will Deacon <will.deacon@arm.com>,
    Signed-off-by: Shanker Donthineni <shankerd@codeaurora.org>
    Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 62160e348e89b12255df61e6d08891b1ca8f9617
Author: Huang Ying <huang.ying.caritas@gmail.com>
Date:   Wed Feb 21 14:45:39 2018 -0800

    mm, swap, frontswap: fix THP swap if frontswap enabled
    
    commit 7ba716698cc53f8d5367766c93c538c7da6c68ce upstream.
    
    It was reported by Sergey Senozhatsky that if THP (Transparent Huge
    Page) and frontswap (via zswap) are both enabled, when memory goes low
    so that swap is triggered, segfault and memory corruption will occur in
    random user space applications as follow,
    
    kernel: urxvt[338]: segfault at 20 ip 00007fc08889ae0d sp 00007ffc73a7fc40 error 6 in libc-2.26.so[7fc08881a000+1ae000]
     #0  0x00007fc08889ae0d _int_malloc (libc.so.6)
     #1  0x00007fc08889c2f3 malloc (libc.so.6)
     #2  0x0000560e6004bff7 _Z14rxvt_wcstoutf8PKwi (urxvt)
     #3  0x0000560e6005e75c n/a (urxvt)
     #4  0x0000560e6007d9f1 _ZN16rxvt_perl_interp6invokeEP9rxvt_term9hook_typez (urxvt)
     #5  0x0000560e6003d988 _ZN9rxvt_term9cmd_parseEv (urxvt)
     #6  0x0000560e60042804 _ZN9rxvt_term6pty_cbERN2ev2ioEi (urxvt)
     #7  0x0000560e6005c10f _Z17ev_invoke_pendingv (urxvt)
     #8  0x0000560e6005cb55 ev_run (urxvt)
     #9  0x0000560e6003b9b9 main (urxvt)
     #10 0x00007fc08883af4a __libc_start_main (libc.so.6)
     #11 0x0000560e6003f9da _start (urxvt)
    
    After bisection, it was found the first bad commit is bd4c82c22c36 ("mm,
    THP, swap: delay splitting THP after swapped out").
    
    The root cause is as follows:
    
    When the pages are written to swap device during swapping out in
    swap_writepage(), zswap (fontswap) is tried to compress the pages to
    improve performance.  But zswap (frontswap) will treat THP as a normal
    page, so only the head page is saved.  After swapping in, tail pages
    will not be restored to their original contents, causing memory
    corruption in the applications.
    
    This is fixed by refusing to save page in the frontswap store functions
    if the page is a THP.  So that the THP will be swapped out to swap
    device.
    
    Another choice is to split THP if frontswap is enabled.  But it is found
    that the frontswap enabling isn't flexible.  For example, if
    CONFIG_ZSWAP=y (cannot be module), frontswap will be enabled even if
    zswap itself isn't enabled.
    
    Frontswap has multiple backends, to make it easy for one backend to
    enable THP support, the THP checking is put in backend frontswap store
    functions instead of the general interfaces.
    
    Link: http://lkml.kernel.org/r/20180209084947.22749-1-ying.huang@intel.com
    Fixes: bd4c82c22c367e068 ("mm, THP, swap: delay splitting THP after swapped out")
    Signed-off-by: "Huang, Ying" <ying.huang@intel.com>
    Reported-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Tested-by: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
    Suggested-by: Minchan Kim <minchan@kernel.org>  [put THP checking in backend]
    Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
    Cc: Dan Streetman <ddstreet@ieee.org>
    Cc: Seth Jennings <sjenning@redhat.com>
    Cc: Tetsuo Handa <penguin-kernel@I-love.SAKURA.ne.jp>
    Cc: Shaohua Li <shli@kernel.org>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Mel Gorman <mgorman@techsingularity.net>
    Cc: Shakeel Butt <shakeelb@google.com>
    Cc: Boris Ostrovsky <boris.ostrovsky@oracle.com>
    Cc: Juergen Gross <jgross@suse.com>
    Cc: <stable@vger.kernel.org>    [4.14]
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7a14562d6e2c48068616e260a7d76b2ae8b8ee30
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Tue Feb 20 21:58:21 2018 +0100

    x86/oprofile: Fix bogus GCC-8 warning in nmi_setup()
    
    commit 85c615eb52222bc5fab6c7190d146bc59fac289e upstream.
    
    GCC-8 shows a warning for the x86 oprofile code that copies per-CPU
    data from CPU 0 to all other CPUs, which when building a non-SMP
    kernel turns into a memcpy() with identical source and destination
    pointers:
    
     arch/x86/oprofile/nmi_int.c: In function 'mux_clone':
     arch/x86/oprofile/nmi_int.c:285:2: error: 'memcpy' source argument is the same as destination [-Werror=restrict]
       memcpy(per_cpu(cpu_msrs, cpu).multiplex,
       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              per_cpu(cpu_msrs, 0).multiplex,
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              sizeof(struct op_msr) * model->num_virt_counters);
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     arch/x86/oprofile/nmi_int.c: In function 'nmi_setup':
     arch/x86/oprofile/nmi_int.c:466:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict]
     arch/x86/oprofile/nmi_int.c:470:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict]
    
    I have analyzed a number of such warnings now: some are valid and the
    GCC warning is welcome. Others turned out to be false-positives, and
    GCC was changed to not warn about those any more. This is a corner case
    that is a false-positive but the GCC developers feel it's better to keep
    warning about it.
    
    In this case, it seems best to work around it by telling GCC
    a little more clearly that this code path is never hit with
    an IS_ENABLED() configuration check.
    
    Cc:stable as we also want old kernels to build cleanly with GCC-8.
    
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Cc: Jessica Yu <jeyu@kernel.org>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Martin Sebor <msebor@gcc.gnu.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Robert Richter <rric@kernel.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: oprofile-list@lists.sf.net
    Cc: stable@vger.kernel.org
    Link: http://lkml.kernel.org/r/20180220205826.2008875-1-arnd@arndb.de
    Link: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84095
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 0b82d316fa5b199125a22559fd457cf3100c34fc
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Wed Feb 21 14:45:20 2018 -0800

    Kbuild: always define endianess in kconfig.h
    
    commit 101110f6271ce956a049250c907bc960030577f8 upstream.
    
    Build testing with LTO found a couple of files that get compiled
    differently depending on whether asm/byteorder.h gets included early
    enough or not.  In particular, include/asm-generic/qrwlock_types.h is
    affected by this, but there are probably others as well.
    
    The symptom is a series of LTO link time warnings, including these:
    
        net/netlabel/netlabel_unlabeled.h:223: error: type of 'netlbl_unlhsh_add' does not match original declaration [-Werror=lto-type-mismatch]
         int netlbl_unlhsh_add(struct net *net,
        net/netlabel/netlabel_unlabeled.c:377: note: 'netlbl_unlhsh_add' was previously declared here
    
        include/net/ipv6.h:360: error: type of 'ipv6_renew_options_kern' does not match original declaration [-Werror=lto-type-mismatch]
         ipv6_renew_options_kern(struct sock *sk,
        net/ipv6/exthdrs.c:1162: note: 'ipv6_renew_options_kern' was previously declared here
    
        net/core/dev.c:761: note: 'dev_get_by_name_rcu' was previously declared here
         struct net_device *dev_get_by_name_rcu(struct net *net, const char *name)
        net/core/dev.c:761: note: code may be misoptimized unless -fno-strict-aliasing is used
    
        drivers/gpu/drm/i915/i915_drv.h:3377: error: type of 'i915_gem_object_set_to_wc_domain' does not match original declaration [-Werror=lto-type-mismatch]
         i915_gem_object_set_to_wc_domain(struct drm_i915_gem_object *obj, bool write);
        drivers/gpu/drm/i915/i915_gem.c:3639: note: 'i915_gem_object_set_to_wc_domain' was previously declared here
    
        include/linux/debugfs.h:92:9: error: type of 'debugfs_attr_read' does not match original declaration [-Werror=lto-type-mismatch]
         ssize_t debugfs_attr_read(struct file *file, char __user *buf,
        fs/debugfs/file.c:318: note: 'debugfs_attr_read' was previously declared here
    
        include/linux/rwlock_api_smp.h:30: error: type of '_raw_read_unlock' does not match original declaration [-Werror=lto-type-mismatch]
         void __lockfunc _raw_read_unlock(rwlock_t *lock) __releases(lock);
        kernel/locking/spinlock.c:246:26: note: '_raw_read_unlock' was previously declared here
    
        include/linux/fs.h:3308:5: error: type of 'simple_attr_open' does not match original declaration [-Werror=lto-type-mismatch]
         int simple_attr_open(struct inode *inode, struct file *file,
        fs/libfs.c:795: note: 'simple_attr_open' was previously declared here
    
    All of the above are caused by include/asm-generic/qrwlock_types.h
    failing to include asm/byteorder.h after commit e0d02285f16e
    ("locking/qrwlock: Use 'struct qrwlock' instead of 'struct __qrwlock'")
    in linux-4.15.
    
    Similar bugs may or may not exist in older kernels as well, but there is
    no easy way to test those with link-time optimizations, and kernels
    before 4.14 are harder to fix because they don't have Babu's patch
    series
    
    We had similar issues with CONFIG_ symbols in the past and ended up
    always including the configuration headers though linux/kconfig.h.  This
    works around the issue through that same file, defining either
    __BIG_ENDIAN or __LITTLE_ENDIAN depending on CONFIG_CPU_BIG_ENDIAN,
    which is now always set on all architectures since commit 4c97a0c8fee3
    ("arch: define CPU_BIG_ENDIAN for all fixed big endian archs").
    
    Link: http://lkml.kernel.org/r/20180202154104.1522809-2-arnd@arndb.de
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Cc: Babu Moger <babu.moger@amd.com>
    Cc: Andi Kleen <ak@linux.intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
    Cc: Nicolas Pitre <nico@linaro.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Will Deacon <will.deacon@arm.com>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6315213f0a788c7f08b02f88d1224e93f37d13f4
Author: Lars-Peter Clausen <lars@metafoo.de>
Date:   Wed Feb 14 15:43:00 2018 +0100

    iio: adis_lib: Initialize trigger before requesting interrupt
    
    commit f027e0b3a774e10302207e91d304bbf99e3a8b36 upstream.
    
    The adis_probe_trigger() creates a new IIO trigger and requests an
    interrupt associated with the trigger. The interrupt uses the generic
    iio_trigger_generic_data_rdy_poll() function as its interrupt handler.
    
    Currently the driver initializes some fields of the trigger structure after
    the interrupt has been requested. But an interrupt can fire as soon as it
    has been requested. This opens up a race condition.
    
    iio_trigger_generic_data_rdy_poll() will access the trigger data structure
    and dereference the ops field. If the ops field is not yet initialized this
    will result in a NULL pointer deref.
    
    It is not expected that the device generates an interrupt at this point, so
    typically this issue did not surface unless e.g. due to a hardware
    misconfiguration (wrong interrupt number, wrong polarity, etc.).
    
    But some newer devices from the ADIS family start to generate periodic
    interrupts in their power-on reset configuration and unfortunately the
    interrupt can not be masked in the device.  This makes the race condition
    much more visible and the following crash has been observed occasionally
    when booting a system using the ADIS16460.
    
            Unable to handle kernel NULL pointer dereference at virtual address 00000008
            pgd = c0004000
            [00000008] *pgd=00000000
            Internal error: Oops: 5 [#1] PREEMPT SMP ARM
            Modules linked in:
            CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.9.0-04126-gf9739f0-dirty #257
            Hardware name: Xilinx Zynq Platform
            task: ef04f640 task.stack: ef050000
            PC is at iio_trigger_notify_done+0x30/0x68
            LR is at iio_trigger_generic_data_rdy_poll+0x18/0x20
            pc : [<c042d868>]    lr : [<c042d924>]    psr: 60000193
            sp : ef051bb8  ip : 00000000  fp : ef106400
            r10: c081d80a  r9 : ef3bfa00  r8 : 00000087
            r7 : ef051bec  r6 : 00000000  r5 : ef3bfa00  r4 : ee92ab00
            r3 : 00000000  r2 : 00000000  r1 : 00000000  r0 : ee97e400
            Flags: nZCv  IRQs off  FIQs on  Mode SVC_32  ISA ARM  Segment none
            Control: 18c5387d  Table: 0000404a  DAC: 00000051
            Process swapper/0 (pid: 1, stack limit = 0xef050210)
            [<c042d868>] (iio_trigger_notify_done) from [<c0065b10>] (__handle_irq_event_percpu+0x88/0x118)
            [<c0065b10>] (__handle_irq_event_percpu) from [<c0065bbc>] (handle_irq_event_percpu+0x1c/0x58)
            [<c0065bbc>] (handle_irq_event_percpu) from [<c0065c30>] (handle_irq_event+0x38/0x5c)
            [<c0065c30>] (handle_irq_event) from [<c0068e28>] (handle_level_irq+0xa4/0x130)
            [<c0068e28>] (handle_level_irq) from [<c0064e74>] (generic_handle_irq+0x24/0x34)
            [<c0064e74>] (generic_handle_irq) from [<c021ab7c>] (zynq_gpio_irqhandler+0xb8/0x13c)
            [<c021ab7c>] (zynq_gpio_irqhandler) from [<c0064e74>] (generic_handle_irq+0x24/0x34)
            [<c0064e74>] (generic_handle_irq) from [<c0065370>] (__handle_domain_irq+0x5c/0xb4)
            [<c0065370>] (__handle_domain_irq) from [<c000940c>] (gic_handle_irq+0x48/0x8c)
            [<c000940c>] (gic_handle_irq) from [<c0013e8c>] (__irq_svc+0x6c/0xa8)
    
    To fix this make sure that the trigger is fully initialized before
    requesting the interrupt.
    
    Fixes: ccd2b52f4ac6 ("staging:iio: Add common ADIS library")
    Reported-by: Robin Getz <Robin.Getz@analog.com>
    Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9dc4030c87b77f7856b7d1388ad908e6a6d5f363
Author: Stefan Windfeldt-Prytz <stefan.windfeldt@axis.com>
Date:   Thu Feb 15 15:02:53 2018 +0100

    iio: buffer: check if a buffer has been set up when poll is called
    
    commit 4cd140bda6494543f1c1b0ccceceaa44b676eef6 upstream.
    
    If no iio buffer has been set up and poll is called return 0.
    Without this check there will be a null pointer dereference when
    calling poll on a iio driver without an iio buffer.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Stefan Windfeldt-Prytz <stefan.windfeldt@axis.com>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1b985a6e8d4da148a320caf139ea9e8de8071a77
Author: Andreas Klinger <ak@it-klinger.de>
Date:   Thu Feb 1 21:49:24 2018 +0100

    iio: srf08: fix link error "devm_iio_triggered_buffer_setup" undefined
    
    commit 511051d509ec54642dd6d30fdf2caa33c23619cc upstream.
    
    Functions for triggered buffer support are needed by this module.
    If they are not defined accidentally by another driver, there's an error
    thrown out while linking.
    
    Add a select of IIO_BUFFER and IIO_TRIGGERED_BUFFER in the Kconfig file.
    
    Signed-off-by: Andreas Klinger <ak@it-klinger.de>
    Fixes: a83195937151 ("iio: srf08: add triggered buffer support")
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f4f94e9baeba909e2bc5902ed2dd033fa8bb74a3
Author: Fabrice Gasnier <fabrice.gasnier@st.com>
Date:   Tue Jan 23 17:04:56 2018 +0100

    iio: adc: stm32: fix stm32h7_adc_enable error handling
    
    commit a3b5655ebdb501a98a45c0d3265dca9f2fe0218a upstream.
    
    Error handling in stm32h7_adc_enable routine doesn't unwind enable
    sequence correctly. ADEN can only be cleared by hardware (e.g. by
    writing one to ADDIS).
    It's also better to clear ADRDY just after it's been set by hardware.
    
    Fixes: 95e339b6e85d ("iio: adc: stm32: add support for STM32H7")
    
    Signed-off-by: Fabrice Gasnier <fabrice.gasnier@st.com>
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2492eca0a05b05736cbcf7fc1f234a666c4fcc52
Author: Leon Romanovsky <leonro@mellanox.com>
Date:   Wed Feb 14 12:35:40 2018 +0200

    RDMA/uverbs: Sanitize user entered port numbers prior to access it
    
    commit 5d4c05c3ee36f67ddc107ab5ea0898af01a62cc1 upstream.
    
    ==================================================================
    BUG: KASAN: use-after-free in copy_ah_attr_from_uverbs+0x6f2/0x8c0
    Read of size 4 at addr ffff88006476a198 by task syzkaller697701/265
    
    CPU: 0 PID: 265 Comm: syzkaller697701 Not tainted 4.15.0+ #90
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
    Call Trace:
     dump_stack+0xde/0x164
     ? dma_virt_map_sg+0x22c/0x22c
     ? show_regs_print_info+0x17/0x17
     ? lock_contended+0x11a0/0x11a0
     print_address_description+0x83/0x3e0
     kasan_report+0x18c/0x4b0
     ? copy_ah_attr_from_uverbs+0x6f2/0x8c0
     ? copy_ah_attr_from_uverbs+0x6f2/0x8c0
     ? lookup_get_idr_uobject+0x120/0x200
     ? copy_ah_attr_from_uverbs+0x6f2/0x8c0
     copy_ah_attr_from_uverbs+0x6f2/0x8c0
     ? modify_qp+0xd0e/0x1350
     modify_qp+0xd0e/0x1350
     ib_uverbs_modify_qp+0xf9/0x170
     ? ib_uverbs_query_qp+0xa70/0xa70
     ib_uverbs_write+0x7f9/0xef0
     ? attach_entity_load_avg+0x8b0/0x8b0
     ? ib_uverbs_query_qp+0xa70/0xa70
     ? uverbs_devnode+0x110/0x110
     ? cyc2ns_read_end+0x10/0x10
     ? print_irqtrace_events+0x280/0x280
     ? sched_clock_cpu+0x18/0x200
     ? _raw_spin_unlock_irq+0x29/0x40
     ? _raw_spin_unlock_irq+0x29/0x40
     ? _raw_spin_unlock_irq+0x29/0x40
     ? time_hardirqs_on+0x27/0x670
     __vfs_write+0x10d/0x700
     ? uverbs_devnode+0x110/0x110
     ? kernel_read+0x170/0x170
     ? _raw_spin_unlock_irq+0x29/0x40
     ? finish_task_switch+0x1bd/0x7a0
     ? finish_task_switch+0x194/0x7a0
     ? prandom_u32_state+0xe/0x180
     ? rcu_read_unlock+0x80/0x80
     ? security_file_permission+0x93/0x260
     vfs_write+0x1b0/0x550
     SyS_write+0xc7/0x1a0
     ? SyS_read+0x1a0/0x1a0
     ? trace_hardirqs_on_thunk+0x1a/0x1c
     entry_SYSCALL_64_fastpath+0x1e/0x8b
    RIP: 0033:0x433c29
    RSP: 002b:00007ffcf2be82a8 EFLAGS: 00000217
    
    Allocated by task 62:
     kasan_kmalloc+0xa0/0xd0
     kmem_cache_alloc+0x141/0x480
     dup_fd+0x101/0xcc0
     copy_process.part.62+0x166f/0x4390
     _do_fork+0x1cb/0xe90
     kernel_thread+0x34/0x40
     call_usermodehelper_exec_work+0x112/0x260
     process_one_work+0x929/0x1aa0
     worker_thread+0x5c6/0x12a0
     kthread+0x346/0x510
     ret_from_fork+0x3a/0x50
    
    Freed by task 259:
     kasan_slab_free+0x71/0xc0
     kmem_cache_free+0xf3/0x4c0
     put_files_struct+0x225/0x2c0
     exit_files+0x88/0xc0
     do_exit+0x67c/0x1520
     do_group_exit+0xe8/0x380
     SyS_exit_group+0x1e/0x20
     entry_SYSCALL_64_fastpath+0x1e/0x8b
    
    The buggy address belongs to the object at ffff88006476a000
     which belongs to the cache files_cache of size 832
    The buggy address is located 408 bytes inside of
     832-byte region [ffff88006476a000, ffff88006476a340)
    The buggy address belongs to the page:
    page:ffffea000191da80 count:1 mapcount:0 mapping:          (null) index:0x0 compound_mapcount: 0
    flags: 0x4000000000008100(slab|head)
    raw: 4000000000008100 0000000000000000 0000000000000000 0000000100080008
    raw: 0000000000000000 0000000100000001 ffff88006bcf7a80 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
     ffff88006476a080: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff88006476a100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    >ffff88006476a180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
                                ^
     ffff88006476a200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
     ffff88006476a280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    ==================================================================
    
    Cc: syzkaller <syzkaller@googlegroups.com>
    Cc: <stable@vger.kernel.org> # 4.11
    Fixes: 44c58487d51a ("IB/core: Define 'ib' and 'roce' rdma_ah_attr types")
    Reported-by: Noa Osherovich <noaos@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 84205f964bcc09400c5e195dc6dbeee058f0aa6b
Author: Leon Romanovsky <leonro@mellanox.com>
Date:   Wed Feb 14 12:35:39 2018 +0200

    RDMA/uverbs: Fix circular locking dependency
    
    commit 1ff5325c3ca1843228a86549318bbd3b414b9207 upstream.
    
    Avoid circular locking dependency by calling
    to uobj_alloc_commit() outside of xrcd_tree_mutex lock.
    
    ======================================================
    WARNING: possible circular locking dependency detected
    4.15.0+ #87 Not tainted
    ------------------------------------------------------
    syzkaller401056/269 is trying to acquire lock:
     (&uverbs_dev->xrcd_tree_mutex){+.+.}, at: [<000000006c12d2cd>] uverbs_free_xrcd+0xd2/0x360
    
    but task is already holding lock:
     (&ucontext->uobjects_lock){+.+.}, at: [<00000000da010f09>] uverbs_cleanup_ucontext+0x168/0x730
    
    which lock already depends on the new lock.
    
    the existing dependency chain (in reverse order) is:
    
    -> #1 (&ucontext->uobjects_lock){+.+.}:
           __mutex_lock+0x111/0x1720
           rdma_alloc_commit_uobject+0x22c/0x600
           ib_uverbs_open_xrcd+0x61a/0xdd0
           ib_uverbs_write+0x7f9/0xef0
           __vfs_write+0x10d/0x700
           vfs_write+0x1b0/0x550
           SyS_write+0xc7/0x1a0
           entry_SYSCALL_64_fastpath+0x1e/0x8b
    
    -> #0 (&uverbs_dev->xrcd_tree_mutex){+.+.}:
           lock_acquire+0x19d/0x440
           __mutex_lock+0x111/0x1720
           uverbs_free_xrcd+0xd2/0x360
           remove_commit_idr_uobject+0x6d/0x110
           uverbs_cleanup_ucontext+0x2f0/0x730
           ib_uverbs_cleanup_ucontext.constprop.3+0x52/0x120
           ib_uverbs_close+0xf2/0x570
           __fput+0x2cd/0x8d0
           task_work_run+0xec/0x1d0
           do_exit+0x6a1/0x1520
           do_group_exit+0xe8/0x380
           SyS_exit_group+0x1e/0x20
           entry_SYSCALL_64_fastpath+0x1e/0x8b
    
    other info that might help us debug this:
    
     Possible unsafe locking scenario:
    
           CPU0                    CPU1
           ----                    ----
      lock(&ucontext->uobjects_lock);
                                   lock(&uverbs_dev->xrcd_tree_mutex);
                                   lock(&ucontext->uobjects_lock);
      lock(&uverbs_dev->xrcd_tree_mutex);
    
     *** DEADLOCK ***
    
    3 locks held by syzkaller401056/269:
     #0:  (&file->cleanup_mutex){+.+.}, at: [<00000000c9f0c252>] ib_uverbs_close+0xac/0x570
     #1:  (&ucontext->cleanup_rwsem){++++}, at: [<00000000b6994d49>] uverbs_cleanup_ucontext+0xf6/0x730
     #2:  (&ucontext->uobjects_lock){+.+.}, at: [<00000000da010f09>] uverbs_cleanup_ucontext+0x168/0x730
    
    stack backtrace:
    CPU: 0 PID: 269 Comm: syzkaller401056 Not tainted 4.15.0+ #87
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
    Call Trace:
     dump_stack+0xde/0x164
     ? dma_virt_map_sg+0x22c/0x22c
     ? uverbs_cleanup_ucontext+0x168/0x730
     ? console_unlock+0x502/0xbd0
     print_circular_bug.isra.24+0x35e/0x396
     ? print_circular_bug_header+0x12e/0x12e
     ? find_usage_backwards+0x30/0x30
     ? entry_SYSCALL_64_fastpath+0x1e/0x8b
     validate_chain.isra.28+0x25d1/0x40c0
     ? check_usage+0xb70/0xb70
     ? graph_lock+0x160/0x160
     ? find_usage_backwards+0x30/0x30
     ? cyc2ns_read_end+0x10/0x10
     ? print_irqtrace_events+0x280/0x280
     ? __lock_acquire+0x93d/0x1630
     __lock_acquire+0x93d/0x1630
     lock_acquire+0x19d/0x440
     ? uverbs_free_xrcd+0xd2/0x360
     __mutex_lock+0x111/0x1720
     ? uverbs_free_xrcd+0xd2/0x360
     ? uverbs_free_xrcd+0xd2/0x360
     ? __mutex_lock+0x828/0x1720
     ? mutex_lock_io_nested+0x1550/0x1550
     ? uverbs_cleanup_ucontext+0x168/0x730
     ? __lock_acquire+0x9a9/0x1630
     ? mutex_lock_io_nested+0x1550/0x1550
     ? uverbs_cleanup_ucontext+0xf6/0x730
     ? lock_contended+0x11a0/0x11a0
     ? uverbs_free_xrcd+0xd2/0x360
     uverbs_free_xrcd+0xd2/0x360
     remove_commit_idr_uobject+0x6d/0x110
     uverbs_cleanup_ucontext+0x2f0/0x730
     ? sched_clock_cpu+0x18/0x200
     ? uverbs_close_fd+0x1c0/0x1c0
     ib_uverbs_cleanup_ucontext.constprop.3+0x52/0x120
     ib_uverbs_close+0xf2/0x570
     ? ib_uverbs_remove_one+0xb50/0xb50
     ? ib_uverbs_remove_one+0xb50/0xb50
     __fput+0x2cd/0x8d0
     task_work_run+0xec/0x1d0
     do_exit+0x6a1/0x1520
     ? fsnotify_first_mark+0x220/0x220
     ? exit_notify+0x9f0/0x9f0
     ? entry_SYSCALL_64_fastpath+0x5/0x8b
     ? entry_SYSCALL_64_fastpath+0x5/0x8b
     ? trace_hardirqs_on_thunk+0x1a/0x1c
     ? time_hardirqs_on+0x27/0x670
     ? time_hardirqs_off+0x27/0x490
     ? syscall_return_slowpath+0x6c/0x460
     ? entry_SYSCALL_64_fastpath+0x5/0x8b
     do_group_exit+0xe8/0x380
     SyS_exit_group+0x1e/0x20
     entry_SYSCALL_64_fastpath+0x1e/0x8b
    RIP: 0033:0x431ce9
    
    Cc: syzkaller <syzkaller@googlegroups.com>
    Cc: <stable@vger.kernel.org> # 4.11
    Fixes: fd3c7904db6e ("IB/core: Change idr objects to use the new schema")
    Reported-by: Noa Osherovich <noaos@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit aaa1915e3d2cc1a626b47b38734bfa8387509615
Author: Leon Romanovsky <leonro@mellanox.com>
Date:   Wed Feb 14 12:35:38 2018 +0200

    RDMA/uverbs: Fix bad unlock balance in ib_uverbs_close_xrcd
    
    commit 5c2e1c4f926856717f3fd31932e926dc3fe77ebd upstream.
    
    There is no matching lock for this mutex. Git history suggests this is
    just a missed remnant from an earlier version of the function before
    this locking was moved into uverbs_free_xrcd.
    
    Originally this lock was protecting the xrcd_table_delete()
    
    =====================================
    WARNING: bad unlock balance detected!
    4.15.0+ #87 Not tainted
    -------------------------------------
    syzkaller223405/269 is trying to release lock (&uverbs_dev->xrcd_tree_mutex) at:
    [<00000000b8703372>] ib_uverbs_close_xrcd+0x195/0x1f0
    but there are no more locks to release!
    
    other info that might help us debug this:
    1 lock held by syzkaller223405/269:
     #0:  (&uverbs_dev->disassociate_srcu){....}, at: [<000000005af3b960>] ib_uverbs_write+0x265/0xef0
    
    stack backtrace:
    CPU: 0 PID: 269 Comm: syzkaller223405 Not tainted 4.15.0+ #87
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
    Call Trace:
     dump_stack+0xde/0x164
     ? dma_virt_map_sg+0x22c/0x22c
     ? ib_uverbs_write+0x265/0xef0
     ? console_unlock+0x502/0xbd0
     ? ib_uverbs_close_xrcd+0x195/0x1f0
     print_unlock_imbalance_bug+0x131/0x160
     lock_release+0x59d/0x1100
     ? ib_uverbs_close_xrcd+0x195/0x1f0
     ? lock_acquire+0x440/0x440
     ? lock_acquire+0x440/0x440
     __mutex_unlock_slowpath+0x88/0x670
     ? wait_for_completion+0x4c0/0x4c0
     ? rdma_lookup_get_uobject+0x145/0x2f0
     ib_uverbs_close_xrcd+0x195/0x1f0
     ? ib_uverbs_open_xrcd+0xdd0/0xdd0
     ib_uverbs_write+0x7f9/0xef0
     ? cyc2ns_read_end+0x10/0x10
     ? ib_uverbs_open_xrcd+0xdd0/0xdd0
     ? uverbs_devnode+0x110/0x110
     ? cyc2ns_read_end+0x10/0x10
     ? cyc2ns_read_end+0x10/0x10
     ? sched_clock_cpu+0x18/0x200
     __vfs_write+0x10d/0x700
     ? uverbs_devnode+0x110/0x110
     ? kernel_read+0x170/0x170
     ? __fget+0x358/0x5d0
     ? security_file_permission+0x93/0x260
     vfs_write+0x1b0/0x550
     SyS_write+0xc7/0x1a0
     ? SyS_read+0x1a0/0x1a0
     ? trace_hardirqs_on_thunk+0x1a/0x1c
     entry_SYSCALL_64_fastpath+0x1e/0x8b
    RIP: 0033:0x4335c9
    
    Cc: syzkaller <syzkaller@googlegroups.com>
    Cc: <stable@vger.kernel.org> # 4.11
    Fixes: fd3c7904db6e ("IB/core: Change idr objects to use the new schema")
    Reported-by: Noa Osherovich <noaos@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit f3d66d43500c60192c9600a15e8e9f9b931ff389
Author: Leon Romanovsky <leonro@mellanox.com>
Date:   Tue Feb 13 12:18:41 2018 +0200

    RDMA/uverbs: Protect from command mask overflow
    
    commit 3f802b162dbf4a558ff98986449eddc717826209 upstream.
    
    The command number is not bounds checked against the command mask before it
    is shifted, resulting in an ubsan hit. This does not cause malfunction since
    the command number is eventually bounds checked, but we can make this ubsan
    clean by moving the bounds check to before the mask check.
    
    ================================================================================
    UBSAN: Undefined behaviour in
    drivers/infiniband/core/uverbs_main.c:647:21
    shift exponent 207 is too large for 64-bit type 'long long unsigned int'
    CPU: 0 PID: 446 Comm: syz-executor3 Not tainted 4.15.0-rc2+ #61
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
    Call Trace:
    dump_stack+0xde/0x164
    ? dma_virt_map_sg+0x22c/0x22c
    ubsan_epilogue+0xe/0x81
    __ubsan_handle_shift_out_of_bounds+0x293/0x2f7
    ? debug_check_no_locks_freed+0x340/0x340
    ? __ubsan_handle_load_invalid_value+0x19b/0x19b
    ? lock_acquire+0x440/0x440
    ? lock_acquire+0x19d/0x440
    ? __might_fault+0xf4/0x240
    ? ib_uverbs_write+0x68d/0xe20
    ib_uverbs_write+0x68d/0xe20
    ? __lock_acquire+0xcf7/0x3940
    ? uverbs_devnode+0x110/0x110
    ? cyc2ns_read_end+0x10/0x10
    ? sched_clock_cpu+0x18/0x200
    ? sched_clock_cpu+0x18/0x200
    __vfs_write+0x10d/0x700
    ? uverbs_devnode+0x110/0x110
    ? kernel_read+0x170/0x170
    ? __fget+0x35b/0x5d0
    ? security_file_permission+0x93/0x260
    vfs_write+0x1b0/0x550
    SyS_write+0xc7/0x1a0
    ? SyS_read+0x1a0/0x1a0
    ? trace_hardirqs_on_thunk+0x1a/0x1c
    entry_SYSCALL_64_fastpath+0x18/0x85
    RIP: 0033:0x448e29
    RSP: 002b:00007f033f567c58 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 00007f033f5686bc RCX: 0000000000448e29
    RDX: 0000000000000060 RSI: 0000000020001000 RDI: 0000000000000012
    RBP: 000000000070bea0 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff
    R13: 00000000000056a0 R14: 00000000006e8740 R15: 0000000000000000
    ================================================================================
    
    Cc: syzkaller <syzkaller@googlegroups.com>
    Cc: <stable@vger.kernel.org> # 4.5
    Fixes: 2dbd5186a39c ("IB/core: IB/core: Allow legacy verbs through extended interfaces")
    Reported-by: Noa Osherovich <noaos@mellanox.com>
    Reviewed-by: Matan Barak <matanb@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit da768ed845a5228d0044d92faab4fd8de98c86fd
Author: Leon Romanovsky <leonro@mellanox.com>
Date:   Tue Feb 13 12:18:37 2018 +0200

    RDMA/uverbs: Protect from races between lookup and destroy of uobjects
    
    commit 6623e3e3cd78020016d3fa42555763178e94ab64 upstream.
    
    The race is between lookup_get_idr_uobject and
    uverbs_idr_remove_uobj -> uverbs_uobject_put.
    
    We deliberately do not call sychronize_rcu after the idr_remove in
    uverbs_idr_remove_uobj for performance reasons, instead we call
    kfree_rcu() during uverbs_uobject_put.
    
    However, this means we can obtain pointers to uobj's that have
    already been released and must protect against krefing them
    using kref_get_unless_zero.
    
    ==================================================================
    BUG: KASAN: use-after-free in copy_ah_attr_from_uverbs.isra.2+0x860/0xa00
    Read of size 4 at addr ffff88005fda1ac8 by task syz-executor2/441
    
    CPU: 1 PID: 441 Comm: syz-executor2 Not tainted 4.15.0-rc2+ #56
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS
    rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
    Call Trace:
    dump_stack+0x8d/0xd4
    print_address_description+0x73/0x290
    kasan_report+0x25c/0x370
    ? copy_ah_attr_from_uverbs.isra.2+0x860/0xa00
    copy_ah_attr_from_uverbs.isra.2+0x860/0xa00
    ? uverbs_try_lock_object+0x68/0xc0
    ? modify_qp.isra.7+0xdc4/0x10e0
    modify_qp.isra.7+0xdc4/0x10e0
    ib_uverbs_modify_qp+0xfe/0x170
    ? ib_uverbs_query_qp+0x970/0x970
    ? __lock_acquire+0xa11/0x1da0
    ib_uverbs_write+0x55a/0xad0
    ? ib_uverbs_query_qp+0x970/0x970
    ? ib_uverbs_query_qp+0x970/0x970
    ? ib_uverbs_open+0x760/0x760
    ? futex_wake+0x147/0x410
    ? sched_clock_cpu+0x18/0x180
    ? check_prev_add+0x1680/0x1680
    ? do_futex+0x3b6/0xa30
    ? sched_clock_cpu+0x18/0x180
    __vfs_write+0xf7/0x5c0
    ? ib_uverbs_open+0x760/0x760
    ? kernel_read+0x110/0x110
    ? lock_acquire+0x370/0x370
    ? __fget+0x264/0x3b0
    vfs_write+0x18a/0x460
    SyS_write+0xc7/0x1a0
    ? SyS_read+0x1a0/0x1a0
    ? trace_hardirqs_on_thunk+0x1a/0x1c
    entry_SYSCALL_64_fastpath+0x18/0x85
    RIP: 0033:0x448e29
    RSP: 002b:00007f443fee0c58 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
    RAX: ffffffffffffffda RBX: 00007f443fee16bc RCX: 0000000000448e29
    RDX: 0000000000000078 RSI: 00000000209f8000 RDI: 0000000000000012
    RBP: 000000000070bea0 R08: 0000000000000000 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000246 R12: 00000000ffffffff
    R13: 0000000000008e98 R14: 00000000006ebf38 R15: 0000000000000000
    
    Allocated by task 1:
    kmem_cache_alloc_trace+0x16c/0x2f0
    mlx5_alloc_cmd_msg+0x12e/0x670
    cmd_exec+0x419/0x1810
    mlx5_cmd_exec+0x40/0x70
    mlx5_core_mad_ifc+0x187/0x220
    mlx5_MAD_IFC+0xd7/0x1b0
    mlx5_query_mad_ifc_gids+0x1f3/0x650
    mlx5_ib_query_gid+0xa4/0xc0
    ib_query_gid+0x152/0x1a0
    ib_query_port+0x21e/0x290
    mlx5_port_immutable+0x30f/0x490
    ib_register_device+0x5dd/0x1130
    mlx5_ib_add+0x3e7/0x700
    mlx5_add_device+0x124/0x510
    mlx5_register_interface+0x11f/0x1c0
    mlx5_ib_init+0x56/0x61
    do_one_initcall+0xa3/0x250
    kernel_init_freeable+0x309/0x3b8
    kernel_init+0x14/0x180
    ret_from_fork+0x24/0x30
    
    Freed by task 1:
    kfree+0xeb/0x2f0
    mlx5_free_cmd_msg+0xcd/0x140
    cmd_exec+0xeba/0x1810
    mlx5_cmd_exec+0x40/0x70
    mlx5_core_mad_ifc+0x187/0x220
    mlx5_MAD_IFC+0xd7/0x1b0
    mlx5_query_mad_ifc_gids+0x1f3/0x650
    mlx5_ib_query_gid+0xa4/0xc0
    ib_query_gid+0x152/0x1a0
    ib_query_port+0x21e/0x290
    mlx5_port_immutable+0x30f/0x490
    ib_register_device+0x5dd/0x1130
    mlx5_ib_add+0x3e7/0x700
    mlx5_add_device+0x124/0x510
    mlx5_register_interface+0x11f/0x1c0
    mlx5_ib_init+0x56/0x61
    do_one_initcall+0xa3/0x250
    kernel_init_freeable+0x309/0x3b8
    kernel_init+0x14/0x180
    ret_from_fork+0x24/0x30
    
    The buggy address belongs to the object at ffff88005fda1ab0
    which belongs to the cache kmalloc-32 of size 32
    The buggy address is located 24 bytes inside of
    32-byte region [ffff88005fda1ab0, ffff88005fda1ad0)
    The buggy address belongs to the page:
    page:00000000d5655c19 count:1 mapcount:0 mapping: (null)
    index:0xffff88005fda1fc0
    flags: 0x4000000000000100(slab)
    raw: 4000000000000100 0000000000000000 ffff88005fda1fc0 0000000180550008
    raw: ffffea00017f6780 0000000400000004 ffff88006c803980 0000000000000000
    page dumped because: kasan: bad access detected
    
    Memory state around the buggy address:
    ffff88005fda1980: fc fc fb fb fb fb fc fc fb fb fb fb fc fc fb fb
    ffff88005fda1a00: fb fb fc fc fb fb fb fb fc fc 00 00 00 00 fc fc
    ffff88005fda1a80: fb fb fb fb fc fc fb fb fb fb fc fc fb fb fb fb
    ffff88005fda1b00: fc fc 00 00 00 00 fc fc fb fb fb fb fc fc fb fb
    ffff88005fda1b80: fb fb fc fc fb fb fb fb fc fc fb fb fb fb fc fc
    ==================================================================@
    
    Cc: syzkaller <syzkaller@googlegroups.com>
    Cc: <stable@vger.kernel.org> # 4.11
    Fixes: 3832125624b7 ("IB/core: Add support for idr types")
    Reported-by: Noa Osherovich <noaos@mellanox.com>
    Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
    Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 606f74e3d01b39ab2b602102d2c56a1ef9c9b3b1
Author: Hans de Goede <hdegoede@redhat.com>
Date:   Tue Feb 13 20:25:50 2018 +0100

    extcon: int3496: process id-pin first so that we start with the right status
    
    commit 0434352d3d2e950cf5e743f6062abd87de22f960 upstream.
    
    Some other drivers may be waiting for our extcon to show-up, exiting their
    probe methods with -EPROBE_DEFER until we show up.
    
    These drivers will typically get the cable state directly after getting
    the extcon, this commit changes the int3496 code to wait for the initial
    processing of the id-pin to complete before exiting probe() with 0, which
    will cause devices waiting on the defered probe to get reprobed.
    
    This fixes a race where the initial work might still be running while other
    drivers were already calling extcon_get_state().
    
    Fixes: 2f556bdb9f2e ("extcon: int3496: Add Intel INT3496 ACPI ... driver")
    Cc: stable@vger.kernel.org
    Signed-off-by: Hans de Goede <hdegoede@redhat.com>
    Signed-off-by: Chanwoo Choi <cw00.choi@samsung.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 29e76b211e9231e1d565551de84d9abd6eff5658
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Feb 22 14:38:33 2018 +0000

    PKCS#7: fix certificate blacklisting
    
    commit 29f4a67c17e19314b7d74b8569be935e6c7edf50 upstream.
    
    If there is a blacklisted certificate in a SignerInfo's certificate
    chain, then pkcs7_verify_sig_chain() sets sinfo->blacklisted and returns
    0.  But, pkcs7_verify() fails to handle this case appropriately, as it
    actually continues on to the line 'actual_ret = 0;', indicating that the
    SignerInfo has passed verification.  Consequently, PKCS#7 signature
    verification ignores the certificate blacklist.
    
    Fix this by not considering blacklisted SignerInfos to have passed
    verification.
    
    Also fix the function comment with regards to when 0 is returned.
    
    Fixes: 03bb79315ddc ("PKCS#7: Handle blacklisted certificates")
    Cc: <stable@vger.kernel.org> # v4.12+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 1a1f7f726bd8670b7b371f4e440533cdcb9d8110
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Feb 22 14:38:33 2018 +0000

    PKCS#7: fix certificate chain verification
    
    commit 971b42c038dc83e3327872d294fe7131bab152fc upstream.
    
    When pkcs7_verify_sig_chain() is building the certificate chain for a
    SignerInfo using the certificates in the PKCS#7 message, it is passing
    the wrong arguments to public_key_verify_signature().  Consequently,
    when the next certificate is supposed to be used to verify the previous
    certificate, the next certificate is actually used to verify itself.
    
    An attacker can use this bug to create a bogus certificate chain that
    has no cryptographic relationship between the beginning and end.
    
    Fortunately I couldn't quite find a way to use this to bypass the
    overall signature verification, though it comes very close.  Here's the
    reasoning: due to the bug, every certificate in the chain beyond the
    first actually has to be self-signed (where "self-signed" here refers to
    the actual key and signature; an attacker might still manipulate the
    certificate fields such that the self_signed flag doesn't actually get
    set, and thus the chain doesn't end immediately).  But to pass trust
    validation (pkcs7_validate_trust()), either the SignerInfo or one of the
    certificates has to actually be signed by a trusted key.  Since only
    self-signed certificates can be added to the chain, the only way for an
    attacker to introduce a trusted signature is to include a self-signed
    trusted certificate.
    
    But, when pkcs7_validate_trust_one() reaches that certificate, instead
    of trying to verify the signature on that certificate, it will actually
    look up the corresponding trusted key, which will succeed, and then try
    to verify the *previous* certificate, which will fail.  Thus, disaster
    is narrowly averted (as far as I could tell).
    
    Fixes: 6c2dc5ae4ab7 ("X.509: Extract signature digest and make self-signed cert checks earlier")
    Cc: <stable@vger.kernel.org> # v4.7+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 99b2095ac71e316ed366f027913646d40640d0be
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Feb 22 14:38:34 2018 +0000

    X.509: fix NULL dereference when restricting key with unsupported_sig
    
    commit 4b34968e77ad09628cfb3c4a7daf2adc2cefc6e8 upstream.
    
    The asymmetric key type allows an X.509 certificate to be added even if
    its signature's hash algorithm is not available in the crypto API.  In
    that case 'payload.data[asym_auth]' will be NULL.  But the key
    restriction code failed to check for this case before trying to use the
    signature, resulting in a NULL pointer dereference in
    key_or_keyring_common() or in restrict_link_by_signature().
    
    Fix this by returning -ENOPKG when the signature is unsupported.
    
    Reproducer when all the CONFIG_CRYPTO_SHA512* options are disabled and
    keyctl has support for the 'restrict_keyring' command:
    
        keyctl new_session
        keyctl restrict_keyring @s asymmetric builtin_trusted
        openssl req -new -sha512 -x509 -batch -nodes -outform der \
            | keyctl padd asymmetric desc @s
    
    Fixes: a511e1af8b12 ("KEYS: Move the point of trust determination to __key_link()")
    Cc: <stable@vger.kernel.org> # v4.7+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit dcb04cc794835964c1efeea24b392e5e35e88ab8
Author: Eric Biggers <ebiggers@google.com>
Date:   Thu Feb 22 14:38:33 2018 +0000

    X.509: fix BUG_ON() when hash algorithm is unsupported
    
    commit 437499eea4291ae9621e8763a41df027c110a1ef upstream.
    
    The X.509 parser mishandles the case where the certificate's signature's
    hash algorithm is not available in the crypto API.  In this case,
    x509_get_sig_params() doesn't allocate the cert->sig->digest buffer;
    this part seems to be intentional.  However,
    public_key_verify_signature() is still called via
    x509_check_for_self_signed(), which triggers the 'BUG_ON(!sig->digest)'.
    
    Fix this by making public_key_verify_signature() return -ENOPKG if the
    hash buffer has not been allocated.
    
    Reproducer when all the CONFIG_CRYPTO_SHA512* options are disabled:
    
        openssl req -new -sha512 -x509 -batch -nodes -outform der \
            | keyctl padd asymmetric desc @s
    
    Fixes: 6c2dc5ae4ab7 ("X.509: Extract signature digest and make self-signed cert checks earlier")
    Reported-by: Paolo Valente <paolo.valente@linaro.org>
    Cc: Paolo Valente <paolo.valente@linaro.org>
    Cc: <stable@vger.kernel.org> # v4.7+
    Signed-off-by: Eric Biggers <ebiggers@google.com>
    Signed-off-by: David Howells <dhowells@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit fa465cd5681334cc7db63c9da999dcbb0137fb8c
Author: Eric Anholt <eric@anholt.net>
Date:   Thu Feb 8 14:54:05 2018 +0100

    i2c: bcm2835: Set up the rising/falling edge delays
    
    commit fe32a815f05c8568669a062587435e15f9345764 upstream.
    
    We were leaving them in the power on state (or the state the firmware
    had set up for some client, if we were taking over from them).  The
    boot state was 30 core clocks, when we actually want to sample some
    time after (to make sure that the new input bit has actually arrived).
    
    Signed-off-by: Eric Anholt <eric@anholt.net>
    Signed-off-by: Boris Brezillon <boris.brezillon@bootlin.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Cc: stable@kernel.org
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 3e1d63cc7a5f6580c751d8f9e6be8c95791aa1cb
Author: Ben Gardner <gardner.ben@gmail.com>
Date:   Wed Feb 14 09:29:52 2018 -0600

    i2c: designware: must wait for enable
    
    commit fba4adbbf670577e605f9ad306629db6031cd48b upstream.
    
    One I2C bus on my Atom E3845 board has been broken since 4.9.
    It has two devices, both declared by ACPI and with built-in drivers.
    
    There are two back-to-back transactions originating from the kernel, one
    targeting each device. The first transaction works, the second one locks
    up the I2C controller. The controller never recovers.
    
    These kernel logs show up whenever an I2C transaction is attempted after
    this failure.
    i2c-designware-pci 0000:00:18.3: timeout in disabling adapter
    i2c-designware-pci 0000:00:18.3: timeout waiting for bus ready
    
    Waiting for the I2C controller status to indicate that it is enabled
    before programming it fixes the issue.
    
    I have tested this patch on 4.14 and 4.15.
    
    Fixes: commit 2702ea7dbec5 ("i2c: designware: wait for disable/enable only if necessary")
    Cc: linux-stable <stable@vger.kernel.org> #4.13+
    Signed-off-by: Ben Gardner <gardner.ben@gmail.com>
    Acked-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
    Reviewed-by: José Roberto de Souza <jose.souza@intel.com>
    Signed-off-by: Wolfram Sang <wsa@the-dreams.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ebaefbdaf552f9e159ea08f54afb6c80e20b2641
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Fri Feb 2 16:31:23 2018 +0100

    cfg80211: fix cfg80211_beacon_dup
    
    commit bee92d06157fc39d5d7836a061c7d41289a55797 upstream.
    
    gcc-8 warns about some obviously incorrect code:
    
    net/mac80211/cfg.c: In function 'cfg80211_beacon_dup':
    net/mac80211/cfg.c:2896:3: error: 'memcpy' source argument is the same as destination [-Werror=restrict]
    
    From the context, I conclude that we want to copy from beacon into
    new_beacon, as we do in the rest of the function.
    
    Cc: stable@vger.kernel.org
    Fixes: 73da7d5bab79 ("mac80211: add channel switch command and beacon callbacks")
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Signed-off-by: Johannes Berg <johannes.berg@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2f9eed6e3772e12e1d715a8d508f962ad8a51caa
Author: James Hogan <jhogan@kernel.org>
Date:   Tue Feb 20 15:44:37 2018 +0000

    MIPS: Drop spurious __unused in struct compat_flock
    
    commit 6ae1756faddefd7494353380ee546dd38c2f97eb upstream.
    
    MIPS' struct compat_flock doesn't match the 32-bit struct flock, as it
    has an extra short __unused before pad[4], which combined with alignment
    increases the size to 40 bytes compared with struct flock's 36 bytes.
    
    Since commit 8c6657cb50cb ("Switch flock copyin/copyout primitives to
    copy_{from,to}_user()"), put_compat_flock() writes the full compat_flock
    struct to userland, which results in corruption of the userland word
    after the struct flock when running 32-bit userlands on 64-bit kernels.
    
    This was observed to cause a bus error exception when starting Firefox
    on Debian 8 (Jessie).
    
    Reported-by: Peter Mamonov <pmamonov@gmail.com>
    Signed-off-by: James Hogan <jhogan@kernel.org>
    Tested-by: Peter Mamonov <pmamonov@gmail.com>
    Cc: Ralf Baechle <ralf@linux-mips.org>
    Cc: Al Viro <viro@zeniv.linux.org.uk>
    Cc: linux-mips@linux-mips.org
    Cc: <stable@vger.kernel.org> # 4.13+
    Patchwork: https://patchwork.linux-mips.org/patch/18646/
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4fc16629e9bc8421ef4a5ae6248d5366fdb93185
Author: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
Date:   Tue Jan 23 20:11:32 2018 -0600

    scsi: ibmvfc: fix misdefined reserved field in ibmvfc_fcp_rsp_info
    
    commit c39813652700f3df552b6557530f1e5f782dbe2f upstream.
    
    The fcp_rsp_info structure as defined in the FC spec has an initial 3
    bytes reserved field. The ibmvfc driver mistakenly defined this field as
    4 bytes resulting in the rsp_code field being defined in what should be
    the start of the second reserved field and thus always being reported as
    zero by the driver.
    
    Ideally, we should wire ibmvfc up with libfc for the sake of code
    deduplication, and ease of maintaining standardized structures in a
    single place. However, for now simply fixup the definition in ibmvfc for
    backporting to distros on older kernels. Wiring up with libfc will be
    done in a followup patch.
    
    Cc: <stable@vger.kernel.org>
    Reported-by: Hannes Reinecke <hare@suse.de>
    Signed-off-by: Tyrel Datwyler <tyreld@linux.vnet.ibm.com>
    Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 53c86c2d90c69e11143d61c03f5d2142149e84eb
Author: Max Filippov <jcmvbkbc@gmail.com>
Date:   Tue Feb 13 15:31:05 2018 -0800

    xtensa: fix high memory/reserved memory collision
    
    commit 6ac5a11dc674bc5016ea716e8082fff61f524dc1 upstream.
    
    Xtensa memory initialization code frees high memory pages without
    checking whether they are in the reserved memory regions or not. That
    results in invalid value of totalram_pages and duplicate page usage by
    CMA and highmem. It produces a bunch of BUGs at startup looking like
    this:
    
    BUG: Bad page state in process swapper  pfn:70800
    page:be60c000 count:0 mapcount:-127 mapping:  (null) index:0x1
    flags: 0x80000000()
    raw: 80000000 00000000 00000001 ffffff80 00000000 be60c014 be60c014 0000000a
    page dumped because: nonzero mapcount
    Modules linked in:
    CPU: 0 PID: 1 Comm: swapper Tainted: G    B            4.16.0-rc1-00015-g7928b2cbe55b-dirty #23
    Stack:
     bd839d33 00000000 00000018 ba97b64c a106578c bd839d70 be60c000 00000000
     a1378054 bd86a000 00000003 ba97b64c a1066166 bd839da0 be60c000 ffe00000
     a1066b58 bd839dc0 be504000 00000000 000002f4 bd838000 00000000 0000001e
    Call Trace:
     [<a1065734>] bad_page+0xac/0xd0
     [<a106578c>] free_pages_check_bad+0x34/0x4c
     [<a1066166>] __free_pages_ok+0xae/0x14c
     [<a1066b58>] __free_pages+0x30/0x64
     [<a1365de5>] init_cma_reserved_pageblock+0x35/0x44
     [<a13682dc>] cma_init_reserved_areas+0xf4/0x148
     [<a10034b8>] do_one_initcall+0x80/0xf8
     [<a1361c16>] kernel_init_freeable+0xda/0x13c
     [<a125b59d>] kernel_init+0x9/0xd0
     [<a1004304>] ret_from_kernel_thread+0xc/0x18
    
    Only free high memory pages that are not reserved.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: Max Filippov <jcmvbkbc@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9428e622eca72b8664e856766fce52ea91a12a8c
Author: Kees Cook <keescook@chromium.org>
Date:   Thu Feb 22 16:59:26 2018 -0800

    MIPS: boot: Define __ASSEMBLY__ for its.S build
    
    commit 0f9da844d87796ac31b04e81ee95e155e9043132 upstream.
    
    The MIPS %.its.S compiler command did not define __ASSEMBLY__, which meant
    when compiler_types.h was added to kconfig.h, unexpected things appeared
    (e.g. struct declarations) which should not have been present. As done in
    the general %.S compiler command, __ASSEMBLY__ is now included here too.
    
    The failure was:
    
        Error: arch/mips/boot/vmlinux.gz.its:201.1-2 syntax error
        FATAL ERROR: Unable to parse input tree
        /usr/bin/mkimage: Can't read arch/mips/boot/vmlinux.gz.itb.tmp: Invalid argument
        /usr/bin/mkimage Can't add hashes to FIT blob
    
    Reported-by: kbuild test robot <lkp@intel.com>
    Fixes: 28128c61e08e ("kconfig.h: Include compiler types to avoid missed struct attributes")
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b3aff5c3b2a1b9f53e80f60d129c9d81b6e8d60f
Author: Kees Cook <keescook@chromium.org>
Date:   Thu Feb 22 09:41:40 2018 -0800

    kconfig.h: Include compiler types to avoid missed struct attributes
    
    commit 28128c61e08eaeced9cc8ec0e6b5d677b5b94690 upstream.
    
    The header files for some structures could get included in such a way
    that struct attributes (specifically __randomize_layout from path.h) would
    be parsed as variable names instead of attributes. This could lead to
    some instances of a structure being unrandomized, causing nasty GPFs, etc.
    
    This patch makes sure the compiler_types.h header is included in
    kconfig.h so that we've always got types and struct attributes defined,
    since kconfig.h is included from the compiler command line.
    
    Reported-by: Patrick McLean <chutzpah@gentoo.org>
    Root-caused-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
    Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
    Tested-by: Maciej S. Szmigiero <mail@maciej.szmigiero.name>
    Fixes: 3859a271a003 ("randstruct: Mark various structs for randomization")
    Signed-off-by: Kees Cook <keescook@chromium.org>
    Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 35d75b7bfc67520fb1d93b63ab3ae27992006f66
Author: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Date:   Fri Feb 23 18:29:02 2018 +0000

    arm64: mm: don't write garbage into TTBR1_EL1 register
    
    Stable backport commit 173358a49173 ("arm64: kpti: Add ->enable callback
    to remap swapper using nG mappings") of upstream commit f992b4dfd58b did
    not survive the backporting process unscathed, and ends up writing garbage
    into the TTBR1_EL1 register, rather than pointing it to the zero page to
    disable translations. Fix that.
    
    Cc: <stable@vger.kernel.org> #v4.14
    Reported-by: Nicolas Dechesne <nicolas.dechesne@linaro.org>
    Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
    Acked-by: Will Deacon <will.deacon@arm.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 485595768d89f53581a7527285acf97880fc65a6
Author: Paolo Abeni <pabeni@redhat.com>
Date:   Thu Feb 8 12:19:00 2018 +0100

    netfilter: drop outermost socket lock in getsockopt()
    
    commit 01ea306f2ac2baff98d472da719193e738759d93 upstream.
    
    The Syzbot reported a possible deadlock in the netfilter area caused by
    rtnl lock, xt lock and socket lock being acquired with a different order
    on different code paths, leading to the following backtrace:
    Reviewed-by: Xin Long <lucien.xin@gmail.com>
    
    ======================================================
    WARNING: possible circular locking dependency detected
    4.15.0+ #301 Not tainted
    ------------------------------------------------------
    syzkaller233489/4179 is trying to acquire lock:
      (rtnl_mutex){+.+.}, at: [<0000000048e996fd>] rtnl_lock+0x17/0x20
    net/core/rtnetlink.c:74
    
    but task is already holding lock:
      (&xt[i].mutex){+.+.}, at: [<00000000328553a2>]
    xt_find_table_lock+0x3e/0x3e0 net/netfilter/x_tables.c:1041
    
    which lock already depends on the new lock.
    ===
    
    Since commit 3f34cfae1230 ("netfilter: on sockopt() acquire sock lock
    only in the required scope"), we already acquire the socket lock in
    the innermost scope, where needed. In such commit I forgot to remove
    the outer-most socket lock from the getsockopt() path, this commit
    addresses the issues dropping it now.
    
    v1 -> v2: fix bad subj, added relavant 'fixes' tag
    
    Fixes: 22265a5c3c10 ("netfilter: xt_TEE: resolve oif using netdevice notifiers")
    Fixes: 202f59afd441 ("netfilter: ipt_CLUSTERIP: do not hold dev")
    Fixes: 3f34cfae1230 ("netfilter: on sockopt() acquire sock lock only in the required scope")
    Reported-by: syzbot+ddde1c7b7ff7442d7f2d@syzkaller.appspotmail.com
    Suggested-by: Florian Westphal <fw@strlen.de>
    Signed-off-by: Paolo Abeni <pabeni@redhat.com>
    Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
    Tested-by: Krzysztof Piotr Oledzki <ole@ans.pl>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>