From: Arun Easi <ae...@marvell.com>

commit 8de309e7299a00b3045fb274f82b326f356404f0 upstream.

Crash stack:
        [576544.715489] Unable to handle kernel paging request for data at 
address 0xd00000000f970000
        [576544.715497] Faulting instruction address: 0xd00000000f880f64
        [576544.715503] Oops: Kernel access of bad area, sig: 11 [#1]
        [576544.715506] SMP NR_CPUS=2048 NUMA pSeries
        :
        [576544.715703] NIP [d00000000f880f64] 
.qla27xx_fwdt_template_valid+0x94/0x100 [qla2xxx]
        [576544.715722] LR [d00000000f7952dc] 
.qla24xx_load_risc_flash+0x2fc/0x590 [qla2xxx]
        [576544.715726] Call Trace:
        [576544.715731] [c0000004d0ffb000] [c0000006fe02c350] 
0xc0000006fe02c350 (unreliable)
        [576544.715750] [c0000004d0ffb080] [d00000000f7952dc] 
.qla24xx_load_risc_flash+0x2fc/0x590 [qla2xxx]
        [576544.715770] [c0000004d0ffb170] [d00000000f7aa034] 
.qla81xx_load_risc+0x84/0x1a0 [qla2xxx]
        [576544.715789] [c0000004d0ffb210] [d00000000f79f7c8] 
.qla2x00_setup_chip+0xc8/0x910 [qla2xxx]
        [576544.715808] [c0000004d0ffb300] [d00000000f7a631c] 
.qla2x00_initialize_adapter+0x4dc/0xb00 [qla2xxx]
        [576544.715826] [c0000004d0ffb3e0] [d00000000f78ce28] 
.qla2x00_probe_one+0xf08/0x2200 [qla2xxx]

Link: https://lore.kernel.org/r/20201202132312.19966-8-njav...@marvell.com
Fixes: f73cb695d3ec ("[SCSI] qla2xxx: Add support for ISP2071.")
Cc: sta...@vger.kernel.org
Reviewed-by: Himanshu Madhani <himanshu.madh...@oracle.com>
Signed-off-by: Arun Easi <ae...@marvell.com>
Signed-off-by: Nilesh Javali <njav...@marvell.com>
Signed-off-by: Martin K. Petersen <martin.peter...@oracle.com>
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/scsi/qla2xxx/qla_tmpl.c |    9 +++++----
 drivers/scsi/qla2xxx/qla_tmpl.h |    2 +-
 2 files changed, 6 insertions(+), 5 deletions(-)

--- a/drivers/scsi/qla2xxx/qla_tmpl.c
+++ b/drivers/scsi/qla2xxx/qla_tmpl.c
@@ -910,7 +910,8 @@ qla27xx_template_checksum(void *p, ulong
 static inline int
 qla27xx_verify_template_checksum(struct qla27xx_fwdt_template *tmp)
 {
-       return qla27xx_template_checksum(tmp, tmp->template_size) == 0;
+       return qla27xx_template_checksum(tmp,
+               le32_to_cpu(tmp->template_size)) == 0;
 }
 
 static inline int
@@ -926,7 +927,7 @@ qla27xx_execute_fwdt_template(struct scs
        ulong len = 0;
 
        if (qla27xx_fwdt_template_valid(tmp)) {
-               len = tmp->template_size;
+               len = le32_to_cpu(tmp->template_size);
                tmp = memcpy(buf, tmp, len);
                ql27xx_edit_template(vha, tmp);
                qla27xx_walk_template(vha, tmp, buf, &len);
@@ -942,7 +943,7 @@ qla27xx_fwdt_calculate_dump_size(struct
        ulong len = 0;
 
        if (qla27xx_fwdt_template_valid(tmp)) {
-               len = tmp->template_size;
+               len = le32_to_cpu(tmp->template_size);
                qla27xx_walk_template(vha, tmp, NULL, &len);
        }
 
@@ -954,7 +955,7 @@ qla27xx_fwdt_template_size(void *p)
 {
        struct qla27xx_fwdt_template *tmp = p;
 
-       return tmp->template_size;
+       return le32_to_cpu(tmp->template_size);
 }
 
 int
--- a/drivers/scsi/qla2xxx/qla_tmpl.h
+++ b/drivers/scsi/qla2xxx/qla_tmpl.h
@@ -13,7 +13,7 @@
 struct __packed qla27xx_fwdt_template {
        __le32 template_type;
        __le32 entry_offset;
-       uint32_t template_size;
+       __le32 template_size;
        uint32_t count;         /* borrow field for running/residual count */
 
        __le32 entry_count;


Reply via email to