iscsi: check header digests for mgmt tasks
Forgot to send this patch. Please merge with this patchset. Thanks.
Quoted 1 line
From Wang Zhenyu:
check header digest for cmd and mgmt tasks
Signed-off-by Wang Zhenyu <[email protected]>
Signed-off-by Mike Christie <[email protected]>
Signed-off-by Alex Aizman <[email protected]>
Signed-off-by Dmitry Yusupov <[email protected]>
drivers/scsi/iscsi_tcp.c +12 -12
@@ -581,6 +581,12 @@ iscsi_hdr_recv(struct iscsi_conn *conn)crypto_digest_digest (conn->rx_tfm, &sg,1 , (u8 *)&cdgst); rdgst = *(uint32_t *)((char *)hdr +sizeof (struct iscsi_hdr ) + conn->in.ahslen); +if (cdgst != rdgst) { +printk (KERN_ERR "iscsi_tcp: itt %x: hdrdgst error " +"recv 0x%x calc 0x%x\n" , conn->in.itt, rdgst, + cdgst); +return ISCSI_ERR_HDR_DGST ; + } }/* save opcode for later */
@@ -610,13 +616,6 @@ iscsi_hdr_recv(struct iscsi_conn *conn) conn->in.ahslen, conn->in.datalen);if (conn->in.itt < session->cmds_max) { -if (conn->hdrdgst_en && cdgst != rdgst) { -printk (KERN_ERR "iscsi_tcp: itt %x: hdrdgst error " -"recv 0x%x calc 0x%x\n" , conn->in.itt, rdgst, - cdgst); -return ISCSI_ERR_HDR_DGST ; - } - ctask = (struct iscsi_cmd_task *)session->cmds[conn->in.itt];if (!ctask->sc) {
@@ -1128,8 +1127,7 @@ more:*/ rc =iscsi_hdr_recv (conn);if (!rc && conn->in.datalen) { -if (conn->datadgst_en && - conn->in.opcode !=ISCSI_OP_LOGIN_RSP ) { +if (conn->datadgst_en) {BUG_ON (!conn->data_rx_tfm);crypto_digest_init (conn->data_rx_tfm); }
@@ -1179,8 +1177,7 @@ more: } conn->in.copy -= conn->in.padding; conn->in.offset += conn->in.padding; -if (conn->datadgst_en && - conn->in.opcode !=ISCSI_OP_LOGIN_RSP ) { +if (conn->datadgst_en) {if (conn->in.padding) {debug_tcp ("padding -> %d\n" , conn->in.padding);memset (pad,0 , conn->in.padding);
@@ -2875,8 +2872,11 @@ iscsi_conn_stop(iscsi_connh_t connh, int* in hdr_extract() and will be re-negotiated at * set_param() time. */ -if (flag ==STOP_CONN_RECOVER ) +if (flag ==STOP_CONN_RECOVER ) { conn->hdr_size =sizeof (struct iscsi_hdr ); + conn->hdrdgst_en =0 ; + conn->datadgst_en =0 ; + } }up (&conn->xmitsema); }