Merge pull request #338 from ddiss/pdu_cancel_use_after_free
pdu: Fix use after free during cancellation
This commit is contained in:
@@ -788,13 +788,11 @@ iscsi_cancel_pdus(struct iscsi_context *iscsi)
|
|||||||
pdu->callback(iscsi, SCSI_STATUS_CANCELLED,
|
pdu->callback(iscsi, SCSI_STATUS_CANCELLED,
|
||||||
NULL, pdu->private_data);
|
NULL, pdu->private_data);
|
||||||
}
|
}
|
||||||
iscsi->drv->free_pdu(iscsi, pdu);
|
|
||||||
if (!(pdu->outdata.data[0] & ISCSI_PDU_IMMEDIATE) &&
|
if (!(pdu->outdata.data[0] & ISCSI_PDU_IMMEDIATE) &&
|
||||||
(pdu->outdata.data[0] & 0x3f) != ISCSI_PDU_DATA_OUT) {
|
(pdu->outdata.data[0] & 0x3f) != ISCSI_PDU_DATA_OUT) {
|
||||||
iscsi->cmdsn--;
|
iscsi->cmdsn--;
|
||||||
}
|
}
|
||||||
|
iscsi->drv->free_pdu(iscsi, pdu);
|
||||||
|
|
||||||
}
|
}
|
||||||
while ((pdu = iscsi->waitpdu)) {
|
while ((pdu = iscsi->waitpdu)) {
|
||||||
ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu);
|
ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu);
|
||||||
|
|||||||
Reference in New Issue
Block a user