Merge pull request #347 from bytedance/fix_iser_sigsegv_v2

Fix iSER segmentation faults
This commit is contained in:
Bart Van Assche
2020-11-08 07:29:17 -08:00
committed by GitHub
2 changed files with 9 additions and 4 deletions

View File

@@ -72,7 +72,8 @@ enum desc_type {
enum data_dir{
DATA_WRITE = 0,
DATA_READ};
DATA_READ,
DATA_NONE};
#define SHIFT_4K 12
#define SIZE_4K (1ULL << SHIFT_4K)

View File

@@ -908,7 +908,8 @@ iser_send_command(struct iser_conn *iser_conn, struct iser_pdu *iser_pdu)
iscsi_set_error(iscsi, "error in prepare write cmd\n");
return -1;
}
}
} else
iser_pdu->desc->data_dir = DATA_NONE;
err = iser_post_send(iser_conn, tx_desc, true);
if (err)
@@ -1322,7 +1323,10 @@ iser_rcv_completion(struct iser_rx_desc *rx_desc,
uint32_t itt = scsi_get_uint32(&in.hdr[16]);
if (opcode == ISCSI_PDU_NOP_IN && itt == 0xffffffff)
goto nop_target;
goto no_waitpdu;
if (opcode == ISCSI_PDU_ASYNC_MSG)
goto no_waitpdu;
struct iscsi_pdu *iscsi_pdu;
struct iser_pdu *iser_pdu;
@@ -1355,7 +1359,7 @@ iser_rcv_completion(struct iser_rx_desc *rx_desc,
}
}
nop_target:
no_waitpdu:
/* decrementing conn->post_recv_buf_count only --after-- freeing the *
* task eliminates the need to worry on tasks which are completed in *
* parallel to the execution of iser_conn_term. So the code that waits *