diff --git a/bgpd/bgp_updgrp_packet.c b/bgpd/bgp_updgrp_packet.c index 567e1e927e..51abc19bea 100644 --- a/bgpd/bgp_updgrp_packet.c +++ b/bgpd/bgp_updgrp_packet.c @@ -451,6 +451,7 @@ bpacket_reformat_for_peer (struct bpacket *pkt, struct peer_af *paf) /* TODO: handle IPv6 nexthops */ zlog_warn ("%s: %s: invalid MP nexthop length (AFI IP): %u", __func__, peer->host, nhlen); + stream_free (s); return NULL; } @@ -542,6 +543,7 @@ bpacket_reformat_for_peer (struct bpacket *pkt, struct peer_af *paf) /* TODO: handle IPv4 nexthops */ zlog_warn ("%s: %s: invalid MP nexthop length (AFI IP6): %u", __func__, peer->host, nhlen); + stream_free (s); return NULL; } diff --git a/eigrpd/eigrp_dump.c b/eigrpd/eigrp_dump.c index c2fbe29cfc..4f0e3dd876 100644 --- a/eigrpd/eigrp_dump.c +++ b/eigrpd/eigrp_dump.c @@ -51,14 +51,14 @@ /* Enable debug option variables -- valid only session. */ unsigned long term_debug_eigrp = 0; unsigned long term_debug_eigrp_nei = 0; -unsigned long term_debug_eigrp_packet[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +unsigned long term_debug_eigrp_packet[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; unsigned long term_debug_eigrp_zebra = 6; unsigned long term_debug_eigrp_transmit = 0; /* Configuration debug option variables. */ unsigned long conf_debug_eigrp = 0; unsigned long conf_debug_eigrp_nei = 0; -unsigned long conf_debug_eigrp_packet[10] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; +unsigned long conf_debug_eigrp_packet[11] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; unsigned long conf_debug_eigrp_zebra = 0; unsigned long conf_debug_eigrp_transmit = 0; diff --git a/eigrpd/eigrp_hello.c b/eigrpd/eigrp_hello.c index 0b370219b8..3ac7c8add9 100644 --- a/eigrpd/eigrp_hello.c +++ b/eigrpd/eigrp_hello.c @@ -122,7 +122,7 @@ eigrp_hello_timer (struct thread *thread) * Note the addition of K6 for the new extended metrics, and does not apply to * older TLV packet formats. */ -static void +static struct eigrp_neighbor * eigrp_hello_parameter_decode (struct eigrp_neighbor *nbr, struct eigrp_tlv_hdr_type *tlv) { @@ -172,6 +172,7 @@ eigrp_hello_parameter_decode (struct eigrp_neighbor *nbr, zlog_info ("Neighbor %s (%s) is down: Interface PEER-TERMINATION received", inet_ntoa (nbr->src),ifindex2ifname (nbr->ei->ifp->ifindex, VRF_DEFAULT)); eigrp_nbr_delete (nbr); + return NULL; } else { @@ -181,6 +182,8 @@ eigrp_hello_parameter_decode (struct eigrp_neighbor *nbr, } } } + + return nbr; } static u_char @@ -349,7 +352,9 @@ eigrp_hello_receive (struct eigrp *eigrp, struct ip *iph, struct eigrp_header *e switch (type) { case EIGRP_TLV_PARAMETER: - eigrp_hello_parameter_decode(nbr, tlv_header); + nbr = eigrp_hello_parameter_decode(nbr, tlv_header); + if (!nbr) + return; break; case EIGRP_TLV_AUTH: { diff --git a/eigrpd/eigrp_interface.c b/eigrpd/eigrp_interface.c index 26643452cb..a9deafe257 100644 --- a/eigrpd/eigrp_interface.c +++ b/eigrpd/eigrp_interface.c @@ -291,13 +291,13 @@ eigrp_if_up (struct eigrp_interface *ei) /*Add connected entry to topology table*/ - struct prefix_ipv4 *dest_addr = prefix_ipv4_new (); + struct prefix_ipv4 dest_addr; - dest_addr->family = AF_INET; - dest_addr->prefix = ei->connected->address->u.prefix4; - dest_addr->prefixlen = ei->connected->address->prefixlen; - apply_mask_ipv4 (dest_addr); - pe = eigrp_topology_table_lookup_ipv4 (eigrp->topology_table, dest_addr); + dest_addr.family = AF_INET; + dest_addr.prefix = ei->connected->address->u.prefix4; + dest_addr.prefixlen = ei->connected->address->prefixlen; + apply_mask_ipv4 (&dest_addr); + pe = eigrp_topology_table_lookup_ipv4 (eigrp->topology_table, &dest_addr); if (pe == NULL) { @@ -305,7 +305,7 @@ eigrp_if_up (struct eigrp_interface *ei) pe->serno = eigrp->serno; pe->destination_ipv4 = prefix_ipv4_new (); prefix_copy ((struct prefix *)pe->destination_ipv4, - (struct prefix *)dest_addr); + (struct prefix *)&dest_addr); pe->af = AF_INET; pe->nt = EIGRP_TOPOLOGY_TYPE_CONNECTED; diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c index 2d02acc00b..d252f91313 100644 --- a/eigrpd/eigrp_packet.c +++ b/eigrpd/eigrp_packet.c @@ -185,7 +185,7 @@ eigrp_check_md5_digest (struct stream *s, eigrph->checksum = 0; auth_TLV =(struct TLV_MD5_Authentication_Type *) (s->data + EIGRP_HEADER_LEN); - memcpy(auth_TLV->digest, "0", sizeof(auth_TLV->digest)); + memset(auth_TLV->digest, 0, sizeof(auth_TLV->digest)); ibuf = s->data; backup_end = s->endp; diff --git a/eigrpd/eigrp_query.c b/eigrpd/eigrp_query.c index 774461a097..3ef8f9a975 100644 --- a/eigrpd/eigrp_query.c +++ b/eigrpd/eigrp_query.c @@ -160,6 +160,7 @@ eigrp_send_query (struct eigrp_interface *ei) struct eigrp_neighbor *nbr; struct eigrp_prefix_entry *pe; char has_tlv; + bool ep_saved = false; ep = eigrp_packet_new(ei->ifp->mtu); @@ -218,6 +219,7 @@ eigrp_send_query (struct eigrp_interface *ei) { /*Put packet to retransmission queue*/ eigrp_fifo_push_head(nbr->retrans_queue, ep); + ep_saved = true; if (nbr->retrans_queue->count == 1) { @@ -225,4 +227,7 @@ eigrp_send_query (struct eigrp_interface *ei) } } } + + if (!ep_saved) + eigrp_packet_free(ep); } diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index 9bad7991a5..8c2b986a20 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -307,6 +307,8 @@ netlink_route_change_read_unicast (struct sockaddr_nl *snl, struct nlmsghdr *h, p.family = AF_INET; memcpy (&p.u.prefix4, dest, 4); p.prefixlen = rtm->rtm_dst_len; + + src_p.prefixlen = 0; // Forces debug below to not display anything } else if (rtm->rtm_family == AF_INET6) { diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c index 6f1c81eda1..8b5af69bff 100644 --- a/zebra/zebra_vty.c +++ b/zebra/zebra_vty.c @@ -740,7 +740,7 @@ vty_show_ip_route_detail (struct vty *vty, struct route_node *rn, int mcast) case NEXTHOP_TYPE_IPV6: case NEXTHOP_TYPE_IPV6_IFINDEX: vty_out (vty, " %s", - inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ)); + inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, sizeof buf)); if (nexthop->ifindex) vty_out (vty, ", via %s", ifindex2ifname (nexthop->ifindex, re->vrf_id)); @@ -793,7 +793,7 @@ vty_show_ip_route_detail (struct vty *vty, struct route_node *rn, int mcast) { vty_out (vty, ", label %s", mpls_label2str (nexthop->nh_label->num_labels, - nexthop->nh_label->label, buf, BUFSIZ, 1)); + nexthop->nh_label->label, buf, sizeof buf, 1)); } vty_out (vty, "%s", VTY_NEWLINE); @@ -890,7 +890,7 @@ vty_show_ip_route (struct vty *vty, struct route_node *rn, struct route_entry *r break; case NEXTHOP_TYPE_IPV6: case NEXTHOP_TYPE_IPV6_IFINDEX: - json_object_string_add(json_nexthop, "ip", inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ)); + json_object_string_add(json_nexthop, "ip", inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, sizeof buf)); json_object_string_add(json_nexthop, "afi", "ipv6"); if (nexthop->ifindex) @@ -1001,7 +1001,7 @@ vty_show_ip_route (struct vty *vty, struct route_node *rn, struct route_entry *r case NEXTHOP_TYPE_IPV6: case NEXTHOP_TYPE_IPV6_IFINDEX: vty_out (vty, " via %s", - inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, BUFSIZ)); + inet_ntop (AF_INET6, &nexthop->gate.ipv6, buf, sizeof buf)); if (nexthop->ifindex) vty_out (vty, ", %s", ifindex2ifname (nexthop->ifindex, re->vrf_id)); @@ -1053,7 +1053,7 @@ vty_show_ip_route (struct vty *vty, struct route_node *rn, struct route_entry *r { vty_out (vty, ", label %s", mpls_label2str (nexthop->nh_label->num_labels, - nexthop->nh_label->label, buf, BUFSIZ, 1)); + nexthop->nh_label->label, buf, sizeof buf, 1)); } if (CHECK_FLAG (re->flags, ZEBRA_FLAG_BLACKHOLE)) @@ -1929,7 +1929,7 @@ static_config (struct vty *vty, afi_t afi, safi_t safi, const char *cmd) vty_out (vty, " %s", inet_ntoa (si->addr.ipv4)); break; case STATIC_IPV6_GATEWAY: - vty_out (vty, " %s", inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ)); + vty_out (vty, " %s", inet_ntop (AF_INET6, &si->addr.ipv6, buf, sizeof buf)); break; case STATIC_IFINDEX: vty_out (vty, " %s", si->ifname); @@ -1939,7 +1939,7 @@ static_config (struct vty *vty, afi_t afi, safi_t safi, const char *cmd) break; case STATIC_IPV6_GATEWAY_IFINDEX: vty_out (vty, " %s %s", - inet_ntop (AF_INET6, &si->addr.ipv6, buf, BUFSIZ), + inet_ntop (AF_INET6, &si->addr.ipv6, buf, sizeof buf), ifindex2ifname (si->ifindex, si->vrf_id)); break; } @@ -3098,6 +3098,8 @@ DEFUN (ip_zebra_import_table_distance, int distance = ZEBRA_TABLE_DISTANCE_DEFAULT; char *rmap = strmatch (argv[argc - 2]->text, "route-map") ? XSTRDUP(MTYPE_ROUTE_MAP_NAME, argv[argc - 1]->arg) : NULL; + int ret; + if (argc == 7 || (argc == 5 && !rmap)) VTY_GET_INTEGER_RANGE("distance", distance, argv[4]->arg, 1, 255); @@ -3115,7 +3117,11 @@ DEFUN (ip_zebra_import_table_distance, return CMD_WARNING; } - return (zebra_import_table(AFI_IP, table_id, distance, rmap, 1)); + ret = zebra_import_table(AFI_IP, table_id, distance, rmap, 1); + if (rmap) + XFREE(MTYPE_ROUTE_MAP_NAME, rmap); + + return ret; } DEFUN (no_ip_zebra_import_table,