Commit ed537795 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull SCSI fixes from James Bottomley:
 "Two small changes, one in the lpfc driver and the other in the core.

  The core change is an additional footgun guard which prevents users
  from writing the wrong state to sysfs and causing a hang"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
  scsi: lpfc: Fix memory leak in lpfc_create_port()
  scsi: core: Restrict legal sdev_state transitions via sysfs
parents d4b7332e dc8e483f
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -4812,7 +4812,7 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)
	rc = lpfc_vmid_res_alloc(phba, vport);

	if (rc)
		goto out;
		goto out_put_shost;

	/* Initialize all internally managed lists. */
	INIT_LIST_HEAD(&vport->fc_nodes);
@@ -4830,16 +4830,17 @@ lpfc_create_port(struct lpfc_hba *phba, int instance, struct device *dev)

	error = scsi_add_host_with_dma(shost, dev, &phba->pcidev->dev);
	if (error)
		goto out_put_shost;
		goto out_free_vmid;

	spin_lock_irq(&phba->port_list_lock);
	list_add_tail(&vport->listentry, &phba->port_list);
	spin_unlock_irq(&phba->port_list_lock);
	return vport;

out_put_shost:
out_free_vmid:
	kfree(vport->vmid);
	bitmap_free(vport->vmid_priority_range);
out_put_shost:
	scsi_host_put(shost);
out:
	return NULL;
+8 −0
Original line number Diff line number Diff line
@@ -828,6 +828,14 @@ store_state_field(struct device *dev, struct device_attribute *attr,
	}

	mutex_lock(&sdev->state_mutex);
	switch (sdev->sdev_state) {
	case SDEV_RUNNING:
	case SDEV_OFFLINE:
		break;
	default:
		mutex_unlock(&sdev->state_mutex);
		return -EINVAL;
	}
	if (sdev->sdev_state == SDEV_RUNNING && state == SDEV_RUNNING) {
		ret = 0;
	} else {