25 Jul, 2018

1 commit

  • commit f13cff6c25bd8986627365346d123312ee7baa78 upstream.

    Fix the description of sd_zbc_check_zone_size() to correctly explain that
    the returned value is a number of device blocks, not bytes. Additionally,
    the 32 bits "ret" variable used in this function may truncate the 64 bits
    zone_blocks variable value upon return. To fix this, change "ret" type to
    s64.

    Fixes: ccce20fc79 ("sd_zbc: Avoid that resetting a zone fails sporadically")
    Signed-off-by: Damien Le Moal
    Cc: Bart Van Assche
    Cc: stable@kernel.org
    Reviewed-by: Hannes Reinecke
    Reviewed-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Damien Le Moal
     

17 Jul, 2018

5 commits

  • commit adbe552349f2d1e48357a00e564d26135e586634 upstream.

    Since commit 84676c1f21e8 ("genirq/affinity: assign vectors to all
    possible CPUs") we could end up with an MSI-X vector that did not have
    any online CPUs mapped. This would lead to I/O hangs since there was no
    CPU to receive the completion.

    Retrieve IRQ affinity information using pci_irq_get_affinity() and use
    this mapping to choose a reply queue.

    [mkp: tweaked commit desc]

    Cc: Hannes Reinecke
    Cc: "Martin K. Petersen" ,
    Cc: James Bottomley ,
    Cc: Christoph Hellwig ,
    Cc: Don Brace
    Cc: Kashyap Desai
    Cc: Laurence Oberman
    Cc: Mike Snitzer
    Cc: Meelis Roos
    Cc: Artem Bityutskiy
    Fixes: 84676c1f21e8 ("genirq/affinity: assign vectors to all possible CPUs")
    Signed-off-by: Ming Lei
    Acked-by: Kashyap Desai
    Tested-by: Kashyap Desai
    Reviewed-by: Christoph Hellwig
    Tested-by: Artem Bityutskiy
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Ming Lei
     
  • commit 49a7a4adb0167b656b8dfb6ccb83220d553a1860 upstream.

    No functional change. Code refactoring to improve readability. Move the
    code to allocate and free controller memory into separate functions.

    Signed-off-by: Kashyap Desai
    Signed-off-by: Shivasharan S
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Shivasharan S
     
  • commit f369a31578c461a360f58c7695e5aef931bada13 upstream.

    No functional change.

    Signed-off-by: Kashyap Desai
    Signed-off-by: Shivasharan S
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Shivasharan S
     
  • commit e7d36b88435077847e1ea992919c600f3fa9321c upstream.

    Increase code readability. No functional change.

    Signed-off-by: Kashyap Desai
    Signed-off-by: Shivasharan S
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Shivasharan S
     
  • commit c365178f3147f38d26c15bdf43a363bacb5406ec upstream.

    No functional change.
    Refactor adapter_type to set for all generation controllers, not
    just for fusion controllers.

    Signed-off-by: Kashyap Desai
    Signed-off-by: Shivasharan S
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Shivasharan S
     

11 Jul, 2018

1 commit

  • commit 26b5b874aff5659a7e26e5b1997e3df2c41fa7fd upstream.

    As Al Viro noted in commit 128394eff343 ("sg_write()/bsg_write() is not fit
    to be called under KERNEL_DS"), sg improperly accesses userspace memory
    outside the provided buffer, permitting kernel memory corruption via
    splice(). But it doesn't just do it on ->write(), also on ->read().

    As a band-aid, make sure that the ->read() and ->write() handlers can not
    be called in weird contexts (kernel context or credentials different from
    file opener), like for ib_safe_file_access().

    If someone needs to use these interfaces from different security contexts,
    a new interface should be written that goes through the ->ioctl() handler.

    I've mostly copypasted ib_safe_file_access() over as sg_safe_file_access()
    because I couldn't find a good common header - please tell me if you know a
    better way.

    [mkp: s/_safe_/_check_/]

    Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
    Cc:
    Signed-off-by: Jann Horn
    Acked-by: Douglas Gilbert
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Jann Horn
     

03 Jul, 2018

3 commits

  • commit 3cedc8797b9c0f2222fd45a01f849c57c088828b upstream.

    Some newer target uses "Status Qualifier" response in a returned "Busy
    Status". This new response code of 0x4001, which is "Scope" bits,
    translates to "Affects all units accessible by target". Due to this new
    value returned in the Scope bits, driver was using that value as timeout
    value which resulted into driver waiting for 27min timeout.

    This patch masks off this Scope bits so that driver does not use this
    value as retry delay time.

    Cc:
    Signed-off-by: Anil Gurumurthy
    Signed-off-by: Giridhar Malavali
    Signed-off-by: Himanshu Madhani
    Reviewed-by: Ewan D. Milne
    Reviewed-by: Martin Wilck
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Anil Gurumurthy
     
  • commit 413c2f33489b134e3cc65d9c3ff7861e8fdfe899 upstream.

    This patch prevents driver from setting lower default speed of 1 GB/sec,
    if the switch does not support Get Port Speed Capabilities (GPSC)
    command. Setting this default speed results into much lower write
    performance for large sequential WRITE. This patch modifies driver to
    check for gpsc_supported flags and prevents driver from issuing
    MBC_SET_PORT_PARAM (001Ah) to set default speed of 1 GB/sec. If driver
    does not send this mailbox command, firmware assumes maximum supported
    link speed and will operate at the max speed.

    Cc: stable@vger.kernel.org
    Signed-off-by: Himanshu Madhani
    Reported-by: Eda Zhou
    Reviewed-by: Ewan D. Milne
    Tested-by: Ewan D. Milne
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Himanshu Madhani
     
  • commit 0d98ba8d70b0070ac117452ea0b663e26bbf46bf upstream.

    'Commit cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during
    shutdown")' has been added to kernel to shutdown pending PCIe port service
    interrupts during reboot so that a newly started kexec kernel wouldn't
    observe pending interrupts.

    pcie_port_device_remove() is disabling the root port and switches by
    calling pci_disable_device() after all PCIe service drivers are shutdown.

    This has been found to cause crashes on HP DL360 Gen9 machines during
    reboot due to hpsa driver not clearing the bus master bit during the
    shutdown procedure by calling pci_disable_device().

    Disable device as part of the shutdown sequence.

    Signed-off-by: Sinan Kaya
    Link: https://bugzilla.kernel.org/show_bug.cgi?id=199779
    Fixes: cc27b735ad3a ("PCI/portdrv: Turn off PCIe services during shutdown")
    Cc: stable@vger.kernel.org
    Reported-by: Ryan Finnie
    Tested-by: Don Brace
    Acked-by: Don Brace
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Sinan Kaya
     

21 Jun, 2018

5 commits

  • [ Upstream commit f4b024271ae3e9786e5d6f1c05b01b57a74e1d6d ]

    The vmw_pvscsi driver returns DID_ABORT for commands aborted internally
    by the adapter, leading to the filesystem going read-only. Change the
    result to DID_BUS_BUSY, causing the kernel to retry the command.

    Signed-off-by: Jim Gill
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jim Gill
     
  • [ Upstream commit 4bc83b3f272fe8f36450f9c003df49cf07ffe5fd ]

    In the case when the phy_mask is bitwise anded with the phy_index bit is
    zero the continue statement currently jumps to the next iteration of the
    while loop and phy_index is never actually incremented, potentially
    causing an infinite loop if phy_index is less than SCI_MAX_PHS. Fix this
    by turning the while loop into a for loop.

    Signed-off-by: Colin Ian King
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Colin Ian King
     
  • [ Upstream commit f286299c1d0ba5e2ca0377610307b370fe178767 ]

    Unlike SCSI and FC, we don't use multiple channels for IDE. Also fix
    the calculation for sub-channels.

    Signed-off-by: Long Li
    Reviewed-by: Michael Kelley
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Long Li
     
  • [ Upstream commit fb1633d56b0025233ed3dc49b44544748d509d9d ]

    Fixes: 2d2c2331673c ("scsi: megaraid_sas: modified few prints in OCR and IOC INIT path")
    Signed-off-by: Vinson Lee
    Acked-by: Shivasharan S
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Vinson Lee
     
  • [ Upstream commit af17092810a887178195276255b7b31f8fbe7dbe ]

    Instead of always multicasting responses, send a unicast netlink message
    directed at the correct pid. This will be needed if we ever want to
    support multiple userspace processes interacting with the kernel over
    iSCSI netlink simultaneously. Limitations can currently be seen if you
    attempt to run multiple iscsistart commands in parallel.

    We've fixed up the userspace issues in iscsistart that prevented
    multiple instances from running, so now attempts to speed up booting by
    bringing up multiple iscsi sessions at once in the initramfs are just
    running into misrouted responses that this fixes.

    Signed-off-by: Chris Leech
    Reviewed-by: Lee Duncan
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Chris Leech
     

12 Jun, 2018

2 commits

  • commit ccce20fc7968d546fb1e8e147bf5cdc8afc4278a upstream.

    Since SCSI scanning occurs asynchronously, since sd_revalidate_disk() is
    called from sd_probe_async() and since sd_revalidate_disk() calls
    sd_zbc_read_zones() it can happen that sd_zbc_read_zones() is called
    concurrently with blkdev_report_zones() and/or blkdev_reset_zones(). That can
    cause these functions to fail with -EIO because sd_zbc_read_zones() e.g. sets
    q->nr_zones to zero before restoring it to the actual value, even if no drive
    characteristics have changed. Avoid that this can happen by making the
    following changes:

    - Protect the code that updates zone information with blk_queue_enter()
    and blk_queue_exit().
    - Modify sd_zbc_setup_seq_zones_bitmap() and sd_zbc_setup() such that
    these functions do not modify struct scsi_disk before all zone
    information has been obtained.

    Note: since commit 055f6e18e08f ("block: Make q_usage_counter also track
    legacy requests"; kernel v4.15) the request queue freezing mechanism also
    affects legacy request queues.

    Fixes: 89d947561077 ("sd: Implement support for ZBC devices")
    Signed-off-by: Bart Van Assche
    Cc: Jens Axboe
    Cc: Damien Le Moal
    Cc: Christoph Hellwig
    Cc: Hannes Reinecke
    Cc: stable@vger.kernel.org # v4.16
    Reviewed-by: Damien Le Moal
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Damien Le Moal
    Signed-off-by: Greg Kroah-Hartman

    Bart Van Assche
     
  • commit 4b433924b2755a94f99258c178684a0e05c344de upstream.

    Rework sd_zbc_check_zone_size() to avoid a memory leak due to an early
    return if sd_zbc_report_zones() fails.

    Reported-by: David.butterfield
    Signed-off-by: Damien Le Moal
    Cc: stable@vger.kernel.org
    Reviewed-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Damien Le Moal
     

05 Jun, 2018

1 commit

  • commit c9ddf73476ff4fffb7a87bd5107a0705bf2cf64b upstream.

    Since an SRP remote port is attached as a child to shost->shost_gendev
    and as the only child, the translation from the shost pointer into an
    rport pointer must happen by looking up the shost child that is an
    rport. This patch fixes the following KASAN complaint:

    BUG: KASAN: slab-out-of-bounds in srp_timed_out+0x57/0x110 [scsi_transport_srp]
    Read of size 4 at addr ffff880035d3fcc0 by task kworker/1:0H/19

    CPU: 1 PID: 19 Comm: kworker/1:0H Not tainted 4.16.0-rc3-dbg+ #1
    Workqueue: kblockd blk_mq_timeout_work
    Call Trace:
    dump_stack+0x85/0xc7
    print_address_description+0x65/0x270
    kasan_report+0x231/0x350
    srp_timed_out+0x57/0x110 [scsi_transport_srp]
    scsi_times_out+0xc7/0x3f0 [scsi_mod]
    blk_mq_terminate_expired+0xc2/0x140
    bt_iter+0xbc/0xd0
    blk_mq_queue_tag_busy_iter+0x1c7/0x350
    blk_mq_timeout_work+0x325/0x3f0
    process_one_work+0x441/0xa50
    worker_thread+0x76/0x6c0
    kthread+0x1b2/0x1d0
    ret_from_fork+0x24/0x30

    Fixes: e68ca75200fe ("scsi_transport_srp: Reduce failover time")
    Signed-off-by: Bart Van Assche
    Cc: Hannes Reinecke
    Cc: Johannes Thumshirn
    Cc: Jason Gunthorpe
    Cc: Doug Ledford
    Cc: Laurence Oberman
    Cc: stable@vger.kernel.org
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Greg Kroah-Hartman

    Bart Van Assche
     

30 May, 2018

3 commits

  • [ Upstream commit 2bbea6e117357d17842114c65e9a9cf2d13ae8a3 ]

    when mounting an ISO filesystem sometimes (very rarely)
    the system hangs because of a race condition between two tasks.

    PID: 6766 TASK: ffff88007b2a6dd0 CPU: 0 COMMAND: "mount"
    #0 [ffff880078447ae0] __schedule at ffffffff8168d605
    #1 [ffff880078447b48] schedule_preempt_disabled at ffffffff8168ed49
    #2 [ffff880078447b58] __mutex_lock_slowpath at ffffffff8168c995
    #3 [ffff880078447bb8] mutex_lock at ffffffff8168bdef
    #4 [ffff880078447bd0] sr_block_ioctl at ffffffffa00b6818 [sr_mod]
    #5 [ffff880078447c10] blkdev_ioctl at ffffffff812fea50
    #6 [ffff880078447c70] ioctl_by_bdev at ffffffff8123a8b3
    #7 [ffff880078447c90] isofs_fill_super at ffffffffa04fb1e1 [isofs]
    #8 [ffff880078447da8] mount_bdev at ffffffff81202570
    #9 [ffff880078447e18] isofs_mount at ffffffffa04f9828 [isofs]
    #10 [ffff880078447e28] mount_fs at ffffffff81202d09
    #11 [ffff880078447e70] vfs_kern_mount at ffffffff8121ea8f
    #12 [ffff880078447ea8] do_mount at ffffffff81220fee
    #13 [ffff880078447f28] sys_mount at ffffffff812218d6
    #14 [ffff880078447f80] system_call_fastpath at ffffffff81698c49
    RIP: 00007fd9ea914e9a RSP: 00007ffd5d9bf648 RFLAGS: 00010246
    RAX: 00000000000000a5 RBX: ffffffff81698c49 RCX: 0000000000000010
    RDX: 00007fd9ec2bc210 RSI: 00007fd9ec2bc290 RDI: 00007fd9ec2bcf30
    RBP: 0000000000000000 R8: 0000000000000000 R9: 0000000000000010
    R10: 00000000c0ed0001 R11: 0000000000000206 R12: 00007fd9ec2bc040
    R13: 00007fd9eb6b2380 R14: 00007fd9ec2bc210 R15: 00007fd9ec2bcf30
    ORIG_RAX: 00000000000000a5 CS: 0033 SS: 002b

    This task was trying to mount the cdrom. It allocated and configured a
    super_block struct and owned the write-lock for the super_block->s_umount
    rwsem. While exclusively owning the s_umount lock, it called
    sr_block_ioctl and waited to acquire the global sr_mutex lock.

    PID: 6785 TASK: ffff880078720fb0 CPU: 0 COMMAND: "systemd-udevd"
    #0 [ffff880078417898] __schedule at ffffffff8168d605
    #1 [ffff880078417900] schedule at ffffffff8168dc59
    #2 [ffff880078417910] rwsem_down_read_failed at ffffffff8168f605
    #3 [ffff880078417980] call_rwsem_down_read_failed at ffffffff81328838
    #4 [ffff8800784179d0] down_read at ffffffff8168cde0
    #5 [ffff8800784179e8] get_super at ffffffff81201cc7
    #6 [ffff880078417a10] __invalidate_device at ffffffff8123a8de
    #7 [ffff880078417a40] flush_disk at ffffffff8123a94b
    #8 [ffff880078417a88] check_disk_change at ffffffff8123ab50
    #9 [ffff880078417ab0] cdrom_open at ffffffffa00a29e1 [cdrom]
    #10 [ffff880078417b68] sr_block_open at ffffffffa00b6f9b [sr_mod]
    #11 [ffff880078417b98] __blkdev_get at ffffffff8123ba86
    #12 [ffff880078417bf0] blkdev_get at ffffffff8123bd65
    #13 [ffff880078417c78] blkdev_open at ffffffff8123bf9b
    #14 [ffff880078417c90] do_dentry_open at ffffffff811fc7f7
    #15 [ffff880078417cd8] vfs_open at ffffffff811fc9cf
    #16 [ffff880078417d00] do_last at ffffffff8120d53d
    #17 [ffff880078417db0] path_openat at ffffffff8120e6b2
    #18 [ffff880078417e48] do_filp_open at ffffffff8121082b
    #19 [ffff880078417f18] do_sys_open at ffffffff811fdd33
    #20 [ffff880078417f70] sys_open at ffffffff811fde4e
    #21 [ffff880078417f80] system_call_fastpath at ffffffff81698c49
    RIP: 00007f29438b0c20 RSP: 00007ffc76624b78 RFLAGS: 00010246
    RAX: 0000000000000002 RBX: ffffffff81698c49 RCX: 0000000000000000
    RDX: 00007f2944a5fa70 RSI: 00000000000a0800 RDI: 00007f2944a5fa70
    RBP: 00007f2944a5f540 R8: 0000000000000000 R9: 0000000000000020
    R10: 00007f2943614c40 R11: 0000000000000246 R12: ffffffff811fde4e
    R13: ffff880078417f78 R14: 000000000000000c R15: 00007f2944a4b010
    ORIG_RAX: 0000000000000002 CS: 0033 SS: 002b

    This task tried to open the cdrom device, the sr_block_open function
    acquired the global sr_mutex lock. The call to check_disk_change()
    then saw an event flag indicating a possible media change and tried
    to flush any cached data for the device.
    As part of the flush, it tried to acquire the super_block->s_umount
    lock associated with the cdrom device.
    This was the same super_block as created and locked by the previous task.

    The first task acquires the s_umount lock and then the sr_mutex_lock;
    the second task acquires the sr_mutex_lock and then the s_umount lock.

    This patch fixes the issue by moving check_disk_change() out of
    cdrom_open() and let the caller take care of it.

    Signed-off-by: Maurizio Lombardi
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Maurizio Lombardi
     
  • [ Upstream commit 2d097c50212e137e7b53ffe3b37561153eeba87d ]

    We can't just use scsi_cd() to get the scsi_cd structure, we have
    to grab a live reference to the device. For both callbacks, we're
    not inside an open where we already hold a reference to the device.

    This fixes device removal/addition under concurrent device access,
    which otherwise could result in the below oops.

    NULL pointer dereference at 0000000000000010
    PGD 0 P4D 0
    Oops: 0000 [#1] PREEMPT SMP
    Modules linked in:
    sr 12:0:0:0: [sr2] scsi-1 drive
    scsi_debug crc_t10dif crct10dif_generic crct10dif_common nvme nvme_core sb_edac xl
    sr 12:0:0:0: Attached scsi CD-ROM sr2
    sr_mod cdrom btrfs xor zstd_decompress zstd_compress xxhash lzo_compress zlib_defc
    sr 12:0:0:0: Attached scsi generic sg7 type 5
    igb ahci libahci i2c_algo_bit libata dca [last unloaded: crc_t10dif]
    CPU: 43 PID: 4629 Comm: systemd-udevd Not tainted 4.16.0+ #650
    Hardware name: Dell Inc. PowerEdge T630/0NT78X, BIOS 2.3.4 11/09/2016
    RIP: 0010:sr_block_revalidate_disk+0x23/0x190 [sr_mod]
    RSP: 0018:ffff883ff357bb58 EFLAGS: 00010292
    RAX: ffffffffa00b07d0 RBX: ffff883ff3058000 RCX: ffff883ff357bb66
    RDX: 0000000000000003 RSI: 0000000000007530 RDI: ffff881fea631000
    RBP: 0000000000000000 R08: ffff881fe4d38400 R09: 0000000000000000
    R10: 0000000000000000 R11: 00000000000001b6 R12: 000000000800005d
    R13: 000000000800005d R14: ffff883ffd9b3790 R15: 0000000000000000
    FS: 00007f7dc8e6d8c0(0000) GS:ffff883fff340000(0000) knlGS:0000000000000000
    CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 0000000000000010 CR3: 0000003ffda98005 CR4: 00000000003606e0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
    ? __invalidate_device+0x48/0x60
    check_disk_change+0x4c/0x60
    sr_block_open+0x16/0xd0 [sr_mod]
    __blkdev_get+0xb9/0x450
    ? iget5_locked+0x1c0/0x1e0
    blkdev_get+0x11e/0x320
    ? bdget+0x11d/0x150
    ? _raw_spin_unlock+0xa/0x20
    ? bd_acquire+0xc0/0xc0
    do_dentry_open+0x1b0/0x320
    ? inode_permission+0x24/0xc0
    path_openat+0x4e6/0x1420
    ? cpumask_any_but+0x1f/0x40
    ? flush_tlb_mm_range+0xa0/0x120
    do_filp_open+0x8c/0xf0
    ? __seccomp_filter+0x28/0x230
    ? _raw_spin_unlock+0xa/0x20
    ? __handle_mm_fault+0x7d6/0x9b0
    ? list_lru_add+0xa8/0xc0
    ? _raw_spin_unlock+0xa/0x20
    ? __alloc_fd+0xaf/0x160
    ? do_sys_open+0x1a6/0x230
    do_sys_open+0x1a6/0x230
    do_syscall_64+0x5a/0x100
    entry_SYSCALL_64_after_hwframe+0x3d/0xa2

    Reviewed-by: Lee Duncan
    Reviewed-by: Jan Kara
    Signed-off-by: Jens Axboe
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jens Axboe
     
  • commit f7068114d45ec55996b9040e98111afa56e010fe upstream.

    We're casting the CDROM layer request_sense to the SCSI sense
    buffer, but the former is 64 bytes and the latter is 96 bytes.
    As we generally allocate these on the stack, we end up blowing
    up the stack.

    Fix this by wrapping the scsi_execute() call with a properly
    sized sense buffer, and copying back the bits for the CDROM
    layer.

    Cc: stable@vger.kernel.org
    Reported-by: Piotr Gabriel Kosinski
    Reported-by: Daniel Shapira
    Tested-by: Kees Cook
    Fixes: 82ed4db499b8 ("block: split scsi_request out of struct request")
    Signed-off-by: Jens Axboe
    Signed-off-by: Greg Kroah-Hartman

    Jens Axboe
     

25 May, 2018

19 commits

  • [ Upstream commit 04673e38f56b30cd39b1fa0f386137d818b17781 ]

    The driver controls when the hardware sends completions that communicate
    consumption of elements from the WQ. This is done by setting a WQEC bit
    on a WQE.

    The current driver sets it on every Nth WQE posting. However, the driver
    isn't clearing the bit if the WQE is reused. Thus, if the queue depth
    isn't evenly divisible by N, with enough time, it can be set on every
    element, creating a lot of overhead and risking CQ full conditions.

    Correct by clearing the bit when not setting it on an Nth element.

    Signed-off-by: Dick Kennedy
    Signed-off-by: James Smart
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    James Smart
     
  • [ Upstream commit 161df4f09987ae2e9f0f97f0b38eee298b4a39ff ]

    During link bounce testing in a point-to-point topology, the host may
    enter a soft lockup on the lpfc_worker thread:

    Call Trace:
    lpfc_work_done+0x1f3/0x1390 [lpfc]
    lpfc_do_work+0x16f/0x180 [lpfc]
    kthread+0xc7/0xe0
    ret_from_fork+0x3f/0x70

    The driver was simultaneously setting a combination of flags that caused
    lpfc_do_work()to effectively spin between slow path work and new event
    data, causing the lockup.

    Ensure in the typical wq completions, that new event data flags are set
    if the slow path flag is running. The slow path will eventually
    reschedule the wq handling.

    Signed-off-by: Dick Kennedy
    Signed-off-by: James Smart
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    James Smart
     
  • [ Upstream commit 2289e9598dde9705400559ca2606fb8c145c34f0 ]

    The driver ignored checks on whether the link should be kept
    administratively down after a link bounce. Correct the checks.

    Signed-off-by: Dick Kennedy
    Signed-off-by: James Smart
    Reviewed-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    James Smart
     
  • [ Upstream commit e75fba9c0668b3767f608ea07485f48d33c270cf ]

    This patch fixes the byte order of the SGPIO api and brings it back in
    sync with ledmon v0.80 and above.

    [mkp: added missing SoB and fixed whitespace]

    Signed-off-by: Wilfried Weissmann
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Wilfried Weissmann
     
  • [ Upstream commit 1875ede02ed5e176a18dccbca84abc28d5b3e141 ]

    The SCSI PRE-FETCH (10 or 16) command is present both on hard disks
    and some SSDs. It is useful when the address of the next block(s) to
    be read is known but it is not following the LBA of the current READ
    (so read-ahead won't help). It returns two "good" SCSI Status values.
    If the requested blocks have fitted (or will most likely fit (when
    the IMMED bit is set)) into the disk's cache, it returns CONDITION
    MET. If it didn't (or will not) fit then it returns GOOD status.

    The goal of this patch is to stop the SCSI subsystem treating the
    CONDITION MET SCSI status as an error. The current state makes the
    PRE-FETCH command effectively unusable via pass-throughs.

    Signed-off-by: Douglas Gilbert
    Reviewed-by: Bart Van Assche
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Douglas Gilbert
     
  • [ Upstream commit 1c6b41fb92936fa5facea464d5d7cbf855966d04 ]

    If a recursive IOP_RESET is invoked, usually due to the eh_thread
    handling errors after the first reset, be sure we flag that the command
    thread has been stopped to avoid an Oops of the form;

    [ 336.620256] CPU: 28 PID: 1193 Comm: scsi_eh_0 Kdump: loaded Not tainted 4.14.0-49.el7a.ppc64le #1
    [ 336.620297] task: c000003fd630b800 task.stack: c000003fd61a4000
    [ 336.620326] NIP: c000000000176794 LR: c00000000013038c CTR: c00000000024bc10
    [ 336.620361] REGS: c000003fd61a7720 TRAP: 0300 Not tainted (4.14.0-49.el7a.ppc64le)
    [ 336.620395] MSR: 9000000000009033 CR: 22084022 XER: 20040000
    [ 336.620435] CFAR: c000000000130388 DAR: 0000000000000000 DSISR: 40000000 SOFTE: 1
    [ 336.620435] GPR00: c00000000013038c c000003fd61a79a0 c0000000014c7e00 0000000000000000
    [ 336.620435] GPR04: 000000000000000c 000000000000000c 9000000000009033 0000000000000477
    [ 336.620435] GPR08: 0000000000000477 0000000000000000 0000000000000000 c008000010f7d940
    [ 336.620435] GPR12: c00000000024bc10 c000000007a33400 c0000000001708a8 c000003fe3b881d8
    [ 336.620435] GPR16: c000003fe3b88060 c000003fd61a7d10 fffffffffffff000 000000000000001e
    [ 336.620435] GPR20: 0000000000000001 c000000000ebf1a0 0000000000000001 c000003fe3b88000
    [ 336.620435] GPR24: 0000000000000003 0000000000000002 c000003fe3b88840 c000003fe3b887e8
    [ 336.620435] GPR28: c000003fe3b88000 c000003fc8181788 0000000000000000 c000003fc8181700
    [ 336.620750] NIP [c000000000176794] exit_creds+0x34/0x160
    [ 336.620775] LR [c00000000013038c] __put_task_struct+0x8c/0x1f0
    [ 336.620804] Call Trace:
    [ 336.620817] [c000003fd61a79a0] [c000003fe3b88000] 0xc000003fe3b88000 (unreliable)
    [ 336.620853] [c000003fd61a79d0] [c00000000013038c] __put_task_struct+0x8c/0x1f0
    [ 336.620889] [c000003fd61a7a00] [c000000000171418] kthread_stop+0x1e8/0x1f0
    [ 336.620922] [c000003fd61a7a40] [c008000010f7448c] aac_reset_adapter+0x14c/0x8d0 [aacraid]
    [ 336.620959] [c000003fd61a7b00] [c008000010f60174] aac_eh_host_reset+0x84/0x100 [aacraid]
    [ 336.621010] [c000003fd61a7b30] [c000000000864f24] scsi_try_host_reset+0x74/0x180
    [ 336.621046] [c000003fd61a7bb0] [c000000000867ac0] scsi_eh_ready_devs+0xc00/0x14d0
    [ 336.625165] [c000003fd61a7ca0] [c0000000008699e0] scsi_error_handler+0x550/0x730
    [ 336.632101] [c000003fd61a7dc0] [c000000000170a08] kthread+0x168/0x1b0
    [ 336.639031] [c000003fd61a7e30] [c00000000000b528] ret_from_kernel_thread+0x5c/0xb4
    [ 336.645971] Instruction dump:
    [ 336.648743] 384216a0 7c0802a6 fbe1fff8 f8010010 f821ffd1 7c7f1b78 60000000 60000000
    [ 336.657056] 39400000 e87f0838 f95f0838 7c0004ac 314affff 7d40192d 40c2fff4
    [ 336.663997] -[ end trace 4640cf8d4945ad95 ]-

    So flag when the thread is stopped by setting the thread pointer to NULL.

    Signed-off-by: Dave Carroll
    Reviewed-by: Raghava Aditya Renukunta
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Dave Carroll
     
  • [ Upstream commit 89d0c804392bb962553f23dc4c119d11b6bd1675 ]

    iscsi tcp will first send out data, then calculate and send data
    digest. If we don't have BDI_CAP_STABLE_WRITES, the page cache will be
    written in spite of the on going writeback. Consequently, wrong digest
    will be got and sent to target.

    To fix this, set BDI_CAP_STABLE_WRITES when data digest is enabled
    in iscsi_tcp .slave_configure callback.

    Signed-off-by: Jianchao Wang
    Acked-by: Chris Leech
    Acked-by: Lee Duncan
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jianchao Wang
     
  • [ Upstream commit 20bd1d026aacc5399464f8328f305985c493cde3 ]

    If the read-only flag is true on a SCSI disk, re-reading the partition
    table sets the flag back to false.

    To observe this bug, you can run:

    1. blockdev --setro /dev/sda
    2. blockdev --rereadpt /dev/sda
    3. blockdev --getro /dev/sda

    This commit reads the disk's old state and combines it with the device
    disk-reported state rather than unconditionally marking it as RW.

    Reported-by: Li Ning
    Signed-off-by: Jeremy Cline
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Jeremy Cline
     
  • [ Upstream commit 864449eea7c600596e305ffdc4a6a846414b222c ]

    The firmware event workqueue should not be marked as WQ_MEM_RECLAIM
    as it's doesn't need to make forward progress under memory pressure.
    In the current state it will result in a deadlock if the device had been
    forcefully removed.

    Cc: Sreekanth Reddy
    Cc: Suganath Prabu Subramani
    Acked-by: Sreekanth Reddy
    Signed-off-by: Hannes Reinecke
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Hannes Reinecke
     
  • [ Upstream commit 967823d6c3980a30e214b92bfe6a101e7b46d025 ]

    BUG: unable to handle kernel NULL pointer dereference at 0000000000000100

    [ 985.596918] IP: _raw_spin_lock_bh+0x17/0x30
    [ 985.601581] PGD 0 P4D 0
    [ 985.604405] Oops: 0002 [#1] SMP
    :
    [ 985.704533] CPU: 16 PID: 1156 Comm: qedi_thread/16 Not tainted 4.16.0-rc2 #1
    [ 985.712397] Hardware name: Dell Inc. PowerEdge R730/0599V5, BIOS 2.4.3 01/17/2017
    [ 985.720747] RIP: 0010:_raw_spin_lock_bh+0x17/0x30
    [ 985.725996] RSP: 0018:ffffa4b1c43d3e10 EFLAGS: 00010246
    [ 985.731823] RAX: 0000000000000000 RBX: ffff94a31bd03000 RCX: 0000000000000000
    [ 985.739783] RDX: 0000000000000001 RSI: ffff94a32fa16938 RDI: 0000000000000100
    [ 985.747744] RBP: 0000000000000004 R08: 0000000000000000 R09: 0000000000000a33
    [ 985.755703] R10: 0000000000000000 R11: ffffa4b1c43d3af0 R12: 0000000000000000
    [ 985.763662] R13: ffff94a301f40818 R14: 0000000000000000 R15: 000000000000000c
    [ 985.771622] FS: 0000000000000000(0000) GS:ffff94a32fa00000(0000) knlGS:0000000000000000
    [ 985.780649] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    [ 985.787057] CR2: 0000000000000100 CR3: 000000067a009006 CR4: 00000000001606e0
    [ 985.795017] Call Trace:
    [ 985.797747] qedi_fp_process_cqes+0x258/0x980 [qedi]
    [ 985.803294] qedi_percpu_io_thread+0x10f/0x1b0 [qedi]
    [ 985.808931] kthread+0xf5/0x130
    [ 985.812434] ? qedi_free_uio+0xd0/0xd0 [qedi]
    [ 985.817298] ? kthread_bind+0x10/0x10
    [ 985.821372] ? do_syscall_64+0x6e/0x1a0

    Signed-off-by: Manish Rangankar
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Manish Rangankar
     
  • [ Upstream commit 1bc5ad3a6acdcf56f83272f2de1cd2389ea9e9e2 ]

    A system crashes when continuously removing/re-adding the storage
    controller.

    Signed-off-by: Manish Rangankar
    Reviewed-by: Ewan D. Milne
    Reviewed-by: Tomas Henzl
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Manish Rangankar
     
  • [ Upstream commit 00c20cdc79259c6c5bf978b21af96c2d3edb646d ]

    When aacraid init fails with "AAC0: adapter self-test failed.", shutdown
    leads to UBSAN warning and then oops:

    [154316.118423] ================================================================================
    [154316.118508] UBSAN: Undefined behaviour in drivers/scsi/scsi_lib.c:2328:27
    [154316.118566] member access within null pointer of type 'struct Scsi_Host'
    [154316.118631] CPU: 2 PID: 14530 Comm: reboot Tainted: G W 4.15.0-dirty #89
    [154316.118701] Hardware name: Hewlett Packard HP NetServer/HP System Board, BIOS 4.06.46 PW 06/25/2003
    [154316.118774] Call Trace:
    [154316.118848] dump_stack+0x48/0x65
    [154316.118916] ubsan_epilogue+0xe/0x40
    [154316.118976] __ubsan_handle_type_mismatch+0xfb/0x180
    [154316.119043] scsi_block_requests+0x20/0x30
    [154316.119135] aac_shutdown+0x18/0x40 [aacraid]
    [154316.119196] pci_device_shutdown+0x33/0x50
    [154316.119269] device_shutdown+0x18a/0x390
    [...]
    [154316.123435] BUG: unable to handle kernel NULL pointer dereference at 000000f4
    [154316.123515] IP: scsi_block_requests+0xa/0x30

    This is because aac_shutdown() does

    struct Scsi_Host *shost = pci_get_drvdata(dev);
    scsi_block_requests(shost);

    and that assumes shost has been assigned with pci_set_drvdata().

    However, pci_set_drvdata(pdev, shost) is done in aac_probe_one() far
    after bailing out with error from calling the init function
    ((*aac_drivers[index].init)(aac)), and when the init function fails, no
    error is returned from aac_probe_one() so PCI layer assumes there is
    driver attached, and tries to shut it down later.

    Fix it by returning error from aac_probe_one() when card-specific init
    function fails.

    This fixes reboot on my HP NetRAID-4M with dead battery.

    Signed-off-by: Meelis Roos
    Reviewed-by: Dave Carroll
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Meelis Roos
     
  • [ Upstream commit 1683ce57f568c7c92d53e9234624a53554a29cd5 ]

    The data in NVRAM is not guaranteed to be NUL terminated. Since
    snprintf expects byte-stream to accommodate null byte, the CHAP secret
    is truncated. Use sprintf instead of snprintf to fix the truncation of
    CHAP name and secret.

    Signed-off-by: Andrew Vasquez
    Signed-off-by: Nilesh Javali
    Reviewed-by: Bart Van Assche
    Acked-by: Chris Leech
    Acked-by: Lee Duncan
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Andrew Vasquez
     
  • [ Upstream commit cabe92a55e3a12005a4ac4d3954c9a174b0efe2a ]

    Increase cmd_per_lun to allow more I/Os in progress per device,
    particularly for NVMe's. The Hyper-V host side can handle the higher
    count with no issues.

    Signed-off-by: Michael Kelley
    Reviewed-by: K. Y. Srinivasan
    Acked-by: K. Y. Srinivasan
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Michael Kelley (EOSG)
     
  • [ Upstream commit c02189e12ce3bf3808cb880569d3b10249f50bd9 ]

    A left shift must shift less than the bit width of the left argument.
    Avoid triggering undefined behavior if ha->mbx_count == 32.

    This patch avoids that UBSAN reports the following complaint:

    UBSAN: Undefined behaviour in drivers/scsi/qla2xxx/qla_isr.c:275:14
    shift exponent 32 is too large for 32-bit type 'int'
    Call Trace:
    dump_stack+0x4e/0x6c
    ubsan_epilogue+0xd/0x3b
    __ubsan_handle_shift_out_of_bounds+0x112/0x14c
    qla2x00_mbx_completion+0x1c5/0x25d [qla2xxx]
    qla2300_intr_handler+0x1ea/0x3bb [qla2xxx]
    qla2x00_mailbox_command+0x77b/0x139a [qla2xxx]
    qla2x00_mbx_reg_test+0x83/0x114 [qla2xxx]
    qla2x00_chip_diag+0x354/0x45f [qla2xxx]
    qla2x00_initialize_adapter+0x2c2/0xa4e [qla2xxx]
    qla2x00_probe_one+0x1681/0x392e [qla2xxx]
    pci_device_probe+0x10b/0x1f1
    driver_probe_device+0x21f/0x3a4
    __driver_attach+0xa9/0xe1
    bus_for_each_dev+0x6e/0xb5
    driver_attach+0x22/0x3c
    bus_add_driver+0x1d1/0x2ae
    driver_register+0x78/0x130
    __pci_register_driver+0x75/0xa8
    qla2x00_module_init+0x21b/0x267 [qla2xxx]
    do_one_initcall+0x5a/0x1e2
    do_init_module+0x9d/0x285
    load_module+0x20db/0x38e3
    SYSC_finit_module+0xa8/0xbc
    SyS_finit_module+0x9/0xb
    do_syscall_64+0x77/0x271
    entry_SYSCALL64_slow_path+0x25/0x25

    Reported-by: Meelis Roos
    Signed-off-by: Bart Van Assche
    Cc: Himanshu Madhani
    Reviewed-by: Laurence Oberman
    Acked-by: Himanshu Madhani
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Bart Van Assche
     
  • [ Upstream commit e6f791d95313c85f3dd4a26141e28e50ae9aa0ae ]

    We wanted to exit the loop with "div" set to zero, but instead, if we
    don't hit the break then "div" is -1 when we finish the loop. It leads
    to an array underflow a few lines later.

    Signed-off-by: Dan Carpenter
    Reviewed-by: Johannes Thumshirn
    Acked-by: Matthew Wilcox
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Dan Carpenter
     
  • [ Upstream commit ecf7ff49945f5741fa1da112f994939f942031d3 ]

    When a request times out we set the io_req flag BNX2FC_FLAG_IO_COMPL so
    that if a subsequent completion comes in on that task ID we will ignore
    it. The issue is that in the check for this flag there is a missing
    return so we will continue to process a request which may have already
    been returned to the ownership of the SCSI layer. This can cause
    unpredictable results.

    Solution is to add in the missing return.

    [mkp: typo plus title shortening]

    Signed-off-by: Chad Dupuis
    Reviewed-by: Laurence Oberman
    Tested-by: Laurence Oberman
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Chad Dupuis
     
  • [ Upstream commit 84af7e8b895088d89f246d6b0f82717fafdebf61 ]

    WRITE_SAME command is not supported by UFS. Enable a quirk for the upper
    level drivers to not send WRITE SAME command.

    [mkp: botched patch, applied by hand]

    Signed-off-by: Sujit Reddy Thumma
    Signed-off-by: Subhash Jadavani
    Signed-off-by: Asutosh Das
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Sujit Reddy Thumma
     
  • [ Upstream commit 2ce87cc5b269510de9ca1185ca8a6e10ec78c069 ]

    This patch fixes memory corrpution while performing HBA Reset test.

    Following stack trace is seen:

    [ 466.397219] BUG: unable to handle kernel NULL pointer dereference at 0000000000000020
    [ 466.433669] IP: [] qlt_free_session_done+0x260/0x5f0 [qla2xxx]
    [ 466.467731] PGD 0
    [ 466.476718] Oops: 0000 [#1] SMP

    Signed-off-by: Quinn Tran
    Signed-off-by: Himanshu Madhani
    Reviewed-by: Johannes Thumshirn
    Signed-off-by: Martin K. Petersen
    Signed-off-by: Sasha Levin
    Signed-off-by: Greg Kroah-Hartman

    Quinn Tran