Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

iscsit: proper endianess conversions

Make sure all on the wire types are use as big endian and big endian only so
that sparse can verify all the conversions are done right.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>

authored by

Christoph Hellwig and committed by
Nicholas Bellinger
50e5c87d 66c7db68

+122 -138
+55 -66
drivers/target/iscsi/iscsi_target.c
··· 785 785 786 786 hdr = (struct iscsi_scsi_req *) buf; 787 787 payload_length = ntoh24(hdr->dlength); 788 - hdr->data_length = be32_to_cpu(hdr->data_length); 789 - hdr->cmdsn = be32_to_cpu(hdr->cmdsn); 790 - hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); 791 788 792 789 /* FIXME; Add checks for AdditionalHeaderSegment */ 793 790 ··· 848 851 buf, conn); 849 852 } 850 853 851 - if ((hdr->data_length == payload_length) && 854 + if ((be32_to_cpu(hdr->data_length )== payload_length) && 852 855 (!(hdr->flags & ISCSI_FLAG_CMD_FINAL))) { 853 856 pr_err("Expected Data Transfer Length and Length of" 854 857 " Immediate Data are the same, but ISCSI_FLAG_CMD_FINAL" ··· 857 860 buf, conn); 858 861 } 859 862 860 - if (payload_length > hdr->data_length) { 863 + if (payload_length > be32_to_cpu(hdr->data_length)) { 861 864 pr_err("DataSegmentLength: %u is greater than" 862 865 " EDTL: %u, protocol error.\n", payload_length, 863 866 hdr->data_length); ··· 928 931 spin_unlock_bh(&conn->sess->ttt_lock); 929 932 } else if (hdr->flags & ISCSI_FLAG_CMD_WRITE) 930 933 cmd->targ_xfer_tag = 0xFFFFFFFF; 931 - cmd->cmd_sn = hdr->cmdsn; 932 - cmd->exp_stat_sn = hdr->exp_statsn; 934 + cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); 935 + cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); 933 936 cmd->first_burst_len = payload_length; 934 937 935 938 if (cmd->data_direction == DMA_FROM_DEVICE) { ··· 948 951 * Initialize struct se_cmd descriptor from target_core_mod infrastructure 949 952 */ 950 953 transport_init_se_cmd(&cmd->se_cmd, &lio_target_fabric_configfs->tf_ops, 951 - conn->sess->se_sess, hdr->data_length, cmd->data_direction, 952 - sam_task_attr, cmd->sense_buffer + 2); 954 + conn->sess->se_sess, be32_to_cpu(hdr->data_length), 955 + cmd->data_direction, sam_task_attr, 956 + cmd->sense_buffer + 2); 953 957 954 958 pr_debug("Got SCSI Command, ITT: 0x%08x, CmdSN: 0x%08x," 955 959 " ExpXferLen: %u, Length: %u, CID: %hu\n", hdr->itt, ··· 1025 1027 1, 0, buf, cmd); 1026 1028 } 1027 1029 1028 - iscsit_ack_from_expstatsn(conn, hdr->exp_statsn); 1030 + iscsit_ack_from_expstatsn(conn, be32_to_cpu(hdr->exp_statsn)); 1029 1031 1030 1032 /* 1031 1033 * If no Immediate Data is attached, it's OK to return now. ··· 1191 1193 1192 1194 hdr = (struct iscsi_data *) buf; 1193 1195 payload_length = ntoh24(hdr->dlength); 1194 - hdr->ttt = be32_to_cpu(hdr->ttt); 1195 - hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); 1196 - hdr->datasn = be32_to_cpu(hdr->datasn); 1197 - hdr->offset = be32_to_cpu(hdr->offset); 1198 1196 1199 1197 if (!payload_length) { 1200 1198 pr_err("DataOUT payload is ZERO, protocol error.\n"); ··· 1242 1248 se_cmd = &cmd->se_cmd; 1243 1249 iscsit_mod_dataout_timer(cmd); 1244 1250 1245 - if ((hdr->offset + payload_length) > cmd->se_cmd.data_length) { 1251 + if ((be32_to_cpu(hdr->offset) + payload_length) > cmd->se_cmd.data_length) { 1246 1252 pr_err("DataOut Offset: %u, Length %u greater than" 1247 1253 " iSCSI Command EDTL %u, protocol error.\n", 1248 1254 hdr->offset, payload_length, cmd->se_cmd.data_length); ··· 1325 1331 rx_size += payload_length; 1326 1332 iov = &cmd->iov_data[0]; 1327 1333 1328 - iov_ret = iscsit_map_iovec(cmd, iov, hdr->offset, payload_length); 1334 + iov_ret = iscsit_map_iovec(cmd, iov, be32_to_cpu(hdr->offset), 1335 + payload_length); 1329 1336 if (iov_ret < 0) 1330 1337 return -1; 1331 1338 ··· 1357 1362 u32 data_crc; 1358 1363 1359 1364 data_crc = iscsit_do_crypto_hash_sg(&conn->conn_rx_hash, cmd, 1360 - hdr->offset, payload_length, padding, 1365 + be32_to_cpu(hdr->offset), 1366 + payload_length, padding, 1361 1367 cmd->pad_bytes); 1362 1368 1363 1369 if (checksum != data_crc) { ··· 1419 1423 1420 1424 hdr = (struct iscsi_nopout *) buf; 1421 1425 payload_length = ntoh24(hdr->dlength); 1422 - hdr->ttt = be32_to_cpu(hdr->ttt); 1423 - hdr->cmdsn = be32_to_cpu(hdr->cmdsn); 1424 - hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); 1425 1426 1426 1427 if (hdr->itt == RESERVED_ITT && !(hdr->opcode & ISCSI_OP_IMMEDIATE)) { 1427 1428 pr_err("NOPOUT ITT is reserved, but Immediate Bit is" ··· 1448 1455 * Either way, make sure we allocate an struct iscsi_cmd, as both 1449 1456 * can contain ping data. 1450 1457 */ 1451 - if (hdr->ttt == 0xFFFFFFFF) { 1458 + if (hdr->ttt == cpu_to_be32(0xFFFFFFFF)) { 1452 1459 cmd = iscsit_allocate_cmd(conn, GFP_KERNEL); 1453 1460 if (!cmd) 1454 1461 return iscsit_add_reject( ··· 1461 1468 1 : 0); 1462 1469 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; 1463 1470 cmd->targ_xfer_tag = 0xFFFFFFFF; 1464 - cmd->cmd_sn = hdr->cmdsn; 1465 - cmd->exp_stat_sn = hdr->exp_statsn; 1471 + cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); 1472 + cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); 1466 1473 cmd->data_direction = DMA_NONE; 1467 1474 } 1468 1475 1469 - if (payload_length && (hdr->ttt == 0xFFFFFFFF)) { 1476 + if (payload_length && hdr->ttt == cpu_to_be32(0xFFFFFFFF)) { 1470 1477 rx_size = payload_length; 1471 1478 ping_data = kzalloc(payload_length + 1, GFP_KERNEL); 1472 1479 if (!ping_data) { ··· 1559 1566 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); 1560 1567 spin_unlock_bh(&conn->cmd_lock); 1561 1568 1562 - iscsit_ack_from_expstatsn(conn, hdr->exp_statsn); 1569 + iscsit_ack_from_expstatsn(conn, be32_to_cpu(hdr->exp_statsn)); 1563 1570 1564 1571 if (hdr->opcode & ISCSI_OP_IMMEDIATE) { 1565 1572 iscsit_add_cmd_to_response_queue(cmd, conn, ··· 1580 1587 return 0; 1581 1588 } 1582 1589 1583 - if (hdr->ttt != 0xFFFFFFFF) { 1590 + if (hdr->ttt != cpu_to_be32(0xFFFFFFFF)) { 1584 1591 /* 1585 1592 * This was a response to a unsolicited NOPIN ping. 1586 1593 */ 1587 - cmd = iscsit_find_cmd_from_ttt(conn, hdr->ttt); 1594 + cmd = iscsit_find_cmd_from_ttt(conn, be32_to_cpu(hdr->ttt)); 1588 1595 if (!cmd) 1589 1596 return -1; 1590 1597 ··· 1629 1636 u8 function; 1630 1637 1631 1638 hdr = (struct iscsi_tm *) buf; 1632 - hdr->cmdsn = be32_to_cpu(hdr->cmdsn); 1633 - hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); 1634 - hdr->refcmdsn = be32_to_cpu(hdr->refcmdsn); 1635 - hdr->exp_datasn = be32_to_cpu(hdr->exp_datasn); 1636 1639 hdr->flags &= ~ISCSI_FLAG_CMD_FINAL; 1637 1640 function = hdr->flags; 1638 1641 ··· 1653 1664 buf, conn); 1654 1665 } 1655 1666 if ((function != ISCSI_TM_FUNC_ABORT_TASK) && 1656 - (hdr->refcmdsn != ISCSI_RESERVED_TAG)) 1657 - hdr->refcmdsn = ISCSI_RESERVED_TAG; 1667 + be32_to_cpu(hdr->refcmdsn) != ISCSI_RESERVED_TAG) 1668 + hdr->refcmdsn = cpu_to_be32(ISCSI_RESERVED_TAG); 1658 1669 1659 1670 cmd = iscsit_allocate_cmd(conn, GFP_KERNEL); 1660 1671 if (!cmd) ··· 1731 1742 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); 1732 1743 cmd->init_task_tag = hdr->itt; 1733 1744 cmd->targ_xfer_tag = 0xFFFFFFFF; 1734 - cmd->cmd_sn = hdr->cmdsn; 1735 - cmd->exp_stat_sn = hdr->exp_statsn; 1745 + cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); 1746 + cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); 1736 1747 se_tmr = cmd->se_cmd.se_tmr_req; 1737 1748 tmr_req = cmd->tmr_req; 1738 1749 /* ··· 1816 1827 ISCSI_REASON_PROTOCOL_ERROR, 1817 1828 1, 0, buf, cmd); 1818 1829 } 1819 - iscsit_ack_from_expstatsn(conn, hdr->exp_statsn); 1830 + iscsit_ack_from_expstatsn(conn, be32_to_cpu(hdr->exp_statsn)); 1820 1831 1821 1832 if (out_of_order_cmdsn || !(hdr->opcode & ISCSI_OP_IMMEDIATE)) 1822 1833 return 0; ··· 1853 1864 1854 1865 hdr = (struct iscsi_text *) buf; 1855 1866 payload_length = ntoh24(hdr->dlength); 1856 - hdr->ttt = be32_to_cpu(hdr->ttt); 1857 - hdr->cmdsn = be32_to_cpu(hdr->cmdsn); 1858 - hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); 1859 1867 1860 1868 if (payload_length > conn->conn_ops->MaxXmitDataSegmentLength) { 1861 1869 pr_err("Unable to accept text parameter length: %u" ··· 1969 1983 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); 1970 1984 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; 1971 1985 cmd->targ_xfer_tag = 0xFFFFFFFF; 1972 - cmd->cmd_sn = hdr->cmdsn; 1973 - cmd->exp_stat_sn = hdr->exp_statsn; 1986 + cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); 1987 + cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); 1974 1988 cmd->data_direction = DMA_NONE; 1975 1989 1976 1990 spin_lock_bh(&conn->cmd_lock); 1977 1991 list_add_tail(&cmd->i_conn_node, &conn->conn_cmd_list); 1978 1992 spin_unlock_bh(&conn->cmd_lock); 1979 1993 1980 - iscsit_ack_from_expstatsn(conn, hdr->exp_statsn); 1994 + iscsit_ack_from_expstatsn(conn, be32_to_cpu(hdr->exp_statsn)); 1981 1995 1982 1996 if (!(hdr->opcode & ISCSI_OP_IMMEDIATE)) { 1983 1997 cmdsn_ret = iscsit_sequence_cmd(conn, cmd, hdr->cmdsn); ··· 2111 2125 2112 2126 hdr = (struct iscsi_logout *) buf; 2113 2127 reason_code = (hdr->flags & 0x7f); 2114 - hdr->cid = be16_to_cpu(hdr->cid); 2115 - hdr->cmdsn = be32_to_cpu(hdr->cmdsn); 2116 - hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); 2117 2128 2118 2129 if (tiqn) { 2119 2130 spin_lock(&tiqn->logout_stats.lock); ··· 2142 2159 cmd->immediate_cmd = ((hdr->opcode & ISCSI_OP_IMMEDIATE) ? 1 : 0); 2143 2160 conn->sess->init_task_tag = cmd->init_task_tag = hdr->itt; 2144 2161 cmd->targ_xfer_tag = 0xFFFFFFFF; 2145 - cmd->cmd_sn = hdr->cmdsn; 2146 - cmd->exp_stat_sn = hdr->exp_statsn; 2147 - cmd->logout_cid = hdr->cid; 2162 + cmd->cmd_sn = be32_to_cpu(hdr->cmdsn); 2163 + cmd->exp_stat_sn = be32_to_cpu(hdr->exp_statsn); 2164 + cmd->logout_cid = be16_to_cpu(hdr->cid); 2148 2165 cmd->logout_reason = reason_code; 2149 2166 cmd->data_direction = DMA_NONE; 2150 2167 ··· 2154 2171 */ 2155 2172 if ((reason_code == ISCSI_LOGOUT_REASON_CLOSE_SESSION) || 2156 2173 ((reason_code == ISCSI_LOGOUT_REASON_CLOSE_CONNECTION) && 2157 - (hdr->cid == conn->cid))) 2174 + be16_to_cpu(hdr->cid) == conn->cid)) 2158 2175 logout_remove = 1; 2159 2176 2160 2177 spin_lock_bh(&conn->cmd_lock); ··· 2162 2179 spin_unlock_bh(&conn->cmd_lock); 2163 2180 2164 2181 if (reason_code != ISCSI_LOGOUT_REASON_RECOVERY) 2165 - iscsit_ack_from_expstatsn(conn, hdr->exp_statsn); 2182 + iscsit_ack_from_expstatsn(conn, be32_to_cpu(hdr->exp_statsn)); 2166 2183 2167 2184 /* 2168 2185 * Immediate commands are executed, well, immediately. ··· 2195 2212 2196 2213 hdr = (struct iscsi_snack *) buf; 2197 2214 hdr->flags &= ~ISCSI_FLAG_CMD_FINAL; 2198 - hdr->ttt = be32_to_cpu(hdr->ttt); 2199 - hdr->exp_statsn = be32_to_cpu(hdr->exp_statsn); 2200 - hdr->begrun = be32_to_cpu(hdr->begrun); 2201 - hdr->runlength = be32_to_cpu(hdr->runlength); 2202 2215 2203 2216 pr_debug("Got ISCSI_INIT_SNACK, ITT: 0x%08x, ExpStatSN:" 2204 2217 " 0x%08x, Type: 0x%02x, BegRun: 0x%08x, RunLength: 0x%08x," ··· 2214 2235 switch (hdr->flags & ISCSI_FLAG_SNACK_TYPE_MASK) { 2215 2236 case 0: 2216 2237 return iscsit_handle_recovery_datain_or_r2t(conn, buf, 2217 - hdr->itt, hdr->ttt, hdr->begrun, hdr->runlength); 2238 + hdr->itt, 2239 + be32_to_cpu(hdr->ttt), 2240 + be32_to_cpu(hdr->begrun), 2241 + be32_to_cpu(hdr->runlength)); 2218 2242 case ISCSI_FLAG_SNACK_TYPE_STATUS: 2219 - return iscsit_handle_status_snack(conn, hdr->itt, hdr->ttt, 2220 - hdr->begrun, hdr->runlength); 2243 + return iscsit_handle_status_snack(conn, hdr->itt, 2244 + be32_to_cpu(hdr->ttt), 2245 + be32_to_cpu(hdr->begrun), be32_to_cpu(hdr->runlength)); 2221 2246 case ISCSI_FLAG_SNACK_TYPE_DATA_ACK: 2222 - return iscsit_handle_data_ack(conn, hdr->ttt, hdr->begrun, 2223 - hdr->runlength); 2247 + return iscsit_handle_data_ack(conn, be32_to_cpu(hdr->ttt), 2248 + be32_to_cpu(hdr->begrun), 2249 + be32_to_cpu(hdr->runlength)); 2224 2250 case ISCSI_FLAG_SNACK_TYPE_RDATA: 2225 2251 /* FIXME: Support R-Data SNACK */ 2226 2252 pr_err("R-Data SNACK Not Supported.\n"); ··· 2513 2529 put_unaligned_le64(0xFFFFFFFFFFFFFFFFULL, &hdr->lun); 2514 2530 2515 2531 hdr->itt = cmd->init_task_tag; 2516 - hdr->ttt = (hdr->flags & ISCSI_FLAG_DATA_ACK) ? 2517 - cpu_to_be32(cmd->targ_xfer_tag) : 2518 - 0xFFFFFFFF; 2519 - hdr->statsn = (set_statsn) ? cpu_to_be32(cmd->stat_sn) : 2520 - 0xFFFFFFFF; 2532 + 2533 + if (hdr->flags & ISCSI_FLAG_DATA_ACK) 2534 + hdr->ttt = cpu_to_be32(cmd->targ_xfer_tag); 2535 + else 2536 + hdr->ttt = cpu_to_be32(0xFFFFFFFF); 2537 + if (set_statsn) 2538 + hdr->statsn = cpu_to_be32(cmd->stat_sn); 2539 + else 2540 + hdr->statsn = cpu_to_be32(0xFFFFFFFF); 2541 + 2521 2542 hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn); 2522 2543 hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn); 2523 2544 hdr->datasn = cpu_to_be32(datain.data_sn); ··· 3077 3088 cmd->se_cmd.scsi_sense_length += sizeof (__be16); 3078 3089 3079 3090 padding = -(cmd->se_cmd.scsi_sense_length) & 3; 3080 - hton24(hdr->dlength, cmd->se_cmd.scsi_sense_length); 3091 + hton24(hdr->dlength, (u32)cmd->se_cmd.scsi_sense_length); 3081 3092 iov[iov_count].iov_base = cmd->sense_buffer; 3082 3093 iov[iov_count++].iov_len = 3083 3094 (cmd->se_cmd.scsi_sense_length + padding); ··· 3407 3418 hdr->opcode = ISCSI_OP_REJECT; 3408 3419 hdr->flags |= ISCSI_FLAG_CMD_FINAL; 3409 3420 hton24(hdr->dlength, ISCSI_HDR_LEN); 3410 - hdr->ffffffff = 0xffffffff; 3421 + hdr->ffffffff = cpu_to_be32(0xffffffff); 3411 3422 cmd->stat_sn = conn->stat_sn++; 3412 3423 hdr->statsn = cpu_to_be32(cmd->stat_sn); 3413 3424 hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
-1
drivers/target/iscsi/iscsi_target_core.h
··· 479 479 480 480 struct iscsi_tmr_req { 481 481 bool task_reassign:1; 482 - u32 ref_cmd_sn; 483 482 u32 exp_data_sn; 484 483 struct iscsi_cmd *ref_cmd; 485 484 struct iscsi_conn_recovery *conn_recovery;
+44 -36
drivers/target/iscsi/iscsi_target_erl0.c
··· 95 95 */ 96 96 if (conn->sess->sess_ops->DataSequenceInOrder) { 97 97 if ((cmd->cmd_flags & ICF_WITHIN_COMMAND_RECOVERY) && 98 - (cmd->write_data_done != hdr->offset)) 98 + cmd->write_data_done != be32_to_cpu(hdr->offset)) 99 99 goto dump; 100 100 101 101 cmd->cmd_flags &= ~ICF_WITHIN_COMMAND_RECOVERY; 102 102 } else { 103 103 struct iscsi_seq *seq; 104 104 105 - seq = iscsit_get_seq_holder(cmd, hdr->offset, payload_length); 105 + seq = iscsit_get_seq_holder(cmd, be32_to_cpu(hdr->offset), 106 + payload_length); 106 107 if (!seq) 107 108 return DATAOUT_CANNOT_RECOVER; 108 109 /* ··· 112 111 cmd->seq_ptr = seq; 113 112 114 113 if (conn->sess->sess_ops->DataPDUInOrder) { 115 - if ((seq->status == 116 - DATAOUT_SEQUENCE_WITHIN_COMMAND_RECOVERY) && 117 - ((seq->offset != hdr->offset) || 118 - (seq->data_sn != hdr->datasn))) 114 + if (seq->status == 115 + DATAOUT_SEQUENCE_WITHIN_COMMAND_RECOVERY && 116 + (seq->offset != be32_to_cpu(hdr->offset) || 117 + seq->data_sn != be32_to_cpu(hdr->datasn))) 119 118 goto dump; 120 119 } else { 121 - if ((seq->status == 122 - DATAOUT_SEQUENCE_WITHIN_COMMAND_RECOVERY) && 123 - (seq->data_sn != hdr->datasn)) 120 + if (seq->status == 121 + DATAOUT_SEQUENCE_WITHIN_COMMAND_RECOVERY && 122 + seq->data_sn != be32_to_cpu(hdr->datasn)) 124 123 goto dump; 125 124 } 126 125 ··· 149 148 u32 payload_length = ntoh24(hdr->dlength); 150 149 151 150 152 - if ((hdr->offset < cmd->seq_start_offset) || 153 - ((hdr->offset + payload_length) > cmd->seq_end_offset)) { 151 + if ((be32_to_cpu(hdr->offset) < cmd->seq_start_offset) || 152 + ((be32_to_cpu(hdr->offset) + payload_length) > cmd->seq_end_offset)) { 154 153 pr_err("Command ITT: 0x%08x with Offset: %u," 155 154 " Length: %u outside of Unsolicited Sequence %u:%u while" 156 155 " DataSequenceInOrder=Yes.\n", cmd->init_task_tag, 157 - hdr->offset, payload_length, cmd->seq_start_offset, 156 + be32_to_cpu(hdr->offset), payload_length, cmd->seq_start_offset, 158 157 cmd->seq_end_offset); 159 158 return DATAOUT_CANNOT_RECOVER; 160 159 } ··· 237 236 * fullfilling an Recovery R2T, it's best to just dump the 238 237 * payload here, instead of erroring out. 239 238 */ 240 - if ((hdr->offset < cmd->seq_start_offset) || 241 - ((hdr->offset + payload_length) > cmd->seq_end_offset)) { 239 + if ((be32_to_cpu(hdr->offset) < cmd->seq_start_offset) || 240 + ((be32_to_cpu(hdr->offset) + payload_length) > cmd->seq_end_offset)) { 242 241 pr_err("Command ITT: 0x%08x with Offset: %u," 243 242 " Length: %u outside of Sequence %u:%u while" 244 243 " DataSequenceInOrder=Yes.\n", cmd->init_task_tag, 245 - hdr->offset, payload_length, cmd->seq_start_offset, 244 + be32_to_cpu(hdr->offset), payload_length, cmd->seq_start_offset, 246 245 cmd->seq_end_offset); 247 246 248 247 if (iscsit_dump_data_payload(conn, payload_length, 1) < 0) ··· 252 251 253 252 next_burst_len = (cmd->next_burst_len + payload_length); 254 253 } else { 255 - seq = iscsit_get_seq_holder(cmd, hdr->offset, payload_length); 254 + seq = iscsit_get_seq_holder(cmd, be32_to_cpu(hdr->offset), 255 + payload_length); 256 256 if (!seq) 257 257 return DATAOUT_CANNOT_RECOVER; 258 258 /* ··· 368 366 data_sn = seq->data_sn; 369 367 } 370 368 371 - if (hdr->datasn > data_sn) { 369 + if (be32_to_cpu(hdr->datasn) > data_sn) { 372 370 pr_err("Command ITT: 0x%08x, received DataSN: 0x%08x" 373 371 " higher than expected 0x%08x.\n", cmd->init_task_tag, 374 - hdr->datasn, data_sn); 372 + be32_to_cpu(hdr->datasn), data_sn); 375 373 recovery = 1; 376 374 goto recover; 377 - } else if (hdr->datasn < data_sn) { 375 + } else if (be32_to_cpu(hdr->datasn) < data_sn) { 378 376 pr_err("Command ITT: 0x%08x, received DataSN: 0x%08x" 379 377 " lower than expected 0x%08x, discarding payload.\n", 380 - cmd->init_task_tag, hdr->datasn, data_sn); 378 + cmd->init_task_tag, be32_to_cpu(hdr->datasn), data_sn); 381 379 dump = 1; 382 380 goto dump; 383 381 } ··· 417 415 * error has occured and fail the connection. 418 416 */ 419 417 if (conn->sess->sess_ops->DataSequenceInOrder) { 420 - if (hdr->offset != cmd->write_data_done) { 418 + if (be32_to_cpu(hdr->offset) != cmd->write_data_done) { 421 419 pr_err("Command ITT: 0x%08x, received offset" 422 420 " %u different than expected %u.\n", cmd->init_task_tag, 423 - hdr->offset, cmd->write_data_done); 421 + be32_to_cpu(hdr->offset), cmd->write_data_done); 424 422 recovery = 1; 425 423 goto recover; 426 424 } 427 425 } else { 428 426 struct iscsi_seq *seq = cmd->seq_ptr; 429 427 430 - if (hdr->offset > seq->offset) { 428 + if (be32_to_cpu(hdr->offset) > seq->offset) { 431 429 pr_err("Command ITT: 0x%08x, received offset" 432 430 " %u greater than expected %u.\n", cmd->init_task_tag, 433 - hdr->offset, seq->offset); 431 + be32_to_cpu(hdr->offset), seq->offset); 434 432 recovery = 1; 435 433 goto recover; 436 - } else if (hdr->offset < seq->offset) { 434 + } else if (be32_to_cpu(hdr->offset) < seq->offset) { 437 435 pr_err("Command ITT: 0x%08x, received offset" 438 436 " %u less than expected %u, discarding payload.\n", 439 - cmd->init_task_tag, hdr->offset, seq->offset); 437 + cmd->init_task_tag, be32_to_cpu(hdr->offset), 438 + seq->offset); 440 439 dump = 1; 441 440 goto dump; 442 441 } ··· 456 453 return DATAOUT_CANNOT_RECOVER; 457 454 458 455 return (recovery) ? iscsit_recover_dataout_sequence(cmd, 459 - hdr->offset, payload_length) : 456 + be32_to_cpu(hdr->offset), payload_length) : 460 457 (dump) ? DATAOUT_WITHIN_COMMAND_RECOVERY : DATAOUT_NORMAL; 461 458 } 462 459 ··· 468 465 struct iscsi_data *hdr = (struct iscsi_data *) buf; 469 466 u32 payload_length = ntoh24(hdr->dlength); 470 467 471 - pdu = iscsit_get_pdu_holder(cmd, hdr->offset, payload_length); 468 + pdu = iscsit_get_pdu_holder(cmd, be32_to_cpu(hdr->offset), 469 + payload_length); 472 470 if (!pdu) 473 471 return DATAOUT_CANNOT_RECOVER; 474 472 ··· 483 479 case ISCSI_PDU_RECEIVED_OK: 484 480 pr_err("Command ITT: 0x%08x received already gotten" 485 481 " Offset: %u, Length: %u\n", cmd->init_task_tag, 486 - hdr->offset, payload_length); 482 + be32_to_cpu(hdr->offset), payload_length); 487 483 return iscsit_dump_data_payload(cmd->conn, payload_length, 1); 488 484 default: 489 485 return DATAOUT_CANNOT_RECOVER; ··· 557 553 if (cmd->unsolicited_data) { 558 554 if ((cmd->first_burst_len + payload_length) == 559 555 conn->sess->sess_ops->FirstBurstLength) { 560 - if (iscsit_dataout_update_r2t(cmd, hdr->offset, 556 + if (iscsit_dataout_update_r2t(cmd, be32_to_cpu(hdr->offset), 561 557 payload_length) < 0) 562 558 return DATAOUT_CANNOT_RECOVER; 563 559 send_r2t = 1; ··· 565 561 566 562 if (!conn->sess->sess_ops->DataPDUInOrder) { 567 563 ret = iscsit_dataout_update_datapduinorder_no(cmd, 568 - hdr->datasn, (hdr->flags & ISCSI_FLAG_CMD_FINAL)); 564 + be32_to_cpu(hdr->datasn), 565 + (hdr->flags & ISCSI_FLAG_CMD_FINAL)); 569 566 if (ret == DATAOUT_CANNOT_RECOVER) 570 567 return ret; 571 568 } ··· 591 586 if (conn->sess->sess_ops->DataSequenceInOrder) { 592 587 if ((cmd->next_burst_len + payload_length) == 593 588 conn->sess->sess_ops->MaxBurstLength) { 594 - if (iscsit_dataout_update_r2t(cmd, hdr->offset, 589 + if (iscsit_dataout_update_r2t(cmd, 590 + be32_to_cpu(hdr->offset), 595 591 payload_length) < 0) 596 592 return DATAOUT_CANNOT_RECOVER; 597 593 send_r2t = 1; ··· 600 594 601 595 if (!conn->sess->sess_ops->DataPDUInOrder) { 602 596 ret = iscsit_dataout_update_datapduinorder_no( 603 - cmd, hdr->datasn, 597 + cmd, be32_to_cpu(hdr->datasn), 604 598 (hdr->flags & ISCSI_FLAG_CMD_FINAL)); 605 599 if (ret == DATAOUT_CANNOT_RECOVER) 606 600 return ret; ··· 616 610 617 611 if ((seq->next_burst_len + payload_length) == 618 612 seq->xfer_len) { 619 - if (iscsit_dataout_update_r2t(cmd, hdr->offset, 613 + if (iscsit_dataout_update_r2t(cmd, 614 + be32_to_cpu(hdr->offset), 620 615 payload_length) < 0) 621 616 return DATAOUT_CANNOT_RECOVER; 622 617 send_r2t = 1; ··· 625 618 626 619 if (!conn->sess->sess_ops->DataPDUInOrder) { 627 620 ret = iscsit_dataout_update_datapduinorder_no( 628 - cmd, hdr->datasn, 621 + cmd, be32_to_cpu(hdr->datasn), 629 622 (hdr->flags & ISCSI_FLAG_CMD_FINAL)); 630 623 if (ret == DATAOUT_CANNOT_RECOVER) 631 624 return ret; ··· 685 678 } 686 679 687 680 recover: 688 - return iscsit_recover_dataout_sequence(cmd, hdr->offset, payload_length); 681 + return iscsit_recover_dataout_sequence(cmd, be32_to_cpu(hdr->offset), 682 + payload_length); 689 683 } 690 684 691 685 /*
+2 -2
drivers/target/iscsi/iscsi_target_erl2.c
··· 36 36 */ 37 37 void iscsit_create_conn_recovery_datain_values( 38 38 struct iscsi_cmd *cmd, 39 - u32 exp_data_sn) 39 + __be32 exp_data_sn) 40 40 { 41 41 u32 data_sn = 0; 42 42 struct iscsi_conn *conn = cmd->conn; ··· 44 44 cmd->next_burst_len = 0; 45 45 cmd->read_data_done = 0; 46 46 47 - while (exp_data_sn > data_sn) { 47 + while (be32_to_cpu(exp_data_sn) > data_sn) { 48 48 if ((cmd->next_burst_len + 49 49 conn->conn_ops->MaxRecvDataSegmentLength) < 50 50 conn->sess->sess_ops->MaxBurstLength) {
+1 -1
drivers/target/iscsi/iscsi_target_erl2.h
··· 1 1 #ifndef ISCSI_TARGET_ERL2_H 2 2 #define ISCSI_TARGET_ERL2_H 3 3 4 - extern void iscsit_create_conn_recovery_datain_values(struct iscsi_cmd *, u32); 4 + extern void iscsit_create_conn_recovery_datain_values(struct iscsi_cmd *, __be32); 5 5 extern void iscsit_create_conn_recovery_dataout_values(struct iscsi_cmd *); 6 6 extern struct iscsi_conn_recovery *iscsit_get_inactive_connection_recovery_entry( 7 7 struct iscsi_session *, u16);
+5 -9
drivers/target/iscsi/iscsi_target_login.c
··· 192 192 static void iscsi_login_set_conn_values( 193 193 struct iscsi_session *sess, 194 194 struct iscsi_conn *conn, 195 - u16 cid) 195 + __be16 cid) 196 196 { 197 197 conn->sess = sess; 198 - conn->cid = cid; 198 + conn->cid = be16_to_cpu(cid); 199 199 /* 200 200 * Generate a random Status sequence number (statsn) for the new 201 201 * iSCSI connection. ··· 230 230 iscsi_login_set_conn_values(sess, conn, pdu->cid); 231 231 sess->init_task_tag = pdu->itt; 232 232 memcpy(&sess->isid, pdu->isid, 6); 233 - sess->exp_cmd_sn = pdu->cmdsn; 233 + sess->exp_cmd_sn = be32_to_cpu(pdu->cmdsn); 234 234 INIT_LIST_HEAD(&sess->sess_conn_list); 235 235 INIT_LIST_HEAD(&sess->sess_ooo_cmdsn_list); 236 236 INIT_LIST_HEAD(&sess->cr_active_list); ··· 271 271 * The FFP CmdSN window values will be allocated from the TPG's 272 272 * Initiator Node's ACL once the login has been successfully completed. 273 273 */ 274 - sess->max_cmd_sn = pdu->cmdsn; 274 + sess->max_cmd_sn = be32_to_cpu(pdu->cmdsn); 275 275 276 276 sess->sess_ops = kzalloc(sizeof(struct iscsi_sess_ops), GFP_KERNEL); 277 277 if (!sess->sess_ops) { ··· 449 449 (sess_p->time2retain_timer_flags & ISCSI_TF_EXPIRED)) 450 450 continue; 451 451 if (!memcmp(sess_p->isid, pdu->isid, 6) && 452 - (sess_p->tsih == pdu->tsih)) { 452 + (sess_p->tsih == be16_to_cpu(pdu->tsih))) { 453 453 iscsit_inc_session_usage_count(sess_p); 454 454 iscsit_stop_time2retain_timer(sess_p); 455 455 sess = sess_p; ··· 951 951 } 952 952 953 953 pdu = (struct iscsi_login_req *) buffer; 954 - pdu->cid = be16_to_cpu(pdu->cid); 955 - pdu->tsih = be16_to_cpu(pdu->tsih); 956 - pdu->cmdsn = be32_to_cpu(pdu->cmdsn); 957 - pdu->exp_statsn = be32_to_cpu(pdu->exp_statsn); 958 954 959 955 /* 960 956 * Used by iscsit_tx_login_rsp() for Login Resonses PDUs
+6 -12
drivers/target/iscsi/iscsi_target_nego.c
··· 360 360 return -1; 361 361 362 362 login->rsp_length = 0; 363 - login_rsp->tsih = be16_to_cpu(login_rsp->tsih); 364 - login_rsp->statsn = be32_to_cpu(login_rsp->statsn); 365 363 mutex_lock(&sess->cmdsn_mutex); 366 - login_rsp->exp_cmdsn = be32_to_cpu(sess->exp_cmd_sn); 367 - login_rsp->max_cmdsn = be32_to_cpu(sess->max_cmd_sn); 364 + login_rsp->exp_cmdsn = cpu_to_be32(sess->exp_cmd_sn); 365 + login_rsp->max_cmdsn = cpu_to_be32(sess->max_cmd_sn); 368 366 mutex_unlock(&sess->cmdsn_mutex); 369 367 370 368 return 0; ··· 378 380 379 381 login_req = (struct iscsi_login_req *) login->req; 380 382 payload_length = ntoh24(login_req->dlength); 381 - login_req->tsih = be16_to_cpu(login_req->tsih); 382 - login_req->cid = be16_to_cpu(login_req->cid); 383 - login_req->cmdsn = be32_to_cpu(login_req->cmdsn); 384 - login_req->exp_statsn = be32_to_cpu(login_req->exp_statsn); 385 383 386 384 pr_debug("Got Login Command, Flags 0x%02x, ITT: 0x%08x," 387 385 " CmdSN: 0x%08x, ExpStatSN: 0x%08x, CID: %hu, Length: %u\n", ··· 754 760 login->version_min = login_req->min_version; 755 761 login->version_max = login_req->max_version; 756 762 memcpy(login->isid, login_req->isid, 6); 757 - login->cmd_sn = login_req->cmdsn; 763 + login->cmd_sn = be32_to_cpu(login_req->cmdsn); 758 764 login->init_task_tag = login_req->itt; 759 - login->initial_exp_statsn = login_req->exp_statsn; 760 - login->cid = login_req->cid; 761 - login->tsih = login_req->tsih; 765 + login->initial_exp_statsn = be32_to_cpu(login_req->exp_statsn); 766 + login->cid = be16_to_cpu(login_req->cid); 767 + login->tsih = be16_to_cpu(login_req->tsih); 762 768 763 769 if (iscsi_target_get_initial_payload(conn, login) < 0) 764 770 return -1;
+5 -7
drivers/target/iscsi/iscsi_target_tmr.c
··· 50 50 if (!ref_cmd) { 51 51 pr_err("Unable to locate RefTaskTag: 0x%08x on CID:" 52 52 " %hu.\n", hdr->rtt, conn->cid); 53 - return ((hdr->refcmdsn >= conn->sess->exp_cmd_sn) && 54 - (hdr->refcmdsn <= conn->sess->max_cmd_sn)) ? 53 + return (be32_to_cpu(hdr->refcmdsn) >= conn->sess->exp_cmd_sn && 54 + be32_to_cpu(hdr->refcmdsn) <= conn->sess->max_cmd_sn) ? 55 55 ISCSI_TMF_RSP_COMPLETE : ISCSI_TMF_RSP_NO_TASK; 56 56 } 57 - if (ref_cmd->cmd_sn != hdr->refcmdsn) { 57 + if (ref_cmd->cmd_sn != be32_to_cpu(hdr->refcmdsn)) { 58 58 pr_err("RefCmdSN 0x%08x does not equal" 59 59 " task's CmdSN 0x%08x. Rejecting ABORT_TASK.\n", 60 60 hdr->refcmdsn, ref_cmd->cmd_sn); ··· 63 63 64 64 se_tmr->ref_task_tag = (__force u32)hdr->rtt; 65 65 tmr_req->ref_cmd = ref_cmd; 66 - tmr_req->ref_cmd_sn = hdr->refcmdsn; 67 - tmr_req->exp_data_sn = hdr->exp_datasn; 66 + tmr_req->exp_data_sn = be32_to_cpu(hdr->exp_datasn); 68 67 69 68 return ISCSI_TMF_RSP_COMPLETE; 70 69 } ··· 172 173 173 174 se_tmr->ref_task_tag = (__force u32)hdr->rtt; 174 175 tmr_req->ref_cmd = ref_cmd; 175 - tmr_req->ref_cmd_sn = hdr->refcmdsn; 176 - tmr_req->exp_data_sn = hdr->exp_datasn; 176 + tmr_req->exp_data_sn = be32_to_cpu(hdr->exp_datasn); 177 177 tmr_req->conn_recovery = cr; 178 178 tmr_req->task_reassign = 1; 179 179 /*
+3 -3
drivers/target/iscsi/iscsi_target_util.c
··· 274 274 int iscsit_sequence_cmd( 275 275 struct iscsi_conn *conn, 276 276 struct iscsi_cmd *cmd, 277 - u32 cmdsn) 277 + __be32 cmdsn) 278 278 { 279 279 int ret; 280 280 int cmdsn_ret; 281 281 282 282 mutex_lock(&conn->sess->cmdsn_mutex); 283 283 284 - cmdsn_ret = iscsit_check_received_cmdsn(conn->sess, cmdsn); 284 + cmdsn_ret = iscsit_check_received_cmdsn(conn->sess, be32_to_cpu(cmdsn)); 285 285 switch (cmdsn_ret) { 286 286 case CMDSN_NORMAL_OPERATION: 287 287 ret = iscsit_execute_cmd(cmd, 0); ··· 289 289 iscsit_execute_ooo_cmdsns(conn->sess); 290 290 break; 291 291 case CMDSN_HIGHER_THAN_EXP: 292 - ret = iscsit_handle_ooo_cmdsn(conn->sess, cmd, cmdsn); 292 + ret = iscsit_handle_ooo_cmdsn(conn->sess, cmd, be32_to_cpu(cmdsn)); 293 293 break; 294 294 case CMDSN_LOWER_THAN_EXP: 295 295 cmd->i_state = ISTATE_REMOVE;
+1 -1
drivers/target/iscsi/iscsi_target_util.h
··· 12 12 extern struct iscsi_seq *iscsit_get_seq_holder_for_datain(struct iscsi_cmd *, u32); 13 13 extern struct iscsi_seq *iscsit_get_seq_holder_for_r2t(struct iscsi_cmd *); 14 14 extern struct iscsi_r2t *iscsit_get_holder_for_r2tsn(struct iscsi_cmd *, u32); 15 - int iscsit_sequence_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, u32 cmdsn); 15 + int iscsit_sequence_cmd(struct iscsi_conn *conn, struct iscsi_cmd *cmd, __be32 cmdsn); 16 16 extern int iscsit_check_unsolicited_dataout(struct iscsi_cmd *, unsigned char *); 17 17 extern struct iscsi_cmd *iscsit_find_cmd_from_itt(struct iscsi_conn *, itt_t); 18 18 extern struct iscsi_cmd *iscsit_find_cmd_from_itt_or_dump(struct iscsi_conn *,