aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-eapol.c
diff options
context:
space:
mode:
authorJörg Mayer <jmayer@loplof.de>2006-07-11 16:18:36 +0000
committerJörg Mayer <jmayer@loplof.de>2006-07-11 16:18:36 +0000
commit37f75a64d18cf85f212b99e9763f07f2a84de096 (patch)
treeaaf6e6420fda3f430f0d23061106001e9ee7c13c /epan/dissectors/packet-eapol.c
parenta003f7cd8f25adcce69f357ed588fd0e5fa38c55 (diff)
Bugfix: If we have an rc4 key and the length remaining for the
actual key is 0, then this isn't a malformed packet. The key locally generated by the peer itself should be used. svn path=/trunk/; revision=18713
Diffstat (limited to 'epan/dissectors/packet-eapol.c')
-rw-r--r--epan/dissectors/packet-eapol.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/epan/dissectors/packet-eapol.c b/epan/dissectors/packet-eapol.c
index 32a9db44be..f78f6fdcad 100644
--- a/epan/dissectors/packet-eapol.c
+++ b/epan/dissectors/packet-eapol.c
@@ -241,8 +241,7 @@ dissect_eapol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
eapol_data_len);
}
}
- }
- else {
+ } else {
eapol_key_len = tvb_get_ntohs(tvb, offset);
proto_tree_add_uint(eapol_tree, hf_eapol_keydes_keylen, tvb, offset, 2, eapol_key_len);
offset += 2;
@@ -266,9 +265,15 @@ dissect_eapol(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
proto_tree_add_item(eapol_tree, hf_eapol_keydes_key_signature, tvb,
offset, 16, FALSE);
offset += 16;
- if (eapol_key_len != 0)
- proto_tree_add_item(eapol_tree, hf_eapol_keydes_key, tvb, offset,
+ if (eapol_key_len != 0) {
+ if (eapol_len > 44) { /* Size of rc4 key with no key content */
+ proto_tree_add_item(eapol_tree, hf_eapol_keydes_key, tvb, offset,
eapol_key_len, FALSE);
+ } else {
+ /* IEEE 802.1X-2004 7.6.3.6: If no bytes remain, then */
+ proto_tree_add_text(eapol_tree, tvb, offset, 0, "Key: Use key locally generated by peer");
+ }
+ }
}
}
break;