On Tue, 2012-03-13 at 20:20 +0300, Dan Carpenter wrote:
> Hello Nicholas,
>
> The patch 962f988d031f: "qla2xxx: Add LLD target-mode infrastructure
> for >= 24xx series" from Mar 8, 2012, leads to the following Smatch
> warning:
>
> drivers/scsi/qla2xxx/qla_target.c:3207 qla_tgt_handle_srr_work()
> error: potential null derefence 'vha'.
>
>
> drivers/scsi/qla2xxx/qla_target.c
> 3198 imm = NULL;
> 3199 list_for_each_entry_safe(i, ti, &tgt->srr_imm_list,
> 3200 srr_list_entry) {
> 3201 if (i->srr_id == sctio->srr_id) {
> 3202 list_del(&i->srr_list_entry);
> 3203 if (imm) {
> 3204 printk(KERN_ERR "qla_target(%d): There must "
> 3205 "be only one IMM SRR per CTIO SRR "
> 3206 "(IMM SRR %p, id %d, CTIO %p\n",
> 3207 vha->vp_idx, i, i->srr_id, sctio);
> ^^^
> It looks like "vha" might not be initialized yet.
>
> 3208 qla_tgt_reject_free_srr_imm(vha, i, 0);
> 3209 } else
> 3210 imm = i;
> 3211 }
> 3212 }
> 3213
> 3214 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xe12f, "IMM SRR %p, CTIO SRR %p (id %d)\n",
> 3215 imm, sctio, sctio->srr_id);
> 3216
> 3217 if (imm == NULL) {
> 3218 ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xe130, "Not found matching IMM"
> 3219 " for SRR CTIO (id %d)\n", sctio->srr_id);
> 3220 continue;
> 3221 } else
> 3222 list_del(&sctio->srr_list_entry);
> 3223
> 3224 spin_unlock_irqrestore(&tgt->srr_lock, flags);
> 3225
> 3226 cmd = sctio->cmd;
> 3227 vha = cmd->vha;
> ^^^
> It gets set here.
>
It looks like this should be using qla_tgt->vha everywhere. Applying
the following patch.
--nab
iff --git a/drivers/scsi/qla2xxx/qla_target.c b/drivers/scsi/qla2xxx/qla_target.c
index e415d1e..2af075b 100644
--- a/drivers/scsi/qla2xxx/qla_target.c
+++ b/drivers/scsi/qla2xxx/qla_target.c
@@ -3169,11 +3169,11 @@ static void qla_tgt_reject_free_srr_imm(struct scsi_qla_host *vha, struct qla_tg
static void qla_tgt_handle_srr_work(struct work_struct *work)
{
struct qla_tgt *tgt = container_of(work, struct qla_tgt, srr_work);
- struct scsi_qla_host *vha = NULL;
+ struct scsi_qla_host *vha = tgt->vha;
struct qla_tgt_srr_ctio *sctio;
unsigned long flags;
- ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xe12e, "Entering SRR work (tgt %p)\n", tgt);
+ ql_dbg(ql_dbg_tgt_mgt, vha, 0xe12e, "Entering SRR work (tgt %p)\n", tgt);
restart:
spin_lock_irqsave(&tgt->srr_lock, flags);
@@ -3192,17 +3192,17 @@ restart:
"be only one IMM SRR per CTIO SRR "
"(IMM SRR %p, id %d, CTIO %p\n",
vha->vp_idx, i, i->srr_id, sctio);
- qla_tgt_reject_free_srr_imm(vha, i, 0);
+ qla_tgt_reject_free_srr_imm(tgt->vha, i, 0);
} else
imm = i;
}
}
- ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xe12f, "IMM SRR %p, CTIO SRR %p (id %d)\n",
+ ql_dbg(ql_dbg_tgt_mgt, vha, 0xe12f, "IMM SRR %p, CTIO SRR %p (id %d)\n",
imm, sctio, sctio->srr_id);
if (imm == NULL) {
- ql_dbg(ql_dbg_tgt_mgt, tgt->vha, 0xe130, "Not found matching IMM"
+ ql_dbg(ql_dbg_tgt_mgt, vha, 0xe130, "Not found matching IMM"
" for SRR CTIO (id %d)\n", sctio->srr_id);
continue;
} else
@@ -3211,7 +3211,6 @@ restart:
spin_unlock_irqrestore(&tgt->srr_lock, flags);
cmd = sctio->cmd;
- vha = cmd->vha;
/*
* Reset qla_tgt_cmd SRR values and SGL pointer+count to follow
* tcm_qla2xxx_write_pending() and tcm_qla2xxx_queue_data_in()
--
To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[SCSI Target Devel]
[Linux SCSI Target Infrastructure]
[Kernel Newbies]
[Share Photos]
[IDE]
[Security]
[Git]
[Netfilter]
[Bugtraq]
[Photos]
[Yosemite]
[Yosemite News]
[MIPS Linux]
[ARM Linux]
[Linux Security]
[Linux RAID]
[Linux ATA RAID]
[Linux IIO]
[Samba]
[Video 4 Linux]
[Device Mapper]
[Linux Resources]