commit f3542ea105aefbb16cbcac4f30e2cf583a66d3d8
Author: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Date:   Wed Mar 9 15:33:53 2016 -0800

    Linux 3.14.64

commit 8a8d021ee3cb9c83408e0f456a22500d4a022f14
Author: Mike Christie <mchristi@redhat.com>
Date:   Mon Jan 18 14:09:27 2016 -0600

    target: Fix WRITE_SAME/DISCARD conversion to linux 512b sectors
    
    commit 8a9ebe717a133ba7bc90b06047f43cc6b8bcb8b3 upstream.
    
    In a couple places we are not converting to/from the Linux
    block layer 512 bytes sectors.
    
    1.
    
    The request queue values and what we do are a mismatch of
    things:
    
    max_discard_sectors - This is in linux block layer 512 byte
    sectors. We are just copying this to max_unmap_lba_count.
    
    discard_granularity - This is in bytes. We are converting it
    to Linux block layer 512 byte sectors.
    
    discard_alignment - This is in bytes. We are just copying
    this over.
    
    The problem is that the core LIO code exports these values in
    spc_emulate_evpd_b0 and we use them to test request arguments
    in sbc_execute_unmap, but we never convert to the block size
    we export to the initiator. If we are not using 512 byte sectors
    then we are exporting the wrong values or are checks are off.
    And, for the discard_alignment/bytes case we are just plain messed
    up.
    
    2.
    
    blkdev_issue_discard's start and number of sector arguments
    are supposed to be in linux block layer 512 byte sectors. We are
    currently passing in the values we get from the initiator which
    might be based on some other sector size.
    
    There is a similar problem in iblock_execute_write_same where
    the bio functions want values in 512 byte sectors but we are
    passing in what we got from the initiator.
    
    Signed-off-by: Mike Christie <mchristi@redhat.com>
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 9bb7ca10eabdfdf2a634f31da49bfef79bfa3194
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date:   Fri Feb 5 14:51:36 2016 -0800

    target: Fix race with SCF_SEND_DELAYED_TAS handling
    
    commit 310d3d314be7f0a84011ebdc4bdccbcae9755a87 upstream.
    
    This patch fixes a race between setting of SCF_SEND_DELAYED_TAS
    in transport_send_task_abort(), and check of the same bit in
    transport_check_aborted_status().
    
    It adds a __transport_check_aborted_status() version that is
    used by target_execute_cmd() when se_cmd->t_state_lock is
    held, and a transport_check_aborted_status() wrapper for
    all other existing callers.
    
    Also, it handles the case where the check happens before
    transport_send_task_abort() gets called.  For this, go
    ahead and set SCF_SEND_DELAYED_TAS early when necessary,
    and have transport_send_task_abort() send the abort.
    
    Cc: Quinn Tran <quinn.tran@qlogic.com>
    Cc: Himanshu Madhani <himanshu.madhani@qlogic.com>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: Mike Christie <mchristi@redhat.com>
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 77f97c3fa58287ebf888fca80264b5fdd03b15d2
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date:   Tue Jan 19 15:23:02 2016 -0800

    target: Fix remote-port TMR ABORT + se_cmd fabric stop
    
    commit 0f4a943168f31d29a1701908931acaba518b131a upstream.
    
    To address the bug where fabric driver level shutdown
    of se_cmd occurs at the same time when TMR CMD_T_ABORTED
    is happening resulting in a -1 ->cmd_kref, this patch
    adds a CMD_T_FABRIC_STOP bit that is used to determine
    when TMR + driver I_T nexus shutdown is happening
    concurrently.
    
    It changes target_sess_cmd_list_set_waiting() to obtain
    se_cmd->cmd_kref + set CMD_T_FABRIC_STOP, and drop local
    reference in target_wait_for_sess_cmds() and invoke extra
    target_put_sess_cmd() during Task Aborted Status (TAS)
    when necessary.
    
    Also, it adds a new target_wait_free_cmd() wrapper around
    transport_wait_for_tasks() for the special case within
    transport_generic_free_cmd() to set CMD_T_FABRIC_STOP,
    and is now aware of CMD_T_ABORTED + CMD_T_TAS status
    bits to know when an extra transport_put_cmd() during
    TAS is required.
    
    Note transport_generic_free_cmd() is expected to block on
    cmd->cmd_wait_comp in order to follow what iscsi-target
    expects during iscsi_conn context se_cmd shutdown.
    
    Cc: Quinn Tran <quinn.tran@qlogic.com>
    Cc: Himanshu Madhani <himanshu.madhani@qlogic.com>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: Mike Christie <mchristi@redhat.com>
    Signed-off-by: Nicholas Bellinger <nab@daterainc.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 02954fc509b8a6dd63ced2bf1b277c90bff4abf6
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date:   Sat Jan 16 12:49:49 2016 -0800

    target: Fix TAS handling for multi-session se_node_acls
    
    commit ebde1ca5a908b10312db4ecd7553e3ba039319ab upstream.
    
    This patch fixes a bug in TMR task aborted status (TAS)
    handling when multiple sessions are connected to the
    same target WWPN endpoint and se_node_acl descriptor,
    resulting in TASK_ABORTED status to not be generated
    for aborted se_cmds on the remote port.
    
    This is due to core_tmr_handle_tas_abort() incorrectly
    comparing se_node_acl instead of se_session, for which
    the multi-session case is expected to be sharing the
    same se_node_acl.
    
    Instead, go ahead and update core_tmr_handle_tas_abort()
    to compare tmr_sess + cmd->se_sess in order to determine
    if the LUN_RESET was received on a different I_T nexus,
    and TASK_ABORTED status response needs to be generated.
    
    Reviewed-by: Christoph Hellwig <hch@lst.de>
    Cc: Quinn Tran <quinn.tran@qlogic.com>
    Cc: Himanshu Madhani <himanshu.madhani@qlogic.com>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: Mike Christie <mchristi@redhat.com>
    Cc: stable@vger.kernel.org # 3.10+
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 50d2b0e7c16314f4fc1ac1756f6835f8b02fe8af
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date:   Mon Jan 11 21:31:09 2016 -0800

    target: Fix LUN_RESET active I/O handling for ACK_KREF
    
    commit febe562c20dfa8f33bee7d419c6b517986a5aa33 upstream.
    
    This patch fixes a NULL pointer se_cmd->cmd_kref < 0
    refcount bug during TMR LUN_RESET with active se_cmd
    I/O, that can be triggered during se_cmd descriptor
    shutdown + release via core_tmr_drain_state_list() code.
    
    To address this bug, add common __target_check_io_state()
    helper for ABORT_TASK + LUN_RESET w/ CMD_T_COMPLETE
    checking, and set CMD_T_ABORTED + obtain ->cmd_kref for
    both cases ahead of last target_put_sess_cmd() after
    TFO->aborted_task() -> transport_cmd_finish_abort()
    callback has completed.
    
    It also introduces SCF_ACK_KREF to determine when
    transport_cmd_finish_abort() needs to drop the second
    extra reference, ahead of calling target_put_sess_cmd()
    for the final kref_put(&se_cmd->cmd_kref).
    
    It also updates transport_cmd_check_stop() to avoid
    holding se_cmd->t_state_lock while dropping se_cmd
    device state via target_remove_from_state_list(), now
    that core_tmr_drain_state_list() is holding the
    se_device lock while checking se_cmd state from
    within TMR logic.
    
    Finally, move transport_put_cmd() release of SGL +
    TMR + extended CDB memory into target_free_cmd_mem()
    in order to avoid potential resource leaks in TMR
    ABORT_TASK + LUN_RESET code-paths.  Also update
    target_release_cmd_kref() accordingly.
    
    Reviewed-by: Quinn Tran <quinn.tran@qlogic.com>
    Cc: Himanshu Madhani <himanshu.madhani@qlogic.com>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: Mike Christie <mchristi@redhat.com>
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit eb5753cb3e7f1590fd7cc19e0dae0013f1b1bd71
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date:   Mon Jan 11 21:53:05 2016 -0800

    target: Fix LUN_RESET active TMR descriptor handling
    
    commit a6d9bb1c9605cd4f44e2d8290dc4d0e88f20292d upstream.
    
    This patch fixes a NULL pointer se_cmd->cmd_kref < 0
    refcount bug during TMR LUN_RESET with active TMRs,
    triggered during se_cmd + se_tmr_req descriptor
    shutdown + release via core_tmr_drain_tmr_list().
    
    To address this bug, go ahead and obtain a local
    kref_get_unless_zero(&se_cmd->cmd_kref) for active I/O
    to set CMD_T_ABORTED, and transport_wait_for_tasks()
    followed by the final target_put_sess_cmd() to drop
    the local ->cmd_kref.
    
    Also add two new checks within target_tmr_work() to
    avoid CMD_T_ABORTED -> TFO->queue_tm_rsp() callbacks
    ahead of invoking the backend -> fabric put in
    transport_cmd_check_stop_to_fabric().
    
    For good measure, also change core_tmr_release_req()
    to use list_del_init() ahead of se_tmr_req memory
    free.
    
    Reviewed-by: Quinn Tran <quinn.tran@qlogic.com>
    Cc: Himanshu Madhani <himanshu.madhani@qlogic.com>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: Christoph Hellwig <hch@lst.de>
    Cc: Hannes Reinecke <hare@suse.de>
    Cc: Andy Grover <agrover@redhat.com>
    Cc: Mike Christie <mchristi@redhat.com>
    Cc: stable@vger.kernel.org # 3.10+
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 17b1c6c856dda6cf21ce8217244623a1bd890d77
Author: Nicholas Bellinger <nab@linux-iscsi.org>
Date:   Sat Mar 22 14:55:56 2014 -0700

    target: Add TFO->abort_task for aborted task resources release
    
    commit 131e6abc674edb9f9a59090bb35bf6650569b7e7 upstream.
    
    Now that TASK_ABORTED status is not generated for all cases by
    TMR ABORT_TASK + LUN_RESET, a new TFO->abort_task() caller is
    necessary in order to give fabric drivers a chance to unmap
    hardware / software resources before the se_cmd descriptor is
    released via the normal TFO->release_cmd() codepath.
    
    This patch adds TFO->aborted_task() in core_tmr_abort_task()
    in place of the original transport_send_task_abort(), and
    also updates all fabric drivers to implement this caller.
    
    The fabric drivers that include changes to perform cleanup
    via ->aborted_task() are:
    
      - iscsi-target
      - iser-target
      - srpt
      - tcm_qla2xxx
    
    The fabric drivers that currently set ->aborted_task() to
    NOPs are:
    
      - loopback
      - tcm_fc
      - usb-gadget
      - sbp-target
      - vhost-scsi
    
    For the latter five, there appears to be no additional cleanup
    required before invoking TFO->release_cmd() to release the
    se_cmd descriptor.
    
    v2 changes:
      - Move ->aborted_task() call into transport_cmd_finish_abort (Alex)
    
    Cc: Alex Leung <amleung21@yahoo.com>
    Cc: Mark Rustad <mark.d.rustad@intel.com>
    Cc: Roland Dreier <roland@kernel.org>
    Cc: Vu Pham <vu@mellanox.com>
    Cc: Chris Boot <bootc@bootc.net>
    Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
    Cc: Michael S. Tsirkin <mst@redhat.com>
    Cc: Giridhar Malavali <giridhar.malavali@qlogic.com>
    Cc: Saurav Kashyap <saurav.kashyap@qlogic.com>
    Cc: Quinn Tran <quinn.tran@qlogic.com>
    Cc: Sagi Grimberg <sagig@mellanox.com>
    Cc: Or Gerlitz <ogerlitz@mellanox.com>
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 4f06fb191764f860ac5ccf510f92a8b3ee005367
Author: Alex Leung <amleung21@yahoo.com>
Date:   Fri Mar 21 22:20:41 2014 -0700

    target: Fix Task Aborted Status (TAS) handling
    
    commit 68259b5aac13a57cba797b9605ed9812158f0e72 upstream.
    
    This patch addresses three of long standing issues wrt to Task
    Aborted Status (TAS) handling.
    
    The first is the incorrect assumption in core_tmr_handle_tas_abort()
    that TASK_ABORTED status is sent for the task referenced by TMR
    ABORT_TASK, and sending TASK_ABORTED status for TMR LUN_RESET on
    the same nexus the LUN_RESET was received.
    
    The second is to ensure the lun reference count is dropped within
    transport_cmd_finish_abort() by calling transport_lun_remove_cmd()
    before invoking transport_cmd_check_stop_to_fabric().
    
    The last is to fix the delayed TAS handling to allow outstanding
    WRITEs to complete before sending the TASK_ABORTED status. This
    includes changing transport_check_aborted_status() to avoid
    processing when SCF_SEND_DELAYED_TAS has not be set, and updating
    transport_send_task_abort() to drop the SCF_SENT_DELAYED_TAS
    check.
    
    Signed-off-by: Alex Leung <amleung21@yahoo.com>
    Cc: Alex Leung <amleung21@yahoo.com>
    Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 41b147fa3fab394f5e7777ad4b48486386aa7b3c
Author: Richard Weinberger <richard@nod.at>
Date:   Sun Feb 21 10:53:03 2016 +0100

    ubi: Fix out of bounds write in volume update code
    
    commit e4f6daac20332448529b11f09388f1d55ef2084c upstream.
    
    ubi_start_leb_change() allocates too few bytes.
    ubi_more_leb_change_data() will write up to req->upd_bytes +
    ubi->min_io_size bytes.
    
    Signed-off-by: Richard Weinberger <richard@nod.at>
    Reviewed-by: Boris Brezillon <boris.brezillon@free-electrons.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit b742d1030d83125310c663c6fbf8f021cccd2868
Author: Maciej W. Rozycki <macro@imgtec.com>
Date:   Fri Mar 4 01:42:49 2016 +0000

    MIPS: traps: Fix SIGFPE information leak from `do_ov' and `do_trap_or_bp'
    
    commit e723e3f7f9591b79e8c56b3d7c5a204a9c571b55 upstream.
    
    Avoid sending a partially initialised `siginfo_t' structure along SIGFPE
    signals issued from `do_ov' and `do_trap_or_bp', leading to information
    leaking from the kernel stack.
    
    Signed-off-by: Maciej W. Rozycki <macro@imgtec.com>
    Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ef0cf59ebccffb381671712b06615b3e97736329
Author: Yegor Yefremov <yegorslists@googlemail.com>
Date:   Mon Feb 29 16:39:57 2016 +0100

    USB: serial: option: add support for Quectel UC20
    
    commit c0992d0f54847d0d1d85c60fcaa054f175ab1ccd upstream.
    
    Add support for Quectel UC20 and blacklist the QMI interface.
    
    Signed-off-by: Yegor Yefremov <yegorslists@googlemail.com>
    [johan: amend commit message ]
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7692ae2bb52d5a0c6fb74d227b6365c34ea1f5d3
Author: Daniele Palmas <dnlplm@gmail.com>
Date:   Mon Feb 29 15:36:11 2016 +0100

    USB: serial: option: add support for Telit LE922 PID 0x1045
    
    commit 5deef5551c77e488922cc4bf4bc76df63be650d0 upstream.
    
    This patch adds support for 0x1045 PID of Telit LE922.
    
    Signed-off-by: Daniele Palmas <dnlplm@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7bb0b98e5f2321ceee4540a62075f75b62d4310c
Author: Vittorio Alfieri <vittorio88@gmail.com>
Date:   Sun Feb 28 14:40:24 2016 +0100

    USB: cp210x: Add ID for Parrot NMEA GPS Flight Recorder
    
    commit 3c4c615d70c8cbdc8ba8c79ed702640930652a79 upstream.
    
    The Parrot NMEA GPS Flight Recorder is a USB composite device
    consisting of hub, flash storage, and cp210x usb to serial chip.
    It is an accessory to the mass-produced Parrot AR Drone 2.
    The device emits standard NMEA messages which make the it compatible
    with NMEA compatible software. It was tested using gpsd version 3.11-3
    as an NMEA interpreter and using the official Parrot Flight Recorder.
    
    Signed-off-by: Vittorio Alfieri <vittorio88@gmail.com>
    Signed-off-by: Johan Hovold <johan@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d01312328cd48d97f6a02e184017eb9568dd8fc6
Author: Peter Chen <peter.chen@nxp.com>
Date:   Wed Feb 24 11:05:25 2016 +0800

    usb: chipidea: otg: change workqueue ci_otg as freezable
    
    commit d144dfea8af7108f613139623e63952ed7e69c0c upstream.
    
    If we use USB ID pin as wakeup source, and there is a USB block
    device on this USB OTG (ID) cable, the system will be deadlock
    after system resume.
    
    The root cause for this problem is: the workqueue ci_otg may try
    to remove hcd before the driver resume has finished, and hcd will
    disconnect the device on it, then, it will call device_release_driver,
    and holds the device lock "dev->mutex", but it is never unlocked since
    it waits workqueue writeback to run to flush the block information, but
    the workqueue writeback is freezable, it is not thawed before driver
    resume has finished.
    
    When the driver (device: sd 0:0:0:0:) resume goes to dpm_complete, it
    tries to get its device lock "dev->mutex", but it can't get it forever,
    then the deadlock occurs. Below call stacks show the situation.
    
    So, in order to fix this problem, we need to change workqueue ci_otg
    as freezable, then the work item in this workqueue will be run after
    driver's resume, this workqueue will not be blocked forever like above
    case since the workqueue writeback has been thawed too.
    
    Tested at: i.mx6qdl-sabresd and i.mx6sx-sdb.
    
    [  555.178869] kworker/u2:13   D c07de74c     0   826      2 0x00000000
    [  555.185310] Workqueue: ci_otg ci_otg_work
    [  555.189353] Backtrace:
    [  555.191849] [<c07de4fc>] (__schedule) from [<c07dec6c>] (schedule+0x48/0xa0)
    [  555.198912]  r10:ee471ba0 r9:00000000 r8:00000000 r7:00000002 r6:ee470000 r5:ee471ba4
    [  555.206867]  r4:ee470000
    [  555.209453] [<c07dec24>] (schedule) from [<c07e2fc4>] (schedule_timeout+0x15c/0x1e0)
    [  555.217212]  r4:7fffffff r3:edc2b000
    [  555.220862] [<c07e2e68>] (schedule_timeout) from [<c07df6c8>] (wait_for_common+0x94/0x144)
    [  555.229140]  r8:00000000 r7:00000002 r6:ee470000 r5:ee471ba4 r4:7fffffff
    [  555.235980] [<c07df634>] (wait_for_common) from [<c07df790>] (wait_for_completion+0x18/0x1c)
    [  555.244430]  r10:00000001 r9:c0b5563c r8:c0042e48 r7:ef086000 r6:eea4372c r5:ef131b00
    [  555.252383]  r4:00000000
    [  555.254970] [<c07df778>] (wait_for_completion) from [<c0043cb8>] (flush_work+0x19c/0x234)
    [  555.263177] [<c0043b1c>] (flush_work) from [<c0043fac>] (flush_delayed_work+0x48/0x4c)
    [  555.271106]  r8:ed5b5000 r7:c0b38a3c r6:eea439cc r5:eea4372c r4:eea4372c
    [  555.277958] [<c0043f64>] (flush_delayed_work) from [<c00eae18>] (bdi_unregister+0x84/0xec)
    [  555.286236]  r4:eea43520 r3:20000153
    [  555.289885] [<c00ead94>] (bdi_unregister) from [<c02c2154>] (blk_cleanup_queue+0x180/0x29c)
    [  555.298250]  r5:eea43808 r4:eea43400
    [  555.301909] [<c02c1fd4>] (blk_cleanup_queue) from [<c0417914>] (__scsi_remove_device+0x48/0xb8)
    [  555.310623]  r7:00000000 r6:20000153 r5:ededa950 r4:ededa800
    [  555.316403] [<c04178cc>] (__scsi_remove_device) from [<c0415e90>] (scsi_forget_host+0x64/0x68)
    [  555.325028]  r5:ededa800 r4:ed5b5000
    [  555.328689] [<c0415e2c>] (scsi_forget_host) from [<c0409828>] (scsi_remove_host+0x78/0x104)
    [  555.337054]  r5:ed5b5068 r4:ed5b5000
    [  555.340709] [<c04097b0>] (scsi_remove_host) from [<c04cdfcc>] (usb_stor_disconnect+0x50/0xb4)
    [  555.349247]  r6:ed5b56e4 r5:ed5b5818 r4:ed5b5690 r3:00000008
    [  555.355025] [<c04cdf7c>] (usb_stor_disconnect) from [<c04b3bc8>] (usb_unbind_interface+0x78/0x25c)
    [  555.363997]  r8:c13919b4 r7:edd3c000 r6:edd3c020 r5:ee551c68 r4:ee551c00 r3:c04cdf7c
    [  555.371892] [<c04b3b50>] (usb_unbind_interface) from [<c03dc248>] (__device_release_driver+0x8c/0x118)
    [  555.381213]  r10:00000001 r9:edd90c00 r8:c13919b4 r7:ee551c68 r6:c0b546e0 r5:c0b5563c
    [  555.389167]  r4:edd3c020
    [  555.391752] [<c03dc1bc>] (__device_release_driver) from [<c03dc2fc>] (device_release_driver+0x28/0x34)
    [  555.401071]  r5:edd3c020 r4:edd3c054
    [  555.404721] [<c03dc2d4>] (device_release_driver) from [<c03db304>] (bus_remove_device+0xe0/0x110)
    [  555.413607]  r5:edd3c020 r4:ef17f04c
    [  555.417253] [<c03db224>] (bus_remove_device) from [<c03d8128>] (device_del+0x114/0x21c)
    [  555.425270]  r6:edd3c028 r5:edd3c020 r4:ee551c00 r3:00000000
    [  555.431045] [<c03d8014>] (device_del) from [<c04b1560>] (usb_disable_device+0xa4/0x1e8)
    [  555.439061]  r8:edd3c000 r7:eded8000 r6:00000000 r5:00000001 r4:ee551c00
    [  555.445906] [<c04b14bc>] (usb_disable_device) from [<c04a8e54>] (usb_disconnect+0x74/0x224)
    [  555.454271]  r9:edd90c00 r8:ee551000 r7:ee551c68 r6:ee551c9c r5:ee551c00 r4:00000001
    [  555.462156] [<c04a8de0>] (usb_disconnect) from [<c04a8fb8>] (usb_disconnect+0x1d8/0x224)
    [  555.470259]  r10:00000001 r9:edd90000 r8:ee471e2c r7:ee551468 r6:ee55149c r5:ee551400
    [  555.478213]  r4:00000001
    [  555.480797] [<c04a8de0>] (usb_disconnect) from [<c04ae5ec>] (usb_remove_hcd+0xa0/0x1ac)
    [  555.488813]  r10:00000001 r9:ee471eb0 r8:00000000 r7:ef3d9500 r6:eded810c r5:eded80b0
    [  555.496765]  r4:eded8000
    [  555.499351] [<c04ae54c>] (usb_remove_hcd) from [<c04d4158>] (host_stop+0x28/0x64)
    [  555.506847]  r6:eeb50010 r5:eded8000 r4:eeb51010
    [  555.511563] [<c04d4130>] (host_stop) from [<c04d09b8>] (ci_otg_work+0xc4/0x124)
    [  555.518885]  r6:00000001 r5:eeb50010 r4:eeb502a0 r3:c04d4130
    [  555.524665] [<c04d08f4>] (ci_otg_work) from [<c00454f0>] (process_one_work+0x194/0x420)
    [  555.532682]  r6:ef086000 r5:eeb502a0 r4:edc44480
    [  555.537393] [<c004535c>] (process_one_work) from [<c00457b0>] (worker_thread+0x34/0x514)
    [  555.545496]  r10:edc44480 r9:ef086000 r8:c0b1a100 r7:ef086034 r6:00000088 r5:edc44498
    [  555.553450]  r4:ef086000
    [  555.556032] [<c004577c>] (worker_thread) from [<c004bab4>] (kthread+0xdc/0xf8)
    [  555.563268]  r10:00000000 r9:00000000 r8:00000000 r7:c004577c r6:edc44480 r5:eddc15c0
    [  555.571221]  r4:00000000
    [  555.573804] [<c004b9d8>] (kthread) from [<c000fef0>] (ret_from_fork+0x14/0x24)
    [  555.581040]  r7:00000000 r6:00000000 r5:c004b9d8 r4:eddc15c0
    
    [  553.429383] sh              D c07de74c     0   694    691 0x00000000
    [  553.435801] Backtrace:
    [  553.438295] [<c07de4fc>] (__schedule) from [<c07dec6c>] (schedule+0x48/0xa0)
    [  553.445358]  r10:edd3c054 r9:edd3c078 r8:edddbd50 r7:edcbbc00 r6:c1377c34 r5:60000153
    [  553.453313]  r4:eddda000
    [  553.455896] [<c07dec24>] (schedule) from [<c07deff8>] (schedule_preempt_disabled+0x10/0x14)
    [  553.464261]  r4:edd3c058 r3:0000000a
    [  553.467910] [<c07defe8>] (schedule_preempt_disabled) from [<c07e0bbc>] (mutex_lock_nested+0x1a0/0x3e8)
    [  553.477254] [<c07e0a1c>] (mutex_lock_nested) from [<c03e927c>] (dpm_complete+0xc0/0x1b0)
    [  553.485358]  r10:00561408 r9:edd3c054 r8:c0b4863c r7:edddbd90 r6:c0b485d8 r5:edd3c020
    [  553.493313]  r4:edd3c0d0
    [  553.495896] [<c03e91bc>] (dpm_complete) from [<c03e9388>] (dpm_resume_end+0x1c/0x20)
    [  553.503652]  r9:00000000 r8:c0b1a9d0 r7:c1334ec0 r6:c1334edc r5:00000003 r4:00000010
    [  553.511544] [<c03e936c>] (dpm_resume_end) from [<c0079894>] (suspend_devices_and_enter+0x158/0x504)
    [  553.520604]  r4:00000000 r3:c1334efc
    [  553.524250] [<c007973c>] (suspend_devices_and_enter) from [<c0079e74>] (pm_suspend+0x234/0x2cc)
    [  553.532961]  r10:00561408 r9:ed6b7300 r8:00000004 r7:c1334eec r6:00000000 r5:c1334ee8
    [  553.540914]  r4:00000003
    [  553.543493] [<c0079c40>] (pm_suspend) from [<c0078a6c>] (state_store+0x6c/0xc0)
    
    [  555.703684] 7 locks held by kworker/u2:13/826:
    [  555.708140]  #0:  ("%s""ci_otg"){++++.+}, at: [<c0045484>] process_one_work+0x128/0x420
    [  555.716277]  #1:  ((&ci->work)){+.+.+.}, at: [<c0045484>] process_one_work+0x128/0x420
    [  555.724317]  #2:  (usb_bus_list_lock){+.+.+.}, at: [<c04ae5e4>] usb_remove_hcd+0x98/0x1ac
    [  555.732626]  #3:  (&dev->mutex){......}, at: [<c04a8e28>] usb_disconnect+0x48/0x224
    [  555.740403]  #4:  (&dev->mutex){......}, at: [<c04a8e28>] usb_disconnect+0x48/0x224
    [  555.748179]  #5:  (&dev->mutex){......}, at: [<c03dc2f4>] device_release_driver+0x20/0x34
    [  555.756487]  #6:  (&shost->scan_mutex){+.+.+.}, at: [<c04097d0>] scsi_remove_host+0x20/0x104
    
    Cc: Jun Li <jun.li@nxp.com>
    Signed-off-by: Peter Chen <peter.chen@nxp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5f77809943d3de7ed9803dd1c4480d2cb61b94e0
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sun Feb 28 11:36:14 2016 +0100

    ALSA: timer: Fix broken compat timer user status ioctl
    
    commit 3a72494ac2a3bd229db941d51e7efe2f6ccd947b upstream.
    
    The timer user status compat ioctl returned the bogus struct used for
    64bit architectures instead of the 32bit one.  This patch addresses
    it to return the proper struct.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 5fcfcb8c6af6c90315af48b9738fb88afcceae42
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Feb 29 14:32:42 2016 +0100

    ALSA: hdspm: Fix zero-division
    
    commit c1099c3294c2344110085a38c50e478a5992b368 upstream.
    
    HDSPM driver contains a code issuing zero-division potentially in
    system sample rate ctl code.  This patch fixes it by not processing
    a zero or invalid rate value as a divisor, as well as excluding the
    invalid value to be passed via the given ctl element.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit d141ac01d71ecc2d3afa8edc72795fe3334e2812
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Feb 29 14:26:43 2016 +0100

    ALSA: hdsp: Fix wrong boolean ctl value accesses
    
    commit eab3c4db193f5fcccf70e884de9a922ca2c63d80 upstream.
    
    snd-hdsp driver accesses enum item values (int) instead of boolean
    values (long) wrongly for some ctl elements.  This patch fixes them.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 39770b20720badb108f2762b1e03dbefba350022
Author: Takashi Iwai <tiwai@suse.de>
Date:   Mon Feb 29 14:25:16 2016 +0100

    ALSA: hdspm: Fix wrong boolean ctl value accesses
    
    commit 537e48136295c5860a92138c5ea3959b9542868b upstream.
    
    snd-hdspm driver accesses enum item values (int) instead of boolean
    values (long) wrongly for some ctl elements.  This patch fixes them.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 388cfb51f24f440e88d9fd80b29c0ee3457ef5bc
Author: Takashi Iwai <tiwai@suse.de>
Date:   Tue Mar 1 18:30:18 2016 +0100

    ALSA: seq: oss: Don't drain at closing a client
    
    commit 197b958c1e76a575d77038cc98b4bebc2134279f upstream.
    
    The OSS sequencer client tries to drain the pending events at
    releasing.  Unfortunately, as spotted by syzkaller fuzzer, this may
    lead to an unkillable process state when the event has been queued at
    the far future.  Since the process being released can't be signaled
    any longer, it remains and waits for the echo-back event in that far
    future.
    
    Back to history, the draining feature was implemented at the time we
    misinterpreted POSIX definition for blocking file operation.
    Actually, such a behavior is superfluous at release, and we should
    just release the device as is instead of keeping it up forever.
    
    This patch just removes the draining call that may block the release
    for too long time unexpectedly.
    
    BugLink: http://lkml.kernel.org/r/CACT4Y+Y4kD-aBGj37rf-xBw9bH3GMU6P+MYg4W1e-s-paVD2pg@mail.gmail.com
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 2f4ad23ad58f502b1b4f2cd6546ea57248e048c8
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sun Feb 28 11:41:47 2016 +0100

    ALSA: timer: Fix ioctls for X32 ABI
    
    commit b24e7ad1fdc22177eb3e51584e1cfcb45d818488 upstream.
    
    X32 ABI takes the 64bit timespec, thus the timer user status ioctl becomes
    incompatible with IA32.  This results in NOTTY error when the ioctl is
    issued.
    
    Meanwhile, this struct in X32 is essentially identical with the one in
    X86-64, so we can just bypassing to the existing code for this
    specific compat ioctl.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 873a62100639253f70b4c96e99f50c1ebdaa175a
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sun Feb 28 11:28:08 2016 +0100

    ALSA: rawmidi: Fix ioctls X32 ABI
    
    commit 2251fbbc1539f05b0b206b37a602d5776be37252 upstream.
    
    Like the previous fixes for ctl and PCM, we need a fix for
    incompatible X32 ABI regarding the rawmidi: namely, struct
    snd_rawmidi_status has the timespec, and the size and the alignment on
    X32 differ from IA32.
    
    This patch fixes the incompatible ioctl for X32.
    
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 82b7aa17e02b2da0d637573c45225dc0aaa9983c
Author: Takashi Iwai <tiwai@suse.de>
Date:   Sat Feb 27 17:52:42 2016 +0100

    ALSA: ctl: Fix ioctls for X32 ABI
    
    commit 6236d8bb2afcfe71b88ecea554e0dc638090a45f upstream.
    
    The X32 ABI takes the same alignment like x86-64, and this may result
    in the incompatible struct size from ia32.  Unfortunately, we hit this
    in some control ABI: struct snd_ctl_elem_value differs between them
    due to the position of 64bit variable array.  This ends up with the
    unknown ioctl (ENOTTY) error.
    
    The fix is to add the compat entries for the new aligned struct.
    
    Reported-and-tested-by: Steven Newbury <steve@snewbury.org.uk>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8e7c98f7ced6390020b2ce0fbe413359dbfa1601
Author: David Woodhouse <David.Woodhouse@intel.com>
Date:   Mon Feb 1 14:04:46 2016 +0000

    Fix directory hardlinks from deleted directories
    
    commit be629c62a603e5935f8177fd8a19e014100a259e upstream.
    
    When a directory is deleted, we don't take too much care about killing off
    all the dirents that belong to it — on the basis that on remount, the scan
    will conclude that the directory is dead anyway.
    
    This doesn't work though, when the deleted directory contained a child
    directory which was moved *out*. In the early stages of the fs build
    we can then end up with an apparent hard link, with the child directory
    appearing both in its true location, and as a child of the original
    directory which are this stage of the mount process we don't *yet* know
    is defunct.
    
    To resolve this, take out the early special-casing of the "directories
    shall not have hard links" rule in jffs2_build_inode_pass1(), and let the
    normal nlink processing happen for directories as well as other inodes.
    
    Then later in the build process we can set ic->pino_nlink to the parent
    inode#, as is required for directories during normal operaton, instead
    of the nlink. And complain only *then* about hard links which are still
    in evidence even after killing off all the unreachable paths.
    
    Reported-by: Liu Song <liu.song11@zte.com.cn>
    Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 47ccc4c5f9832faef1770f306ff112570df358c4
Author: David Woodhouse <David.Woodhouse@intel.com>
Date:   Mon Feb 1 12:37:20 2016 +0000

    jffs2: Fix page lock / f->sem deadlock
    
    commit 49e91e7079febe59a20ca885a87dd1c54240d0f1 upstream.
    
    With this fix, all code paths should now be obtaining the page lock before
    f->sem.
    
    Reported-by: Szabó Tamás <sztomi89@gmail.com>
    Tested-by: Thomas Betker <thomas.betker@rohde-schwarz.com>
    Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit e60a8c9765b9ddf7e7f0c309d1287e73ef8c3691
Author: Thomas Betker <thomas.betker@rohde-schwarz.com>
Date:   Tue Nov 10 22:18:15 2015 +0100

    Revert "jffs2: Fix lock acquisition order bug in jffs2_write_begin"
    
    commit 157078f64b8a9cd7011b6b900b2f2498df850748 upstream.
    
    This reverts commit 5ffd3412ae55
    ("jffs2: Fix lock acquisition order bug in jffs2_write_begin").
    
    The commit modified jffs2_write_begin() to remove a deadlock with
    jffs2_garbage_collect_live(), but this introduced new deadlocks found
    by multiple users. page_lock() actually has to be called before
    mutex_lock(&c->alloc_sem) or mutex_lock(&f->sem) because
    jffs2_write_end() and jffs2_readpage() are called with the page locked,
    and they acquire c->alloc_sem and f->sem, resp.
    
    In other words, the lock order in jffs2_write_begin() was correct, and
    it is the jffs2_garbage_collect_live() path that has to be changed.
    
    Revert the commit to get rid of the new deadlocks, and to clear the way
    for a better fix of the original deadlock.
    
    Reported-by: Deng Chao <deng.chao1@zte.com.cn>
    Reported-by: Ming Liu <liu.ming50@gmail.com>
    Reported-by: wangzaiwei <wangzaiwei@top-vision.cn>
    Signed-off-by: Thomas Betker <thomas.betker@rohde-schwarz.com>
    Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 76882cb651d7768828c7dda96a5328ba575a401e
Author: Todd E Brandt <todd.e.brandt@linux.intel.com>
Date:   Wed Mar 2 16:05:29 2016 -0800

    PM / sleep / x86: Fix crash on graph trace through x86 suspend
    
    commit 92f9e179a702a6adbc11e2fedc76ecd6ffc9e3f7 upstream.
    
    Pause/unpause graph tracing around do_suspend_lowlevel as it has
    inconsistent call/return info after it jumps to the wakeup vector.
    The graph trace buffer will otherwise become misaligned and
    may eventually crash and hang on suspend.
    
    To reproduce the issue and test the fix:
    Run a function_graph trace over suspend/resume and set the graph
    function to suspend_devices_and_enter. This consistently hangs the
    system without this fix.
    
    Signed-off-by: Todd Brandt <todd.e.brandt@linux.intel.com>
    Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 15488ce1dad5af59b3d6ad916b68403fd625030e
Author: Harvey Hunt <harvey.hunt@imgtec.com>
Date:   Wed Feb 24 15:16:43 2016 +0000

    libata: Align ata_device's id on a cacheline
    
    commit 4ee34ea3a12396f35b26d90a094c75db95080baa upstream.
    
    The id buffer in ata_device is a DMA target, but it isn't explicitly
    cacheline aligned. Due to this, adjacent fields can be overwritten with
    stale data from memory on non coherent architectures. As a result, the
    kernel is sometimes unable to communicate with an ATA device.
    
    Fix this by ensuring that the id buffer is cacheline aligned.
    
    This issue is similar to that fixed by Commit 84bda12af31f
    ("libata: align ap->sector_buf").
    
    Signed-off-by: Harvey Hunt <harvey.hunt@imgtec.com>
    Cc: linux-kernel@vger.kernel.org
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit c9a3157a2750f0ffba387ad6d20af200807c7a88
Author: Arnd Bergmann <arnd@arndb.de>
Date:   Thu Feb 11 14:16:27 2016 +0100

    libata: fix HDIO_GET_32BIT ioctl
    
    commit 287e6611ab1eac76c2c5ebf6e345e04c80ca9c61 upstream.
    
    As reported by Soohoon Lee, the HDIO_GET_32BIT ioctl does not
    work correctly in compat mode with libata.
    
    I have investigated the issue further and found multiple problems
    that all appeared with the same commit that originally introduced
    HDIO_GET_32BIT handling in libata back in linux-2.6.8 and presumably
    also linux-2.4, as the code uses "copy_to_user(arg, &val, 1)" to copy
    a 'long' variable containing either 0 or 1 to user space.
    
    The problems with this are:
    
    * On big-endian machines, this will always write a zero because it
      stores the wrong byte into user space.
    
    * In compat mode, the upper three bytes of the variable are updated
      by the compat_hdio_ioctl() function, but they now contain
      uninitialized stack data.
    
    * The hdparm tool calling this ioctl uses a 'static long' variable
      to store the result. This means at least the upper bytes are
      initialized to zero, but calling another ioctl like HDIO_GET_MULTCOUNT
      would fill them with data that remains stale when the low byte
      is overwritten. Fortunately libata doesn't implement any of the
      affected ioctl commands, so this would only happen when we query
      both an IDE and an ATA device in the same command such as
      "hdparm -N -c /dev/hda /dev/sda"
    
    * The libata code for unknown reasons started using ATA_IOC_GET_IO32
      and ATA_IOC_SET_IO32 as aliases for HDIO_GET_32BIT and HDIO_SET_32BIT,
      while the ioctl commands that were added later use the normal
      HDIO_* names. This is harmless but rather confusing.
    
    This addresses all four issues by changing the code to use put_user()
    on an 'unsigned long' variable in HDIO_GET_32BIT, like the IDE subsystem
    does, and by clarifying the names of the ioctl commands.
    
    Signed-off-by: Arnd Bergmann <arnd@arndb.de>
    Reported-by: Soohoon Lee <Soohoon.Lee@f5.com>
    Tested-by: Soohoon Lee <Soohoon.Lee@f5.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 6029977f2d433d2703f4a440bf55ecc86aeb9764
Author: Timothy Pearson <tpearson@raptorengineeringinc.com>
Date:   Fri Feb 26 15:29:32 2016 -0600

    drm/ast: Fix incorrect register check for DRAM width
    
    commit 2d02b8bdba322b527c5f5168ce1ca10c2d982a78 upstream.
    
    During DRAM initialization on certain ASpeed devices, an incorrect
    bit (bit 10) was checked in the "SDRAM Bus Width Status" register
    to determine DRAM width.
    
    Query bit 6 instead in accordance with the Aspeed AST2050 datasheet v1.05.
    
    Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com>
    Signed-off-by: Dave Airlie <airlied@redhat.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit a18a6aab3319c13860837dedfcd25ae1ecf3b278
Author: Andy Lutomirski <luto@kernel.org>
Date:   Wed Feb 24 12:18:49 2016 -0800

    x86/entry/compat: Add missing CLAC to entry_INT80_32
    
    commit 3d44d51bd339766f0178f0cf2e8d048b4a4872aa upstream.
    
    This doesn't seem to fix a regression -- I don't think the CLAC was
    ever there.
    
    I double-checked in a debugger: entries through the int80 gate do
    not automatically clear AC.
    
    Stable maintainers: I can provide a backport to 4.3 and earlier if
    needed.  This needs to be backported all the way to 3.10.
    
    Reported-by: Brian Gerst <brgerst@gmail.com>
    Signed-off-by: Andy Lutomirski <luto@kernel.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Denys Vlasenko <dvlasenk@redhat.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Fixes: 63bcff2a307b ("x86, smap: Add STAC and CLAC instructions to control user space access")
    Link: http://lkml.kernel.org/r/b02b7e71ae54074be01fc171cbd4b72517055c0e.1456345086.git.luto@kernel.org
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    [ kamal: backport to 3.10 through 3.19-stable: file rename; context ]
    Signed-off-by: Kamal Mostafa <kamal@canonical.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 59f771c733bcb9031587b7e0f9f08af163b6982c
Author: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
Date:   Tue Feb 23 13:03:30 2016 +0100

    iommu/amd: Fix boot warning when device 00:00.0 is not iommu covered
    
    commit 38e45d02ea9f194b89d6bf41e52ccafc8e2c2b47 upstream.
    
    The setup code for the performance counters in the AMD IOMMU driver
    tests whether the counters can be written. It tests to setup a counter
    for device 00:00.0, which fails on systems where this particular device
    is not covered by the IOMMU.
    
    Fix this by not relying on device 00:00.0 but only on the IOMMU being
    present.
    
    Signed-off-by: Suravee Suthikulpanit <Suravee.Suthikulpanit@amd.com>
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 207600d29074b488b7a29942bdcbd8004eff47b1
Author: Pavel Shilovsky <pshilovsky@samba.org>
Date:   Sat Feb 27 11:58:18 2016 +0300

    CIFS: Fix SMB2+ interim response processing for read requests
    
    commit 6cc3b24235929b54acd5ecc987ef11a425bd209e upstream.
    
    For interim responses we only need to parse a header and update
    a number credits. Now it is done for all SMB2+ command except
    SMB2_READ which is wrong. Fix this by adding such processing.
    
    Signed-off-by: Pavel Shilovsky <pshilovsky@samba.org>
    Tested-by: Shirish Pargaonkar <shirishpargaonkar@gmail.com>
    Signed-off-by: Steve French <smfrench@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit ee86b25d14b9328300829fc7111951dc0564e830
Author: Justin Maggard <jmaggard10@gmail.com>
Date:   Tue Feb 9 15:52:08 2016 -0800

    cifs: fix out-of-bounds access in lease parsing
    
    commit deb7deff2f00bdbbcb3d560dad2a89ef37df837d upstream.
    
    When opening a file, SMB2_open() attempts to parse the lease state from the
    SMB2 CREATE Response.  However, the parsing code was not careful to ensure
    that the create contexts are not empty or invalid, which can lead to out-
    of-bounds memory access.  This can be seen easily by trying
    to read a file from a OSX 10.11 SMB3 server.  Here is sample crash output:
    
    BUG: unable to handle kernel paging request at ffff8800a1a77cc6
    IP: [<ffffffff8828a734>] SMB2_open+0x804/0x960
    PGD 8f77067 PUD 0
    Oops: 0000 [#1] SMP
    Modules linked in:
    CPU: 3 PID: 2876 Comm: cp Not tainted 4.5.0-rc3.x86_64.1+ #14
    Hardware name: NETGEAR ReadyNAS 314          /ReadyNAS 314          , BIOS 4.6.5 10/11/2012
    task: ffff880073cdc080 ti: ffff88005b31c000 task.ti: ffff88005b31c000
    RIP: 0010:[<ffffffff8828a734>]  [<ffffffff8828a734>] SMB2_open+0x804/0x960
    RSP: 0018:ffff88005b31fa08  EFLAGS: 00010282
    RAX: 0000000000000015 RBX: 0000000000000000 RCX: 0000000000000006
    RDX: 0000000000000000 RSI: 0000000000000246 RDI: ffff88007eb8c8b0
    RBP: ffff88005b31fad8 R08: 666666203d206363 R09: 6131613030383866
    R10: 3030383866666666 R11: 00000000000002b0 R12: ffff8800660fd800
    R13: ffff8800a1a77cc2 R14: 00000000424d53fe R15: ffff88005f5a28c0
    FS:  00007f7c8a2897c0(0000) GS:ffff88007eb80000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
    CR2: ffff8800a1a77cc6 CR3: 000000005b281000 CR4: 00000000000006e0
    Stack:
     ffff88005b31fa70 ffffffff88278789 00000000000001d3 ffff88005f5a2a80
     ffffffff00000003 ffff88005d029d00 ffff88006fde05a0 0000000000000000
     ffff88005b31fc78 ffff88006fde0780 ffff88005b31fb2f 0000000100000fe0
    Call Trace:
     [<ffffffff88278789>] ? cifsConvertToUTF16+0x159/0x2d0
     [<ffffffff8828cf68>] smb2_open_file+0x98/0x210
     [<ffffffff8811e80c>] ? __kmalloc+0x1c/0xe0
     [<ffffffff882685f4>] cifs_open+0x2a4/0x720
     [<ffffffff88122cef>] do_dentry_open+0x1ff/0x310
     [<ffffffff88268350>] ? cifsFileInfo_get+0x30/0x30
     [<ffffffff88123d92>] vfs_open+0x52/0x60
     [<ffffffff88131dd0>] path_openat+0x170/0xf70
     [<ffffffff88097d48>] ? remove_wait_queue+0x48/0x50
     [<ffffffff88133a29>] do_filp_open+0x79/0xd0
     [<ffffffff8813f2ca>] ? __alloc_fd+0x3a/0x170
     [<ffffffff881240c4>] do_sys_open+0x114/0x1e0
     [<ffffffff881241a9>] SyS_open+0x19/0x20
     [<ffffffff8896e257>] entry_SYSCALL_64_fastpath+0x12/0x6a
    Code: 4d 8d 6c 07 04 31 c0 4c 89 ee e8 47 6f e5 ff 31 c9 41 89 ce 44 89 f1 48 c7 c7 28 b1 bd 88 31 c0 49 01 cd 4c 89 ee e8 2b 6f e5 ff <45> 0f b7 75 04 48 c7 c7 31 b1 bd 88 31 c0 4d 01 ee 4c 89 f6 e8
    RIP  [<ffffffff8828a734>] SMB2_open+0x804/0x960
     RSP <ffff88005b31fa08>
    CR2: ffff8800a1a77cc6
    ---[ end trace d9f69ba64feee469 ]---
    
    Signed-off-by: Justin Maggard <jmaggard@netgear.com>
    Signed-off-by: Steve French <smfrench@gmail.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 42b57326f74e87c0e6d4656811ae1bd4b44b1351
Author: Borislav Petkov <bp@suse.de>
Date:   Tue Dec 1 15:52:36 2015 +0100

    EDAC, mc_sysfs: Fix freeing bus' name
    
    commit 12e26969b32c79018165d52caff3762135614aa1 upstream.
    
    I get the splat below when modprobing/rmmoding EDAC drivers. It happens
    because bus->name is invalid after bus_unregister() has run. The Code: section
    below corresponds to:
    
      .loc 1 1108 0
      movq    672(%rbx), %rax # mci_1(D)->bus, mci_1(D)->bus
      .loc 1 1109 0
      popq    %rbx    #
    
      .loc 1 1108 0
      movq    (%rax), %rdi    # _7->name,
      jmp     kfree   #
    
    and %rax has some funky stuff 2030203020312030 which looks a lot like
    something walked over it.
    
    Fix that by saving the name ptr before doing stuff to string it points to.
    
      general protection fault: 0000 [#1] SMP
      Modules linked in: ...
      CPU: 4 PID: 10318 Comm: modprobe Tainted: G          I EN  3.12.51-11-default+ #48
      Hardware name: HP ProLiant DL380 G7, BIOS P67 05/05/2011
      task: ffff880311320280 ti: ffff88030da3e000 task.ti: ffff88030da3e000
      RIP: 0010:[<ffffffffa019da92>]  [<ffffffffa019da92>] edac_unregister_sysfs+0x22/0x30 [edac_core]
      RSP: 0018:ffff88030da3fe28  EFLAGS: 00010292
      RAX: 2030203020312030 RBX: ffff880311b4e000 RCX: 000000000000095c
      RDX: 0000000000000001 RSI: ffff880327bb9600 RDI: 0000000000000286
      RBP: ffff880311b4e750 R08: 0000000000000000 R09: ffffffff81296110
      R10: 0000000000000400 R11: 0000000000000000 R12: ffff88030ba1ac68
      R13: 0000000000000001 R14: 00000000011b02f0 R15: 0000000000000000
      FS:  00007fc9bf8f5700(0000) GS:ffff8801a7c40000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 000000008005003b
      CR2: 0000000000403c90 CR3: 000000019ebdf000 CR4: 00000000000007e0
      Stack:
      Call Trace:
        i7core_unregister_mci.isra.9
        i7core_remove
        pci_device_remove
        __device_release_driver
        driver_detach
        bus_remove_driver
        pci_unregister_driver
        i7core_exit
        SyS_delete_module
        system_call_fastpath
        0x7fc9bf426536
      Code: 2e 0f 1f 84 00 00 00 00 00 66 66 66 66 90 53 48 89 fb e8 52 2a 1f e1 48 8b bb a0 02 00 00 e8 46 59 1f e1 48 8b 83 a0 02 00 00 5b <48> 8b 38 e9 26 9a fe e0 66 0f 1f 44 00 00 66 66 66 66 90 48 8b
      RIP  [<ffffffffa019da92>] edac_unregister_sysfs+0x22/0x30 [edac_core]
       RSP <ffff88030da3fe28>
    
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Cc: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Fixes: 7a623c039075 ("edac: rewrite the sysfs code to use struct device")
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 7b667ced11b74f71ac8be87f07bf3c808b782dd7
Author: Jeff Layton <jeff.layton@primarydata.com>
Date:   Thu Jan 7 16:38:10 2016 -0500

    locks: fix unlock when fcntl_setlk races with a close
    
    commit 7f3697e24dc3820b10f445a4a7d914fc356012d1 upstream.
    
    Dmitry reported that he was able to reproduce the WARN_ON_ONCE that
    fires in locks_free_lock_context when the flc_posix list isn't empty.
    
    The problem turns out to be that we're basically rebuilding the
    file_lock from scratch in fcntl_setlk when we discover that the setlk
    has raced with a close. If the l_whence field is SEEK_CUR or SEEK_END,
    then we may end up with fl_start and fl_end values that differ from
    when the lock was initially set, if the file position or length of the
    file has changed in the interim.
    
    Fix this by just reusing the same lock request structure, and simply
    override fl_type value with F_UNLCK as appropriate. That ensures that
    we really are unlocking the lock that was initially set.
    
    While we're there, make sure that we do pop a WARN_ON_ONCE if the
    removal ever fails. Also return -EBADF in this event, since that's
    what we would have returned if the close had happened earlier.
    
    Cc: Alexander Viro <viro@zeniv.linux.org.uk>
    Fixes: c293621bbf67 (stale POSIX lock handling)
    Reported-by: Dmitry Vyukov <dvyukov@google.com>
    Signed-off-by: Jeff Layton <jeff.layton@primarydata.com>
    Acked-by: "J. Bruce Fields" <bfields@fieldses.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

commit 8a3b2a49487b92716aa679197eb4ee9f2e67ce6e
Author: Hannes Reinecke <hare@suse.de>
Date:   Fri Feb 12 09:39:15 2016 +0100

    bio: return EINTR if copying to user space got interrupted
    
    commit 2d99b55d378c996b9692a0c93dd25f4ed5d58934 upstream.
    
    Commit 35dc248383bbab0a7203fca4d722875bc81ef091 introduced a check for
    current->mm to see if we have a user space context and only copies data
    if we do. Now if an IO gets interrupted by a signal data isn't copied
    into user space any more (as we don't have a user space context) but
    user space isn't notified about it.
    
    This patch modifies the behaviour to return -EINTR from bio_uncopy_user()
    to notify userland that a signal has interrupted the syscall, otherwise
    it could lead to a situation where the caller may get a buffer with
    no data returned.
    
    This can be reproduced by issuing SG_IO ioctl()s in one thread while
    constantly sending signals to it.
    
    Fixes: 35dc248 [SCSI] sg: Fix user memory corruption when SG_IO is interrupted by a signal
    Signed-off-by: Johannes Thumshirn <jthumshirn@suse.de>
    Signed-off-by: Hannes Reinecke <hare@suse.de>
    Cc: stable@vger.kernel.org # v.3.11+
    Signed-off-by: Jens Axboe <axboe@fb.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>