From Patrick vd Lageweg:
authorjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 26 Jan 2007 17:06:17 +0000 (17:06 +0000)
committerjake <jake@f5534014-38df-0310-8fa8-9805f1628bb7>
Fri, 26 Jan 2007 17:06:17 +0000 (17:06 +0000)
This patch fixes three problems with the SCSI persistent reserve in command:
- The Additional length starts at offset 4 and not 0
- The len field contains the length used by the keys and doesn't include the header length.
  So don't substract the header length from the length.
- The key list is traversed from the beginning to end end and not the other way around.

git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@20568 f5534014-38df-0310-8fa8-9805f1628bb7

epan/dissectors/packet-scsi.c

index 99c7ea4726e9ef1dfbf544537ab6c57d593df0a5..efe16a8134fb24110c352f41978aca8e0b7e257d 100644 (file)
@@ -3050,20 +3050,20 @@ dissect_spc3_persistentreservein (tvbuff_t *tvb, packet_info *pinfo _U_, proto_t
         proto_tree_add_text (tree, tvb, offset, 4, "Generation Number: 0x%08x",
                              tvb_get_ntohl (tvb, offset));
         len = tvb_get_ntohl (tvb, offset+4);
-        proto_tree_add_text (tree, tvb, offset, 4, "Additional Length: %u",
+        proto_tree_add_text (tree, tvb, offset+4, 4, "Additional Length: %u",
                              len);
         len = (payload_len > len) ? len : payload_len;
 
         if ((flags & 0x1F) == SCSI_SPC2_RESVIN_SVCA_RDKEYS) {
            /* XXX - what if len is < 8?  That may be illegal, but
               that doesn't make it impossible.... */
-            numrec = (len - 8)/8;
+            numrec = len / 8;
             offset += 8;
 
             for (i = 0; i < numrec; i++) {
                 proto_tree_add_item (tree, hf_scsi_persresv_key, tvb, offset,
                                      8, 0);
-                offset -= 8;
+                offset += 8;
             }
         }
         else if ((flags & 0x1F) == SCSI_SPC2_RESVIN_SVCA_RDRESV) {