From fdbc8e77c88f751924299d0bc752371d5cc31116 Mon Sep 17 00:00:00 2001 From: Paul Jakma Date: Mon, 11 Apr 2011 16:31:43 +0100 Subject: bgpd: trivial format / warning fixes * bgp_aspath.c: (assegments_parse) just bail early if length doesn't match and fix the formatting. * bgp_network.c: add include needed for set_nonblocking * bgp_packet.c: formatting --- bgpd/bgp_aspath.c | 35 ++++++++++++++++++----------------- bgpd/bgp_network.c | 1 + bgpd/bgp_packet.c | 21 +++++++++++---------- 3 files changed, 30 insertions(+), 27 deletions(-) diff --git a/bgpd/bgp_aspath.c b/bgpd/bgp_aspath.c index 5a73eeff..cf930427 100644 --- a/bgpd/bgp_aspath.c +++ b/bgpd/bgp_aspath.c @@ -698,8 +698,12 @@ assegments_parse (struct stream *s, size_t length, int use32bit, int as4_path) size_t seg_size; /* softly softly, get the header first on its own */ - if (length >= AS_HEADER_SIZE) + if (length < AS_HEADER_SIZE) { + assegment_free_all (head); + return NULL; + } + segh.type = stream_getc (s); segh.length = stream_getc (s); @@ -710,26 +714,23 @@ assegments_parse (struct stream *s, size_t length, int use32bit, int as4_path) zlog_debug ("[AS4SEG] Parse aspath segment: got type %d, length %d", segh.type, segh.length); - switch (segh.type) - { - case AS_SEQUENCE: - case AS_SET: - break ; + switch (segh.type) + { + case AS_SEQUENCE: + case AS_SET: + break ; - case AS_CONFED_SEQUENCE: - case AS_CONFED_SET: - if (!as4_path) - break ; + case AS_CONFED_SEQUENCE: + case AS_CONFED_SET: + if (!as4_path) + break ; /* RFC4893 3: "invalid for the AS4_PATH attribute" */ /* fall through */ - default: /* reject unknown or invalid AS_PATH segment types */ - seg_size = 0 ; - } ; + default: /* reject unknown or invalid AS_PATH segment types */ + seg_size = 0 ; } - else - seg_size = 0 ; - + /* Stop now if segment is not valid (discarding anything collected to date) * * RFC4271 4.3, Path Attributes, b) AS_PATH: @@ -738,7 +739,7 @@ assegments_parse (struct stream *s, size_t length, int use32bit, int as4_path) */ if ((seg_size == 0) || (seg_size > length) || (segh.length == 0)) { - assegment_free_all (head); + assegment_free_all (head); return NULL; } diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c index 502f5679..570cc3b7 100644 --- a/bgpd/bgp_network.c +++ b/bgpd/bgp_network.c @@ -30,6 +30,7 @@ Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA #include "command.h" #include "privs.h" #include "linklist.h" +#include "network.h" #include "bgpd/bgpd.h" #include "bgpd/bgp_fsm.h" diff --git a/bgpd/bgp_packet.c b/bgpd/bgp_packet.c index 1d6b9eef..ed2cb73e 100644 --- a/bgpd/bgp_packet.c +++ b/bgpd/bgp_packet.c @@ -2009,7 +2009,7 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size) * as possible without going beyond the bounds of the entry, * to maximise debug information. */ - int ok ; + int ok; memset (&orfp, 0, sizeof (struct orf_prefix)); common = *p_pnt++; /* after ++: p_pnt <= p_end */ @@ -2021,11 +2021,11 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size) break; } ok = ((p_end - p_pnt) >= sizeof(u_int32_t)) ; - if (ok) + if (!ok) { - memcpy (&seq, p_pnt, sizeof (u_int32_t)); - p_pnt += sizeof (u_int32_t); - orfp.seq = ntohl (seq); + memcpy (&seq, p_pnt, sizeof (u_int32_t)); + p_pnt += sizeof (u_int32_t); + orfp.seq = ntohl (seq); } else p_pnt = p_end ; @@ -2063,16 +2063,17 @@ bgp_route_refresh_receive (struct peer *peer, bgp_size_t size) inet_ntop (orfp.p.family, &orfp.p.u.prefix, buf, BUFSIZ), orfp.p.prefixlen, orfp.ge, orfp.le, ok ? "" : " MALFORMED"); - + if (ok) - ret = prefix_bgp_orf_set (name, afi, &orfp, - (common & ORF_COMMON_PART_DENY ? 0 : 1 ), - (common & ORF_COMMON_PART_REMOVE ? 0 : 1)); + ret = prefix_bgp_orf_set (name, afi, &orfp, + (common & ORF_COMMON_PART_DENY ? 0 : 1 ), + (common & ORF_COMMON_PART_REMOVE ? 0 : 1)); if (!ok || (ret != CMD_SUCCESS)) { if (BGP_DEBUG (normal, NORMAL)) - zlog_debug ("%s Received misformatted prefixlist ORF. Remove All pfxlist", peer->host); + zlog_debug ("%s Received misformatted prefixlist ORF." + " Remove All pfxlist", peer->host); prefix_bgp_orf_remove_all (name); break; } -- cgit v1.2.1