diff options
author | Mike Christie <michaelc@cs.wisc.edu> | 2005-11-30 03:27:19 -0500 |
---|---|---|
committer | James Bottomley <jejb@mulgrave.(none)> | 2005-12-13 20:12:03 -0500 |
commit | 8a47cd340b4a299087f926ff2780d1eb08513f04 (patch) | |
tree | fab368465f0e187c0f3708385a4618eb115c76e0 | |
parent | 4d841d6bd94d55642f8dbb11d6b672b3b50ff82e (diff) |
[SCSI] iscsi: check header digests for mgmt tasks
From Wang Zhenyu:
check header digest for cmd and mgmt tasks
Signed-off-by: Wang Zhenyu <zhenyu.z.wang@intel.com>
Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: Alex Aizman <itn780@yahoo.com>
Signed-off-by: Dmitry Yusupov <dmitry_yus@yahoo.com>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
-rw-r--r-- | drivers/scsi/iscsi_tcp.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/drivers/scsi/iscsi_tcp.c b/drivers/scsi/iscsi_tcp.c index feb8731907c7..2d12355eed33 100644 --- a/drivers/scsi/iscsi_tcp.c +++ b/drivers/scsi/iscsi_tcp.c | |||
@@ -581,6 +581,12 @@ iscsi_hdr_recv(struct iscsi_conn *conn) | |||
581 | crypto_digest_digest(conn->rx_tfm, &sg, 1, (u8 *)&cdgst); | 581 | crypto_digest_digest(conn->rx_tfm, &sg, 1, (u8 *)&cdgst); |
582 | rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) + | 582 | rdgst = *(uint32_t*)((char*)hdr + sizeof(struct iscsi_hdr) + |
583 | conn->in.ahslen); | 583 | conn->in.ahslen); |
584 | if (cdgst != rdgst) { | ||
585 | printk(KERN_ERR "iscsi_tcp: itt %x: hdrdgst error " | ||
586 | "recv 0x%x calc 0x%x\n", conn->in.itt, rdgst, | ||
587 | cdgst); | ||
588 | return ISCSI_ERR_HDR_DGST; | ||
589 | } | ||
584 | } | 590 | } |
585 | 591 | ||
586 | /* save opcode for later */ | 592 | /* save opcode for later */ |
@@ -610,13 +616,6 @@ iscsi_hdr_recv(struct iscsi_conn *conn) | |||
610 | conn->in.ahslen, conn->in.datalen); | 616 | conn->in.ahslen, conn->in.datalen); |
611 | 617 | ||
612 | if (conn->in.itt < session->cmds_max) { | 618 | if (conn->in.itt < session->cmds_max) { |
613 | if (conn->hdrdgst_en && cdgst != rdgst) { | ||
614 | printk(KERN_ERR "iscsi_tcp: itt %x: hdrdgst error " | ||
615 | "recv 0x%x calc 0x%x\n", conn->in.itt, rdgst, | ||
616 | cdgst); | ||
617 | return ISCSI_ERR_HDR_DGST; | ||
618 | } | ||
619 | |||
620 | ctask = (struct iscsi_cmd_task *)session->cmds[conn->in.itt]; | 619 | ctask = (struct iscsi_cmd_task *)session->cmds[conn->in.itt]; |
621 | 620 | ||
622 | if (!ctask->sc) { | 621 | if (!ctask->sc) { |
@@ -1128,8 +1127,7 @@ more: | |||
1128 | */ | 1127 | */ |
1129 | rc = iscsi_hdr_recv(conn); | 1128 | rc = iscsi_hdr_recv(conn); |
1130 | if (!rc && conn->in.datalen) { | 1129 | if (!rc && conn->in.datalen) { |
1131 | if (conn->datadgst_en && | 1130 | if (conn->datadgst_en) { |
1132 | conn->in.opcode != ISCSI_OP_LOGIN_RSP) { | ||
1133 | BUG_ON(!conn->data_rx_tfm); | 1131 | BUG_ON(!conn->data_rx_tfm); |
1134 | crypto_digest_init(conn->data_rx_tfm); | 1132 | crypto_digest_init(conn->data_rx_tfm); |
1135 | } | 1133 | } |
@@ -1179,8 +1177,7 @@ more: | |||
1179 | } | 1177 | } |
1180 | conn->in.copy -= conn->in.padding; | 1178 | conn->in.copy -= conn->in.padding; |
1181 | conn->in.offset += conn->in.padding; | 1179 | conn->in.offset += conn->in.padding; |
1182 | if (conn->datadgst_en && | 1180 | if (conn->datadgst_en) { |
1183 | conn->in.opcode != ISCSI_OP_LOGIN_RSP) { | ||
1184 | if (conn->in.padding) { | 1181 | if (conn->in.padding) { |
1185 | debug_tcp("padding -> %d\n", conn->in.padding); | 1182 | debug_tcp("padding -> %d\n", conn->in.padding); |
1186 | memset(pad, 0, conn->in.padding); | 1183 | memset(pad, 0, conn->in.padding); |
@@ -2875,8 +2872,11 @@ iscsi_conn_stop(iscsi_connh_t connh, int flag) | |||
2875 | * in hdr_extract() and will be re-negotiated at | 2872 | * in hdr_extract() and will be re-negotiated at |
2876 | * set_param() time. | 2873 | * set_param() time. |
2877 | */ | 2874 | */ |
2878 | if (flag == STOP_CONN_RECOVER) | 2875 | if (flag == STOP_CONN_RECOVER) { |
2879 | conn->hdr_size = sizeof(struct iscsi_hdr); | 2876 | conn->hdr_size = sizeof(struct iscsi_hdr); |
2877 | conn->hdrdgst_en = 0; | ||
2878 | conn->datadgst_en = 0; | ||
2879 | } | ||
2880 | } | 2880 | } |
2881 | up(&conn->xmitsema); | 2881 | up(&conn->xmitsema); |
2882 | } | 2882 | } |