History

Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley: "Three fixes. One is the qla24xx MSI regression, one is a theoretical problem over blacklist matching, which would bite USB badly if it ever triggered and one is a system hang with a particular type of IPR device" * tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi: qla2xxx: Fix NULL pointer deref in QLA interrupt SCSI: fix new bug in scsi_dev_info_list string matching ipr: Clear interrupt on croc/crocodile when running with LSI

Linus Torvalds committed 10 years ago

Commit ee40fb22 parents b987c75 ea1a25c3 files · +8 −5Browse files

Unified · Split

3 files
  1. drivers/scsi/ipr.c +1 −0
  2. drivers/scsi/qla2xxx/qla_isr.c +1 −1
  3. drivers/scsi/scsi_devinfo.c +6 −4
drivers/scsi/ipr.c+1−0
@@ -10093,6 +10093,7 @@ static int ipr_probe_ioa(struct pci_dev *pdev, · 10092 unmodified lines
10093 ioa_cfg->intr_flag = IPR_USE_MSI;10093 ioa_cfg->intr_flag = IPR_USE_MSI;
10094 else {10094 else {
10095 ioa_cfg->intr_flag = IPR_USE_LSI;10095 ioa_cfg->intr_flag = IPR_USE_LSI;
10096 ioa_cfg->clear_isr = 1;
10096 ioa_cfg->nvectors = 1;10097 ioa_cfg->nvectors = 1;
10097 dev_info(&pdev->dev, "Cannot enable MSI.\n");10098 dev_info(&pdev->dev, "Cannot enable MSI.\n");
10098 }10099 }
drivers/scsi/qla2xxx/qla_isr.c+1−1
@@ -2548,7 +2548,7 @@ void qla24xx_process_response_queue(struct scsi_qla_host *vha, · 2547 unmodified lines
2548 if (!vha->flags.online)2548 if (!vha->flags.online)
2549 return;2549 return;
2550 2550
2551 if (rsp->msix->cpuid != smp_processor_id()) {2551 if (rsp->msix && rsp->msix->cpuid != smp_processor_id()) {
2552 /* if kernel does not notify qla of IRQ's CPU change,2552 /* if kernel does not notify qla of IRQ's CPU change,
2553 * then set it here.2553 * then set it here.
2554 */2554 */
drivers/scsi/scsi_devinfo.c+6−4
@@ -429,7 +429,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor, · 428 unmodified lines
429 * here, and we don't know what device it is429 * here, and we don't know what device it is
430 * trying to work with, leave it as-is.430 * trying to work with, leave it as-is.
431 */431 */
432 vmax = 8; /* max length of vendor */432 vmax = sizeof(devinfo->vendor);
433 vskip = vendor;433 vskip = vendor;
434 while (vmax > 0 && *vskip == ' ') {434 while (vmax > 0 && *vskip == ' ') {
435 vmax--;435 vmax--;
@@ -439,7 +439,7 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor, · 3 unmodified lines
439 while (vmax > 0 && vskip[vmax - 1] == ' ')439 while (vmax > 0 && vskip[vmax - 1] == ' ')
440 --vmax;440 --vmax;
441 441
442 mmax = 16; /* max length of model */442 mmax = sizeof(devinfo->model);
443 mskip = model;443 mskip = model;
444 while (mmax > 0 && *mskip == ' ') {444 while (mmax > 0 && *mskip == ' ') {
445 mmax--;445 mmax--;
@@ -455,10 +455,12 @@ static struct scsi_dev_info_list *scsi_dev_info_list_find(const char *vendor, · 9 unmodified lines
455 * Behave like the older version of get_device_flags.455 * Behave like the older version of get_device_flags.
456 */456 */
457 if (memcmp(devinfo->vendor, vskip, vmax) ||457 if (memcmp(devinfo->vendor, vskip, vmax) ||
458 devinfo->vendor[vmax])458 (vmax < sizeof(devinfo->vendor) &&
459 devinfo->vendor[vmax]))
459 continue;460 continue;
460 if (memcmp(devinfo->model, mskip, mmax) ||461 if (memcmp(devinfo->model, mskip, mmax) ||
461 devinfo->model[mmax])462 (mmax < sizeof(devinfo->model) &&
463 devinfo->model[mmax]))
462 continue;464 continue;
463 return devinfo;465 return devinfo;
464 } else {466 } else {