diff options
author | Francois-Xavier Le Bail <fx.lebail@yahoo.com> | 2015-09-06 13:34:05 +0200 |
---|---|---|
committer | Francois-Xavier Le Bail <fx.lebail@yahoo.com> | 2015-09-06 13:44:54 +0200 |
commit | 7ea344d76a21255867275a199d1ddb1e5b358f77 (patch) | |
tree | 3ae1f529c35fd61a7ed71688c0e2d67c7cdcf1c4 /print-openflow-1.0.c | |
parent | c1c3c77463d592cc576eaa491e604752044ca55a (diff) | |
download | tcpdump-7ea344d76a21255867275a199d1ddb1e5b358f77.tar.gz |
Use the word 'invalid' for 'malformed' or 'corrupted' packets
An invalid packet could be:
1) built malformed originally by the sender or a fuzz tester,
2) became corrupted in transit.
Diffstat (limited to 'print-openflow-1.0.c')
-rw-r--r-- | print-openflow-1.0.c | 136 |
1 files changed, 68 insertions, 68 deletions
diff --git a/print-openflow-1.0.c b/print-openflow-1.0.c index 8cfc00c3..fd3ac3b0 100644 --- a/print-openflow-1.0.c +++ b/print-openflow-1.0.c @@ -14,7 +14,7 @@ * * ep -- the pointer to the end of the captured frame * They return either the pointer to the next not-yet-decoded part of the frame * or the value of ep, which means the current frame processing is over as it - * has been fully decoded or is malformed or truncated. This way it is possible + * has been fully decoded or is invalid or truncated. This way it is possible * to chain and nest such functions uniformly to decode an OF1.0 message, which * consists of several layers of nested structures. * @@ -72,7 +72,7 @@ #include "openflow.h" static const char tstr[] = " [|openflow]"; -static const char cstr[] = " (corrupt)"; +static const char cstr[] = " (invalid)"; #define OFPT_HELLO 0x00 #define OFPT_ERROR 0x01 @@ -759,7 +759,7 @@ of10_bsn_message_print(netdissect_options *ndo, uint32_t subtype; if (len < 4) - goto corrupt; + goto invalid; /* subtype */ ND_TCHECK2(*cp, 4); subtype = EXTRACT_32BITS(cp); @@ -780,7 +780,7 @@ of10_bsn_message_print(netdissect_options *ndo, * */ if (len != 12) - goto corrupt; + goto invalid; /* index */ ND_TCHECK2(*cp, 1); ND_PRINT((ndo, ", index %u", *cp)); @@ -804,7 +804,7 @@ of10_bsn_message_print(netdissect_options *ndo, * */ if (len != 12) - goto corrupt; + goto invalid; /* index */ ND_TCHECK2(*cp, 1); ND_PRINT((ndo, ", index %u", *cp)); @@ -831,7 +831,7 @@ of10_bsn_message_print(netdissect_options *ndo, * */ if (len != 8) - goto corrupt; + goto invalid; /* report_mirror_ports */ ND_TCHECK2(*cp, 1); ND_PRINT((ndo, ", report_mirror_ports %s", tok2str(bsn_onoff_str, "bogus (%u)", *cp))); @@ -854,7 +854,7 @@ of10_bsn_message_print(netdissect_options *ndo, * */ if (len != 4) - goto corrupt; + goto invalid; break; case BSN_VIRTUAL_PORT_REMOVE_REQUEST: /* @@ -868,7 +868,7 @@ of10_bsn_message_print(netdissect_options *ndo, * */ if (len != 8) - goto corrupt; + goto invalid; /* vport_no */ ND_TCHECK2(*cp, 4); ND_PRINT((ndo, ", vport_no %u", EXTRACT_32BITS(cp))); @@ -888,7 +888,7 @@ of10_bsn_message_print(netdissect_options *ndo, * */ if (len < 8) - goto corrupt; + goto invalid; /* service */ ND_TCHECK2(*cp, 4); ND_PRINT((ndo, ", service %u", EXTRACT_32BITS(cp))); @@ -935,7 +935,7 @@ of10_bsn_message_print(netdissect_options *ndo, * */ if (len != 8) - goto corrupt; + goto invalid; /* status */ ND_TCHECK2(*cp, 4); ND_PRINT((ndo, ", status 0x%08x", EXTRACT_32BITS(cp))); @@ -947,7 +947,7 @@ of10_bsn_message_print(netdissect_options *ndo, } return cp; -corrupt: /* skip the undersized data */ +invalid: /* skip the undersized data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len); return cp0 + len; @@ -964,7 +964,7 @@ of10_bsn_actions_print(netdissect_options *ndo, uint32_t subtype, vlan_tag; if (len < 4) - goto corrupt; + goto invalid; /* subtype */ ND_TCHECK2(*cp, 4); subtype = EXTRACT_32BITS(cp); @@ -987,7 +987,7 @@ of10_bsn_actions_print(netdissect_options *ndo, * */ if (len != 16) - goto corrupt; + goto invalid; /* dest_port */ ND_TCHECK2(*cp, 4); ND_PRINT((ndo, ", dest_port %u", EXTRACT_32BITS(cp))); @@ -1021,7 +1021,7 @@ of10_bsn_actions_print(netdissect_options *ndo, return cp; -corrupt: +invalid: ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len); return cp0 + len; @@ -1038,7 +1038,7 @@ of10_vendor_action_print(netdissect_options *ndo, const u_char *(*decoder)(netdissect_options *, const u_char *, const u_char *, const u_int); if (len < 4) - goto corrupt; + goto invalid; /* vendor */ ND_TCHECK2(*cp, 4); vendor = EXTRACT_32BITS(cp); @@ -1050,7 +1050,7 @@ of10_vendor_action_print(netdissect_options *ndo, of10_data_print; return decoder(ndo, cp, ep, len - 4); -corrupt: /* skip the undersized data */ +invalid: /* skip the undersized data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp, len); return cp + len; @@ -1067,7 +1067,7 @@ of10_vendor_message_print(netdissect_options *ndo, const u_char *(*decoder)(netdissect_options *, const u_char *, const u_char *, u_int); if (len < 4) - goto corrupt; + goto invalid; /* vendor */ ND_TCHECK2(*cp, 4); vendor = EXTRACT_32BITS(cp); @@ -1079,7 +1079,7 @@ of10_vendor_message_print(netdissect_options *ndo, of10_data_print; return decoder(ndo, cp, ep, len - 4); -corrupt: /* skip the undersized data */ +invalid: /* skip the undersized data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp, len); return cp + len; @@ -1096,7 +1096,7 @@ of10_vendor_data_print(netdissect_options *ndo, uint32_t vendor; if (len < 4) - goto corrupt; + goto invalid; /* vendor */ ND_TCHECK2(*cp, 4); vendor = EXTRACT_32BITS(cp); @@ -1105,7 +1105,7 @@ of10_vendor_data_print(netdissect_options *ndo, /* data */ return of10_data_print(ndo, cp, ep, len - 4); -corrupt: /* skip the undersized data */ +invalid: /* skip the undersized data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp, len); return cp + len; @@ -1146,7 +1146,7 @@ of10_phy_ports_print(netdissect_options *ndo, while (len) { if (len < OF_PHY_PORT_LEN) - goto corrupt; + goto invalid; /* port_no */ ND_TCHECK2(*cp, 2); ND_PRINT((ndo, "\n\t port_no %s", tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)))); @@ -1202,7 +1202,7 @@ next_port: } /* while */ return cp; -corrupt: /* skip the undersized trailing data */ +invalid: /* skip the undersized trailing data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -1224,7 +1224,7 @@ of10_queue_props_print(netdissect_options *ndo, u_char plen_bogus = 0, skip = 0; if (len < OF_QUEUE_PROP_HEADER_LEN) - goto corrupt; + goto invalid; /* property */ ND_TCHECK2(*cp, 2); property = EXTRACT_16BITS(cp); @@ -1236,7 +1236,7 @@ of10_queue_props_print(netdissect_options *ndo, cp += 2; ND_PRINT((ndo, ", len %u", plen)); if (plen < OF_QUEUE_PROP_HEADER_LEN || plen > len) - goto corrupt; + goto invalid; /* pad */ ND_TCHECK2(*cp, 4); cp += 4; @@ -1278,7 +1278,7 @@ next_property: } /* while */ return cp; -corrupt: /* skip the rest of queue properties */ +invalid: /* skip the rest of queue properties */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -1298,7 +1298,7 @@ of10_queues_print(netdissect_options *ndo, while (len) { if (len < OF_PACKET_QUEUE_LEN) - goto corrupt; + goto invalid; /* queue_id */ ND_TCHECK2(*cp, 4); ND_PRINT((ndo, "\n\t queue_id %u", EXTRACT_32BITS(cp))); @@ -1309,7 +1309,7 @@ of10_queues_print(netdissect_options *ndo, cp += 2; ND_PRINT((ndo, ", len %u", desclen)); if (desclen < OF_PACKET_QUEUE_LEN || desclen > len) - goto corrupt; + goto invalid; /* pad */ ND_TCHECK2(*cp, 2); cp += 2; @@ -1326,7 +1326,7 @@ next_queue: } /* while */ return cp; -corrupt: /* skip the rest of queues */ +invalid: /* skip the rest of queues */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -1453,7 +1453,7 @@ of10_actions_print(netdissect_options *ndo, u_char alen_bogus = 0, skip = 0; if (len < OF_ACTION_HEADER_LEN) - goto corrupt; + goto invalid; /* type */ ND_TCHECK2(*cp, 2); type = EXTRACT_16BITS(cp); @@ -1466,7 +1466,7 @@ of10_actions_print(netdissect_options *ndo, ND_PRINT((ndo, ", len %u", alen)); /* On action size underrun/overrun skip the rest of the action list. */ if (alen < OF_ACTION_HEADER_LEN || alen > len) - goto corrupt; + goto invalid; /* On action size inappropriate for the given type or invalid type just skip * the current action, as the basic length constraint has been met. */ switch (type) { @@ -1597,7 +1597,7 @@ next_action: } /* while */ return cp; -corrupt: /* skip the rest of actions */ +invalid: /* skip the rest of actions */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -1765,12 +1765,12 @@ of10_stats_request_print(netdissect_options *ndo, case OFPST_DESC: case OFPST_TABLE: if (len) - goto corrupt; + goto invalid; return cp; case OFPST_FLOW: case OFPST_AGGREGATE: if (len != OF_FLOW_STATS_REQUEST_LEN) - goto corrupt; + goto invalid; /* match */ if (ep == (cp = of10_match_print(ndo, "\n\t ", cp, ep))) return ep; /* end of snapshot */ @@ -1787,7 +1787,7 @@ of10_stats_request_print(netdissect_options *ndo, return cp + 2; case OFPST_PORT: if (len != OF_PORT_STATS_REQUEST_LEN) - goto corrupt; + goto invalid; /* port_no */ ND_TCHECK2(*cp, 2); ND_PRINT((ndo, "\n\t port_no %s", tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)))); @@ -1797,7 +1797,7 @@ of10_stats_request_print(netdissect_options *ndo, return cp + 6; case OFPST_QUEUE: if (len != OF_QUEUE_STATS_REQUEST_LEN) - goto corrupt; + goto invalid; /* port_no */ ND_TCHECK2(*cp, 2); ND_PRINT((ndo, "\n\t port_no %s", tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)))); @@ -1814,7 +1814,7 @@ of10_stats_request_print(netdissect_options *ndo, } return cp; -corrupt: /* skip the message body */ +invalid: /* skip the message body */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -1829,7 +1829,7 @@ of10_desc_stats_reply_print(netdissect_options *ndo, const u_char *cp, const u_char *ep, const u_int len) { if (len != OF_DESC_STATS_LEN) - goto corrupt; + goto invalid; /* mfr_desc */ ND_TCHECK2(*cp, DESC_STR_LEN); ND_PRINT((ndo, "\n\t mfr_desc '")); @@ -1861,7 +1861,7 @@ of10_desc_stats_reply_print(netdissect_options *ndo, ND_PRINT((ndo, "'")); return cp + DESC_STR_LEN; -corrupt: /* skip the message body */ +invalid: /* skip the message body */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp, len); return cp + len; @@ -1881,13 +1881,13 @@ of10_flow_stats_reply_print(netdissect_options *ndo, while (len) { if (len < OF_FLOW_STATS_LEN) - goto corrupt; + goto invalid; /* length */ ND_TCHECK2(*cp, 2); entry_len = EXTRACT_16BITS(cp); ND_PRINT((ndo, "\n\t length %u", entry_len)); if (entry_len < OF_FLOW_STATS_LEN || entry_len > len) - goto corrupt; + goto invalid; cp += 2; /* table_id */ ND_TCHECK2(*cp, 1); @@ -1942,7 +1942,7 @@ of10_flow_stats_reply_print(netdissect_options *ndo, } /* while */ return cp; -corrupt: /* skip the rest of flow statistics entries */ +invalid: /* skip the rest of flow statistics entries */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -1958,7 +1958,7 @@ of10_aggregate_stats_reply_print(netdissect_options *ndo, const u_int len) { if (len != OF_AGGREGATE_STATS_REPLY_LEN) - goto corrupt; + goto invalid; /* packet_count */ ND_TCHECK2(*cp, 8); ND_PRINT((ndo, "\n\t packet_count %" PRIu64, EXTRACT_64BITS(cp))); @@ -1975,7 +1975,7 @@ of10_aggregate_stats_reply_print(netdissect_options *ndo, ND_TCHECK2(*cp, 4); return cp + 4; -corrupt: /* skip the message body */ +invalid: /* skip the message body */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp, len); return cp + len; @@ -1994,7 +1994,7 @@ of10_table_stats_reply_print(netdissect_options *ndo, while (len) { if (len < OF_TABLE_STATS_LEN) - goto corrupt; + goto invalid; /* table_id */ ND_TCHECK2(*cp, 1); ND_PRINT((ndo, "\n\t table_id %s", tok2str(tableid_str, "%u", *cp))); @@ -2034,7 +2034,7 @@ of10_table_stats_reply_print(netdissect_options *ndo, } /* while */ return cp; -corrupt: /* skip the undersized trailing data */ +invalid: /* skip the undersized trailing data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -2053,7 +2053,7 @@ of10_port_stats_reply_print(netdissect_options *ndo, while (len) { if (len < OF_PORT_STATS_LEN) - goto corrupt; + goto invalid; /* port_no */ ND_TCHECK2(*cp, 2); ND_PRINT((ndo, "\n\t port_no %s", tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)))); @@ -2119,7 +2119,7 @@ next_port: } /* while */ return cp; -corrupt: /* skip the undersized trailing data */ +invalid: /* skip the undersized trailing data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -2138,7 +2138,7 @@ of10_queue_stats_reply_print(netdissect_options *ndo, while (len) { if (len < OF_QUEUE_STATS_LEN) - goto corrupt; + goto invalid; /* port_no */ ND_TCHECK2(*cp, 2); ND_PRINT((ndo, "\n\t port_no %s", tok2str(ofpp_str, "%u", EXTRACT_16BITS(cp)))); @@ -2167,7 +2167,7 @@ of10_queue_stats_reply_print(netdissect_options *ndo, } /* while */ return cp; -corrupt: /* skip the undersized trailing data */ +invalid: /* skip the undersized trailing data */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -2238,14 +2238,14 @@ of10_packet_out_print(netdissect_options *ndo, actions_len = EXTRACT_16BITS(cp); cp += 2; if (actions_len > len - OF_PACKET_OUT_LEN) - goto corrupt; + goto invalid; /* actions */ if (ep == (cp = of10_actions_print(ndo, "\n\t ", cp, ep, actions_len))) return ep; /* end of snapshot */ /* data */ return of10_packet_data_print(ndo, cp, ep, len - OF_PACKET_OUT_LEN - actions_len); -corrupt: /* skip the rest of the message body */ +invalid: /* skip the rest of the message body */ ND_PRINT((ndo, "%s", cstr)); ND_TCHECK2(*cp0, len0); return cp0 + len0; @@ -2386,7 +2386,7 @@ of10_header_body_print(netdissect_options *ndo, * possible, check that message length meets the constraint, in remaining * cases check that the length is OK to begin decoding and leave any final * verification up to a lower-layer function. When the current message is - * corrupt, proceed to the next message. */ + * invalid, proceed to the next message. */ /* [OF10] Section 5.1 */ ND_PRINT((ndo, "\n\tversion 1.0, type %s, length %u, xid 0x%08x", @@ -2398,14 +2398,14 @@ of10_header_body_print(netdissect_options *ndo, case OFPT_BARRIER_REQUEST: /* [OF10] Section 5.3.7 */ case OFPT_BARRIER_REPLY: /* ibid */ if (len != OF_HEADER_LEN) - goto corrupt; + goto invalid; break; /* OpenFlow header and fixed-size message body. */ case OFPT_SET_CONFIG: /* [OF10] Section 5.3.2 */ case OFPT_GET_CONFIG_REPLY: /* ibid */ if (len != OF_SWITCH_CONFIG_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; /* flags */ @@ -2418,13 +2418,13 @@ of10_header_body_print(netdissect_options *ndo, return cp + 2; case OFPT_PORT_MOD: if (len != OF_PORT_MOD_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_port_mod_print(ndo, cp, ep); case OFPT_QUEUE_GET_CONFIG_REQUEST: /* [OF10] Section 5.3.4 */ if (len != OF_QUEUE_GET_CONFIG_REQUEST_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; /* port */ @@ -2436,13 +2436,13 @@ of10_header_body_print(netdissect_options *ndo, return cp + 2; case OFPT_FLOW_REMOVED: if (len != OF_FLOW_REMOVED_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_flow_removed_print(ndo, cp, ep); case OFPT_PORT_STATUS: /* [OF10] Section 5.4.3 */ if (len != OF_PORT_STATUS_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; /* reason */ @@ -2458,7 +2458,7 @@ of10_header_body_print(netdissect_options *ndo, /* OpenFlow header, fixed-size message body and n * fixed-size data units. */ case OFPT_FEATURES_REPLY: if (len < OF_SWITCH_FEATURES_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_features_reply_print(ndo, cp, ep, len); @@ -2474,21 +2474,21 @@ of10_header_body_print(netdissect_options *ndo, /* OpenFlow header, fixed-size message body and variable-size data. */ case OFPT_ERROR: if (len < OF_ERROR_MSG_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_error_print(ndo, cp, ep, len); case OFPT_VENDOR: /* [OF10] Section 5.5.4 */ if (len < OF_VENDOR_HEADER_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_vendor_message_print(ndo, cp, ep, len - OF_HEADER_LEN); case OFPT_PACKET_IN: /* 2 mock octets count in OF_PACKET_IN_LEN but not in len */ if (len < OF_PACKET_IN_LEN - 2) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_packet_in_print(ndo, cp, ep, len); @@ -2498,7 +2498,7 @@ of10_header_body_print(netdissect_options *ndo, /* c. OpenFlow header, fixed-size message body and variable-size data. */ case OFPT_STATS_REQUEST: if (len < OF_STATS_REQUEST_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_stats_request_print(ndo, cp, ep, len); @@ -2509,7 +2509,7 @@ of10_header_body_print(netdissect_options *ndo, /* d. OpenFlow header, fixed-size message body and variable-size data. */ case OFPT_STATS_REPLY: if (len < OF_STATS_REPLY_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_stats_reply_print(ndo, cp, ep, len); @@ -2517,7 +2517,7 @@ of10_header_body_print(netdissect_options *ndo, /* OpenFlow header and n * variable-size data units and variable-size data. */ case OFPT_PACKET_OUT: if (len < OF_PACKET_OUT_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_packet_out_print(ndo, cp, ep, len); @@ -2525,7 +2525,7 @@ of10_header_body_print(netdissect_options *ndo, /* OpenFlow header, fixed-size message body and n * variable-size data units. */ case OFPT_FLOW_MOD: if (len < OF_FLOW_MOD_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; return of10_flow_mod_print(ndo, cp, ep, len); @@ -2533,7 +2533,7 @@ of10_header_body_print(netdissect_options *ndo, /* OpenFlow header, fixed-size message body and n * variable-size data units. */ case OFPT_QUEUE_GET_CONFIG_REPLY: /* [OF10] Section 5.3.4 */ if (len < OF_QUEUE_GET_CONFIG_REPLY_LEN) - goto corrupt; + goto invalid; if (ndo->ndo_vflag < 1) goto next_message; /* port */ @@ -2548,7 +2548,7 @@ of10_header_body_print(netdissect_options *ndo, } /* switch (type) */ goto next_message; -corrupt: /* skip the message body */ +invalid: /* skip the message body */ ND_PRINT((ndo, "%s", cstr)); next_message: ND_TCHECK2(*cp0, len0 - OF_HEADER_LEN); |