Commit 8a47cd34 authored by Mike Christie's avatar Mike Christie Committed by James Bottomley

[SCSI] iscsi: check header digests for mgmt tasks

From Wang Zhenyu:

check header digest for cmd and mgmt tasks
Signed-off-by: default avatarWang Zhenyu <zhenyu.z.wang@intel.com>
Signed-off-by: default avatarMike Christie <michaelc@cs.wisc.edu>
Signed-off-by: default avatarAlex Aizman <itn780@yahoo.com>
Signed-off-by: default avatarDmitry Yusupov <dmitry_yus@yahoo.com>
Signed-off-by: default avatarJames Bottomley <James.Bottomley@SteelEye.com>
parent 4d841d6b
...@@ -581,6 +581,12 @@ iscsi_hdr_recv(struct iscsi_conn *conn) ...@@ -581,6 +581,12 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
crypto_digest_digest(conn->rx_tfm, &sg, 1, (u8 *)&cdgst); crypto_digest_digest(conn->rx_tfm, &sg, 1, (u8 *)&cdgst);
rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) + rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) +
conn->in.ahslen); 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 */ /* save opcode for later */
...@@ -610,13 +616,6 @@ iscsi_hdr_recv(struct iscsi_conn *conn) ...@@ -610,13 +616,6 @@ iscsi_hdr_recv(struct iscsi_conn *conn)
conn->in.ahslen, conn->in.datalen); conn->in.ahslen, conn->in.datalen);
if (conn->in.itt < session->cmds_max) { 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]; ctask = (struct iscsi_cmd_task *)session->cmds[conn->in.itt];
if (!ctask->sc) { if (!ctask->sc) {
...@@ -1128,8 +1127,7 @@ iscsi_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, ...@@ -1128,8 +1127,7 @@ iscsi_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb,
*/ */
rc = iscsi_hdr_recv(conn); rc = iscsi_hdr_recv(conn);
if (!rc && conn->in.datalen) { if (!rc && conn->in.datalen) {
if (conn->datadgst_en && if (conn->datadgst_en) {
conn->in.opcode != ISCSI_OP_LOGIN_RSP) {
BUG_ON(!conn->data_rx_tfm); BUG_ON(!conn->data_rx_tfm);
crypto_digest_init(conn->data_rx_tfm); crypto_digest_init(conn->data_rx_tfm);
} }
...@@ -1179,8 +1177,7 @@ iscsi_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb, ...@@ -1179,8 +1177,7 @@ iscsi_tcp_data_recv(read_descriptor_t *rd_desc, struct sk_buff *skb,
} }
conn->in.copy -= conn->in.padding; conn->in.copy -= conn->in.padding;
conn->in.offset += conn->in.padding; conn->in.offset += conn->in.padding;
if (conn->datadgst_en && if (conn->datadgst_en) {
conn->in.opcode != ISCSI_OP_LOGIN_RSP) {
if (conn->in.padding) { if (conn->in.padding) {
debug_tcp("padding -> %d\n", conn->in.padding); debug_tcp("padding -> %d\n", conn->in.padding);
memset(pad, 0, conn->in.padding); memset(pad, 0, conn->in.padding);
...@@ -2875,8 +2872,11 @@ iscsi_conn_stop(iscsi_connh_t connh, int flag) ...@@ -2875,8 +2872,11 @@ iscsi_conn_stop(iscsi_connh_t connh, int flag)
* in hdr_extract() and will be re-negotiated at * in hdr_extract() and will be re-negotiated at
* set_param() time. * set_param() time.
*/ */
if (flag == STOP_CONN_RECOVER) if (flag == STOP_CONN_RECOVER) {
conn->hdr_size = sizeof(struct iscsi_hdr); conn->hdr_size = sizeof(struct iscsi_hdr);
conn->hdrdgst_en = 0;
conn->datadgst_en = 0;
}
} }
up(&conn->xmitsema); up(&conn->xmitsema);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment