SCSI fixes for 4.19-rc5
Subsystems (5)
James Bottomley
maintainerNine obvious bug fixes mostly in individual drivers. The target fix is of particular importance because it's CVE related.
The patch is available here:
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.git scsi-fixes
The short changelog is:
Adrian Hunter (1):
scsi: ufs: Disable blk-mq for now
James Smart (1):
scsi: lpfc: Synchronize access to remoteport via rport
Johannes Thumshirn (1):
scsi: sd: don't crash the host on invalid commands
Laura Abbott (2):
scsi: ibmvscsis: Ensure partition name is properly NUL terminated
scsi: ibmvscsis: Fix a stringop-overflow warning
Vincent Pelletier (2):
scsi: target: iscsi: Use bin2hex instead of a re-implementation
scsi: target: iscsi: Use hex2bin instead of a re-implementation
Wen Xiong (1):
scsi: ipr: System hung while dlpar adding primary ipr adapter back
Xuewei Zhang (1):
scsi: sd: Contribute to randomness when running rotational device
And the diffstat:
drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c | 5 +- drivers/scsi/ipr.c | 106 ++++++++++++++++++------------- drivers/scsi/ipr.h | 1 + drivers/scsi/lpfc/lpfc_attr.c | 15 +++-- drivers/scsi/lpfc/lpfc_debugfs.c | 10 +-- drivers/scsi/lpfc/lpfc_nvme.c | 11 +++- drivers/scsi/sd.c | 6 +- drivers/scsi/ufs/ufshcd.c | 7 ++ drivers/target/iscsi/iscsi_target_auth.c | 45 +++++-------- 9 files changed, 116 insertions(+), 90 deletions(-)
With full diff below.
James
---
drivers/scsi/ibmvscsi_tgt/ibmvscsi_tgt.c +2 -3
@@ -3474,11 +3474,10 @@ static int ibmvscsis_probe(struct vio_dev *vdev, vscsi->dds.window[LOCAL ].liobn, vscsi->dds.window[REMOTE].liobn); -strcpy (vscsi->eye,"VSCSI " ); -strncat (vscsi->eye, vdev->name,MAX_EYE ); +snprintf (vscsi->eye,sizeof (vscsi->eye),"VSCSI %s" , vdev->name); vscsi->dds.unit_id = vdev->unit_address; -strncpy (vscsi->dds.partition_name, partition_name, +strscpy (vscsi->dds.partition_name, partition_name,sizeof (vscsi->dds.partition_name)); vscsi->dds.partition_num = partition_number;
drivers/scsi/ipr.c +61 -45
135 lines not on this page · raw message
drivers/scsi/ipr.h +1 -0
@@ -1575,6 +1575,7 @@ struct ipr_ioa_cfg {u8 saved_mode_page_len;struct work_struct work_q; +struct work_struct scsi_add_work_q;struct workqueue_struct *reset_work_q;wait_queue_head_t reset_wait_q;
drivers/scsi/lpfc/lpfc_attr.c +10 -5
@@ -360,12 +360,12 @@ lpfc_nvme_info_show(struct device *dev, struct device_attribute *attr, goto buffer_done;list_for_each_entry (ndlp, &vport->fc_nodes, nlp_listp) { + nrport =NULL ; +spin_lock (&vport->phba->hbalock); rport =lpfc_ndlp_get_nrport (ndlp); -if (!rport) -continue ; - -/* local short-hand pointer. */ - nrport = rport->remoteport; +if (rport) + nrport = rport->remoteport; +spin_unlock (&vport->phba->hbalock);if (!nrport)continue ;
@@ -3386,6 +3386,7 @@ lpfc_update_rport_devloss_tmo(struct lpfc_vport *vport)struct lpfc_nodelist *ndlp;#if (IS_ENABLED (CONFIG_NVME_FC ))struct lpfc_nvme_rport *rport; +struct nvme_fc_remote_port *remoteport =NULL ;#endif shost =lpfc_shost_from_vport (vport);
@@ -3396,8 +3397,12 @@ lpfc_update_rport_devloss_tmo(struct lpfc_vport *vport)if (ndlp->rport) ndlp->rport->dev_loss_tmo = vport->cfg_devloss_tmo;#if (IS_ENABLED (CONFIG_NVME_FC )) +spin_lock (&vport->phba->hbalock); rport =lpfc_ndlp_get_nrport (ndlp);if (rport) + remoteport = rport->remoteport; +spin_unlock (&vport->phba->hbalock); +if (remoteport)nvme_fc_set_remoteport_devloss (rport->remoteport, vport->cfg_devloss_tmo);#endif
drivers/scsi/lpfc/lpfc_debugfs.c +5 -5
@@ -551,7 +551,7 @@ lpfc_debugfs_nodelist_data(struct lpfc_vport *vport, char *buf, int size)unsigned char *statep;struct nvme_fc_local_port *localport;struct lpfc_nvmet_tgtport *tgtp; -struct nvme_fc_remote_port *nrport; +struct nvme_fc_remote_port *nrport =NULL ;struct lpfc_nvme_rport *rport; cnt = (LPFC_NODELIST_SIZE /LPFC_NODELIST_ENTRY_SIZE );
@@ -696,11 +696,11 @@ lpfc_debugfs_nodelist_data(struct lpfc_vport *vport, char *buf, int size) len +=snprintf (buf + len, size - len,"\tRport List:\n" );list_for_each_entry (ndlp, &vport->fc_nodes, nlp_listp) {/* local short-hand pointer. */ +spin_lock (&phba->hbalock); rport =lpfc_ndlp_get_nrport (ndlp); -if (!rport) -continue ; - - nrport = rport->remoteport; +if (rport) + nrport = rport->remoteport; +spin_unlock (&phba->hbalock);if (!nrport)continue ;
drivers/scsi/lpfc/lpfc_nvme.c +8 -3
@@ -2725,7 +2725,9 @@ lpfc_nvme_register_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp) rpinfo.port_name =wwn_to_u64 (ndlp->nlp_portname.u.wwn); rpinfo.node_name =wwn_to_u64 (ndlp->nlp_nodename.u.wwn); +spin_lock_irq (&vport->phba->hbalock); oldrport =lpfc_ndlp_get_nrport (ndlp); +spin_unlock_irq (&vport->phba->hbalock);if (!oldrport)lpfc_nlp_get (ndlp);
@@ -2840,7 +2842,7 @@ lpfc_nvme_unregister_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)struct nvme_fc_local_port *localport;struct lpfc_nvme_lport *lport;struct lpfc_nvme_rport *rport; -struct nvme_fc_remote_port *remoteport; +struct nvme_fc_remote_port *remoteport =NULL ; localport = vport->localport;
@@ -2854,11 +2856,14 @@ lpfc_nvme_unregister_port(struct lpfc_vport *vport, struct lpfc_nodelist *ndlp)if (!lport) goto input_err; +spin_lock_irq (&vport->phba->hbalock); rport =lpfc_ndlp_get_nrport (ndlp); -if (!rport) +if (rport) + remoteport = rport->remoteport; +spin_unlock_irq (&vport->phba->hbalock); +if (!remoteport) goto input_err; - remoteport = rport->remoteport; lpfc_printf_vlog(vport, KERN_INFO, LOG_NVME_DISC, "6033 Unreg nvme remoteport %p, portname x%llx, " "port_id x%06x, portstate x%x port type x%x\n",
drivers/scsi/sd.c +5 -1
@@ -1276,7 +1276,8 @@ static int sd_init_command(struct scsi_cmnd *cmd)case REQ_OP_ZONE_RESET :return sd_zbc_setup_reset_cmnd (cmd);default : -BUG (); +WARN_ON_ONCE (1 ); +return BLKPREP_KILL ; } }
@@ -2959,6 +2960,9 @@ static void sd_read_block_characteristics(struct scsi_disk *sdkp)if (rot ==1 ) {blk_queue_flag_set (QUEUE_FLAG_NONROT , q);blk_queue_flag_clear (QUEUE_FLAG_ADD_RANDOM , q); + }else { +blk_queue_flag_clear (QUEUE_FLAG_NONROT , q); +blk_queue_flag_set (QUEUE_FLAG_ADD_RANDOM , q); }if (sdkp->device->type ==TYPE_ZBC ) {
drivers/scsi/ufs/ufshcd.c +7 -0
@@ -7940,6 +7940,13 @@ int ufshcd_alloc_host(struct device *dev, struct ufs_hba **hba_handle) err = -ENOMEM ; goto out_error; } + +/* +* Do not use blk-mq at this time because blk-mq does not support +* runtime pm. +*/ + host->use_blk_mq = false; + hba =shost_priv (host); hba->host = host; hba->dev = dev;
drivers/target/iscsi/iscsi_target_auth.c +17 -28
89 lines not on this page · raw message
Quoted 6 lines · James Bottomley
Nine obvious bug fixes mostly in individual drivers. The target fix is of particular importance because it's CVE related.
The patch is available here:
git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi.gitscsi-fixes
Now pulled, thanks.
greg k-h