Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 383a298b authored by Joe Carnuccio's avatar Joe Carnuccio Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Retain loop test for fwdump length exceeding buffer length

parent 8b631d87
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -6356,8 +6356,8 @@ qla24xx_load_risc_flash(scsi_qla_host_t *vha, uint32_t *srisc_addr,
	    "-> template size %x bytes\n", dlen);
	if (dlen > risc_size * sizeof(*dcode)) {
		ql_log(ql_log_warn, vha, 0x0167,
		    "Failed fwdump template exceeds array by %x bytes\n",
		    (uint32_t)(dlen - risc_size * sizeof(*dcode)));
		    "Failed fwdump template exceeds array by %lx bytes\n",
		    (size_t)(dlen - risc_size * sizeof(*dcode)));
		goto default_template;
	}
	ha->fw_dump_template_len = dlen;
@@ -6658,8 +6658,8 @@ qla24xx_load_risc_blob(scsi_qla_host_t *vha, uint32_t *srisc_addr)
	    "-> template size %x bytes\n", dlen);
	if (dlen > risc_size * sizeof(*fwcode)) {
		ql_log(ql_log_warn, vha, 0x0177,
		    "Failed fwdump template exceeds array by %x bytes\n",
		    (uint32_t)(dlen - risc_size * sizeof(*fwcode)));
		    "Failed fwdump template exceeds array by %lx bytes\n",
		    (size_t)(dlen - risc_size * sizeof(*fwcode)));
		goto default_template;
	}
	ha->fw_dump_template_len = dlen;
+9 −7
Original line number Diff line number Diff line
@@ -219,8 +219,6 @@ qla27xx_skip_entry(struct qla27xx_fwdt_entry *ent, void *buf)
{
	if (buf)
		ent->hdr.driver_flags |= DRIVER_FLAG_SKIP_ENTRY;
	ql_dbg(ql_dbg_misc + ql_dbg_verbose, NULL, 0xd011,
	    "Skipping entry %d\n", ent->hdr.entry_type);
}

static int
@@ -818,6 +816,8 @@ qla27xx_walk_template(struct scsi_qla_host *vha,
	ql_dbg(ql_dbg_misc, vha, 0xd01a,
	    "%s: entry count %lx\n", __func__, count);
	while (count--) {
		if (buf && *len >= vha->hw->fw_dump_len)
			break;
		if (qla27xx_find_entry(ent->hdr.entry_type)(vha, ent, buf, len))
			break;
		ent = qla27xx_next_entry(ent);
@@ -825,18 +825,20 @@ qla27xx_walk_template(struct scsi_qla_host *vha,

	if (count)
		ql_dbg(ql_dbg_misc, vha, 0xd018,
		    "%s: residual count (%lx)\n", __func__, count);
		    "%s: entry residual count (%lx)\n", __func__, count);

	if (ent->hdr.entry_type != ENTRY_TYPE_TMP_END)
		ql_dbg(ql_dbg_misc, vha, 0xd019,
		    "%s: missing end (%lx)\n", __func__, count);
		    "%s: missing end entry (%lx)\n", __func__, count);

	if (buf && *len != vha->hw->fw_dump_len)
		ql_dbg(ql_dbg_misc, vha, 0xd01b,
	    "%s: len=%lx\n", __func__, *len);
		    "%s: length=%#lx residual=%+ld\n",
		    __func__, *len, vha->hw->fw_dump_len - *len);

	if (buf) {
		ql_log(ql_log_warn, vha, 0xd015,
		    "Firmware dump saved to temp buffer (%ld/%p)\n",
		    "Firmware dump saved to temp buffer (%lu/%p)\n",
		    vha->host_no, vha->hw->fw_dump);
		qla2x00_post_uevent_work(vha, QLA_UEVENT_CODE_FW_DUMP);
	}