iser-target: Ignore non TEXT + LOGOUT opcodes for discovery
authorNicholas Bellinger <nab@linux-iscsi.org>
Mon, 8 Jul 2013 00:45:08 +0000 (17:45 -0700)
committerNicholas Bellinger <nab@linux-iscsi.org>
Mon, 8 Jul 2013 01:37:02 +0000 (18:37 -0700)
This patch adds a check in isert_rx_opcode() to ignore non TEXT + LOGOUT
opcodes when SessionType=Discovery has been negotiated.

Cc: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
drivers/infiniband/ulp/isert/ib_isert.c

index f02bfcc282e5a8330241fa834ac50081327e05eb..ecd16541896b509dd0dc3f104bb9f4b1373ca805 100644 (file)
@@ -1066,11 +1066,19 @@ isert_rx_opcode(struct isert_conn *isert_conn, struct iser_rx_desc *rx_desc,
 {
        struct iscsi_hdr *hdr = &rx_desc->iscsi_header;
        struct iscsi_conn *conn = isert_conn->conn;
+       struct iscsi_session *sess = conn->sess;
        struct iscsi_cmd *cmd;
        struct isert_cmd *isert_cmd;
        int ret = -EINVAL;
        u8 opcode = (hdr->opcode & ISCSI_OPCODE_MASK);
 
+       if (sess->sess_ops->SessionType &&
+          (!(opcode & ISCSI_OP_TEXT) || !(opcode & ISCSI_OP_LOGOUT))) {
+               pr_err("Got illegal opcode: 0x%02x in SessionType=Discovery,"
+                      " ignoring\n", opcode);
+               return 0;
+       }
+
        switch (opcode) {
        case ISCSI_OP_SCSI_CMD:
                cmd = iscsit_allocate_cmd(conn, GFP_KERNEL);