diff options
author | Jörg Mayer <jmayer@loplof.de> | 2006-07-11 16:18:36 +0000 |
---|---|---|
committer | Jörg Mayer <jmayer@loplof.de> | 2006-07-11 16:18:36 +0000 |
commit | 37f75a64d18cf85f212b99e9763f07f2a84de096 (patch) | |
tree | aaf6e6420fda3f430f0d23061106001e9ee7c13c /epan/dissectors/packet-eapol.c | |
parent | a003f7cd8f25adcce69f357ed588fd0e5fa38c55 (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.c | 13 |
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; |