summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_bmp.c5
-rw-r--r--bgpd/bgp_network.c4
-rw-r--r--bgpd/bgp_route.c4
-rw-r--r--bgpd/bgp_vty.c12
-rw-r--r--bgpd/bgpd.c7
-rw-r--r--lib/vty.c6
-rw-r--r--nhrpd/nhrp_cache.c5
-rw-r--r--nhrpd/nhrp_shortcut.c4
-rw-r--r--zebra/zebra_vty.c3
9 files changed, 34 insertions, 16 deletions
diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c
index af88547ca9..f115f18f07 100644
--- a/bgpd/bgp_bmp.c
+++ b/bgpd/bgp_bmp.c
@@ -1351,7 +1351,10 @@ static struct bmp *bmp_open(struct bmp_targets *bt, int bmp_sock)
set_cloexec(bmp_sock);
shutdown(bmp_sock, SHUT_RD);
- sockunion2hostprefix(&su, &p);
+ if (!sockunion2hostprefix(&su, &p)) {
+ close(bmp_sock);
+ return NULL;
+ }
acl = NULL;
switch (p.family) {
diff --git a/bgpd/bgp_network.c b/bgpd/bgp_network.c
index cae11ae7bd..fcbdb2969f 100644
--- a/bgpd/bgp_network.c
+++ b/bgpd/bgp_network.c
@@ -639,7 +639,9 @@ static int bgp_update_address(struct interface *ifp, const union sockunion *dst,
struct listnode *node;
int common;
- sockunion2hostprefix(dst, &d);
+ if (!sockunion2hostprefix(dst, &d))
+ return 1;
+
sel = NULL;
common = -1;
diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c
index 87e8feb3bf..df30897dc6 100644
--- a/bgpd/bgp_route.c
+++ b/bgpd/bgp_route.c
@@ -13699,7 +13699,9 @@ uint8_t bgp_distance_apply(const struct prefix *p, struct bgp_path_info *pinfo,
return pinfo->attr->distance;
/* Check source address. */
- sockunion2hostprefix(&peer->su, &q);
+ if (!sockunion2hostprefix(&peer->su, &q))
+ return 0;
+
dest = bgp_node_match(bgp_distance_table[afi][safi], &q);
if (dest) {
bdistance = bgp_dest_get_bgp_distance_info(dest);
diff --git a/bgpd/bgp_vty.c b/bgpd/bgp_vty.c
index 40e9707866..72d250d2bb 100644
--- a/bgpd/bgp_vty.c
+++ b/bgpd/bgp_vty.c
@@ -12448,9 +12448,9 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
if (dn_flag[0]) {
struct prefix prefix, *range = NULL;
- sockunion2hostprefix(&(p->su), &prefix);
- range = peer_group_lookup_dynamic_neighbor_range(
- p->group, &prefix);
+ if (sockunion2hostprefix(&(p->su), &prefix))
+ range = peer_group_lookup_dynamic_neighbor_range(
+ p->group, &prefix);
if (range) {
prefix2str(range, buf1, sizeof(buf1));
@@ -12467,9 +12467,9 @@ static void bgp_show_peer(struct vty *vty, struct peer *p, bool use_json,
if (dn_flag[0]) {
struct prefix prefix, *range = NULL;
- sockunion2hostprefix(&(p->su), &prefix);
- range = peer_group_lookup_dynamic_neighbor_range(
- p->group, &prefix);
+ if (sockunion2hostprefix(&(p->su), &prefix))
+ range = peer_group_lookup_dynamic_neighbor_range(
+ p->group, &prefix);
if (range) {
vty_out(vty,
diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c
index fd2c431eac..25f3526a23 100644
--- a/bgpd/bgpd.c
+++ b/bgpd/bgpd.c
@@ -2802,8 +2802,8 @@ int peer_group_listen_range_del(struct peer_group *group, struct prefix *range)
if (!peer_dynamic_neighbor(peer))
continue;
- sockunion2hostprefix(&peer->su, &prefix2);
- if (prefix_match(prefix, &prefix2)) {
+ if (sockunion2hostprefix(&peer->su, &prefix2)
+ && prefix_match(prefix, &prefix2)) {
if (bgp_debug_neighbor_events(peer))
zlog_debug(
"Deleting dynamic neighbor %s group %s upon delete of listen range %pFX",
@@ -3834,7 +3834,8 @@ struct peer *peer_lookup_dynamic_neighbor(struct bgp *bgp, union sockunion *su)
int dncount;
char buf[PREFIX2STR_BUFFER];
- sockunion2hostprefix(su, &prefix);
+ if (!sockunion2hostprefix(su, &prefix))
+ return NULL;
/* See if incoming connection matches a configured listen range. */
group = peer_group_lookup_dynamic_neighbor(bgp, &prefix, &listen_range);
diff --git a/lib/vty.c b/lib/vty.c
index fea4c49032..1eb4171630 100644
--- a/lib/vty.c
+++ b/lib/vty.c
@@ -1810,7 +1810,11 @@ static int vty_accept(struct thread *thread)
set_nonblocking(vty_sock);
set_cloexec(vty_sock);
- sockunion2hostprefix(&su, &p);
+ if (!sockunion2hostprefix(&su, &p)) {
+ zlog_info("Vty unable to convert prefix from sockunion %s",
+ sockunion2str(&su, buf, SU_ADDRSTRLEN));
+ return -1;
+ }
/* VTY's accesslist apply. */
if (p.family == AF_INET && vty_accesslist_name) {
diff --git a/nhrpd/nhrp_cache.c b/nhrpd/nhrp_cache.c
index 42f6a88f95..f7c71c2218 100644
--- a/nhrpd/nhrp_cache.c
+++ b/nhrpd/nhrp_cache.c
@@ -122,7 +122,8 @@ static void nhrp_cache_update_route(struct nhrp_cache *c)
char buf[3][SU_ADDRSTRLEN];
struct nhrp_interface *nifp;
- sockunion2hostprefix(&c->remote_addr, &pfx);
+ if (!sockunion2hostprefix(&c->remote_addr, &pfx))
+ return;
if (p && nhrp_peer_check(p, 1)) {
if (sockunion_family(&c->cur.remote_nbma_natoa) != AF_UNSPEC) {
@@ -186,7 +187,7 @@ static void nhrp_cache_update_route(struct nhrp_cache *c)
c->nhrp_route_installed = 0;
}
if (c->route_installed) {
- sockunion2hostprefix(&c->remote_addr, &pfx);
+ assert(sockunion2hostprefix(&c->remote_addr, &pfx));
notifier_call(&c->notifier_list, NOTIFY_CACHE_DOWN);
nhrp_route_announce(0, c->cur.type, &pfx, NULL, NULL,
0);
diff --git a/nhrpd/nhrp_shortcut.c b/nhrpd/nhrp_shortcut.c
index 9a6f77334f..2359cfa4ac 100644
--- a/nhrpd/nhrp_shortcut.c
+++ b/nhrpd/nhrp_shortcut.c
@@ -397,7 +397,9 @@ void nhrp_shortcut_initiate(union sockunion *addr)
struct prefix p;
struct nhrp_shortcut *s;
- sockunion2hostprefix(addr, &p);
+ if (!sockunion2hostprefix(addr, &p))
+ return;
+
s = nhrp_shortcut_get(&p);
if (s && s->type != NHRP_CACHE_INCOMPLETE) {
s->addr = *addr;
diff --git a/zebra/zebra_vty.c b/zebra/zebra_vty.c
index ea7baa2565..8f73825700 100644
--- a/zebra/zebra_vty.c
+++ b/zebra/zebra_vty.c
@@ -1277,6 +1277,9 @@ DEFPY (show_ip_nht,
if (addr)
p = sockunion2hostprefix(addr, &prefix);
+ if (!p)
+ return CMD_WARNING;
+
zebra_print_rnh_table(vrf_id, afi, vty, rtype, p);
return CMD_SUCCESS;
}