summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--pimd/pim_cmd.c3
-rw-r--r--pimd/pim_instance.c15
-rw-r--r--pimd/pim_mroute.c21
-rw-r--r--pimd/pim_msdp_socket.c16
-rw-r--r--pimd/pim_rp.c4
-rw-r--r--pimd/pim_sock.c9
-rw-r--r--pimd/pim_sock.h2
-rw-r--r--pimd/pim_ssm.c5
-rw-r--r--pimd/pim_zebra.c7
9 files changed, 59 insertions, 23 deletions
diff --git a/pimd/pim_cmd.c b/pimd/pim_cmd.c
index ae509f4a9b..4a9c53cf29 100644
--- a/pimd/pim_cmd.c
+++ b/pimd/pim_cmd.c
@@ -4895,6 +4895,9 @@ DEFUN (show_ip_mroute_count,
int idx = 2;
struct vrf *vrf = pim_cmd_lookup_vrf(vty, argv, argc, &idx);
+ if (!vrf)
+ return CMD_WARNING;
+
show_mroute_count(vrf->info, vty);
return CMD_SUCCESS;
}
diff --git a/pimd/pim_instance.c b/pimd/pim_instance.c
index 7fc77556ec..d1f8085b48 100644
--- a/pimd/pim_instance.c
+++ b/pimd/pim_instance.c
@@ -195,11 +195,16 @@ static int pim_vrf_config_write(struct vty *vty)
RB_FOREACH(vrf, vrf_name_head, &vrfs_by_name)
{
pim = vrf->info;
- if (!pim || vrf->vrf_id != VRF_DEFAULT) {
- vty_out(vty, "vrf %s\n", vrf->name);
- pim_global_config_write_worker(pim, vty);
- vty_out(vty, "!\n");
- }
+
+ if (!pim)
+ continue;
+
+ if (vrf->vrf_id == VRF_DEFAULT)
+ continue;
+
+ vty_out(vty, "vrf %s\n", vrf->name);
+ pim_global_config_write_worker(pim, vty);
+ vty_out(vty, "!\n");
}
return 0;
diff --git a/pimd/pim_mroute.c b/pimd/pim_mroute.c
index 52d240f54b..dca3bf4af3 100644
--- a/pimd/pim_mroute.c
+++ b/pimd/pim_mroute.c
@@ -713,21 +713,26 @@ int pim_mroute_socket_enable(struct pim_instance *pim)
fd = socket(AF_INET, SOCK_RAW, IPPROTO_IGMP);
+ if (fd < 0) {
+ zlog_warn("Could not create mroute socket: errno=%d: %s", errno,
+ safe_strerror(errno));
+ return -2;
+ }
+
#ifdef SO_BINDTODEVICE
- setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, pim->vrf->name,
- strlen(pim->vrf->name));
+ if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE, pim->vrf->name,
+ strlen(pim->vrf->name))) {
+ zlog_warn("Could not setsockopt SO_BINDTODEVICE: %s",
+ safe_strerror(errno));
+ close(fd);
+ return -3;
+ }
#endif
if (pimd_privs.change(ZPRIVS_LOWER))
zlog_err("pim_mroute_socket_enable: could not lower privs, %s",
safe_strerror(errno));
- if (fd < 0) {
- zlog_warn("Could not create mroute socket: errno=%d: %s", errno,
- safe_strerror(errno));
- return -2;
- }
-
pim->mroute_socket = fd;
if (pim_mroute_set(pim, 1)) {
zlog_warn(
diff --git a/pimd/pim_msdp_socket.c b/pimd/pim_msdp_socket.c
index 9473462e63..f245a04353 100644
--- a/pimd/pim_msdp_socket.c
+++ b/pimd/pim_msdp_socket.c
@@ -156,9 +156,15 @@ int pim_msdp_sock_listen(struct pim_instance *pim)
if (!ifp) {
zlog_err("%s: Unable to lookup vrf interface: %s",
__PRETTY_FUNCTION__, pim->vrf->name);
+ close(sock);
+ return -1;
+ }
+ if (pim_socket_bind(sock, ifp)) {
+ zlog_err("%s: Unable to bind to socket: %s",
+ __PRETTY_FUNCTION__, safe_strerror(errno));
+ close(sock);
return -1;
}
- pim_socket_bind(sock, ifp);
}
if (pimd_privs.change(ZPRIVS_RAISE)) {
@@ -236,7 +242,13 @@ int pim_msdp_sock_connect(struct pim_msdp_peer *mp)
__PRETTY_FUNCTION__, mp->pim->vrf->name);
return -1;
}
- pim_socket_bind(mp->fd, ifp);
+ if (pim_socket_bind(mp->fd, ifp)) {
+ zlog_err("%s: Unable to bind to socket: %s",
+ __PRETTY_FUNCTION__, safe_strerror(errno));
+ close(mp->fd);
+ mp->fd = -1;
+ return -1;
+ }
}
set_nonblocking(mp->fd);
diff --git a/pimd/pim_rp.c b/pimd/pim_rp.c
index 05592992a9..e2c411a307 100644
--- a/pimd/pim_rp.c
+++ b/pimd/pim_rp.c
@@ -542,7 +542,9 @@ int pim_rp_del(struct pim_instance *pim, const char *rp,
}
pim_delete_tracked_nexthop(pim, &nht_p, NULL, rp_info);
- str2prefix("224.0.0.0/4", &g_all);
+ if (!str2prefix("224.0.0.0/4", &g_all))
+ return PIM_RP_BAD_ADDRESS;
+
rp_all = pim_rp_find_match_group(pim, &g_all);
if (rp_all == rp_info) {
diff --git a/pimd/pim_sock.c b/pimd/pim_sock.c
index a4d3d7e4b3..a5a842ceee 100644
--- a/pimd/pim_sock.c
+++ b/pimd/pim_sock.c
@@ -65,22 +65,21 @@ int pim_socket_raw(int protocol)
return fd;
}
-int pim_socket_ip_hdr(int fd)
+void pim_socket_ip_hdr(int fd)
{
const int on = 1;
- int ret;
if (pimd_privs.change(ZPRIVS_RAISE))
zlog_err("%s: could not raise privs, %s", __PRETTY_FUNCTION__,
safe_strerror(errno));
- ret = setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on));
+ if (setsockopt(fd, IPPROTO_IP, IP_HDRINCL, &on, sizeof(on)))
+ zlog_err("%s: Could not turn on IP_HDRINCL option: %s",
+ __PRETTY_FUNCTION__, safe_strerror(errno));
if (pimd_privs.change(ZPRIVS_LOWER))
zlog_err("%s: could not lower privs, %s", __PRETTY_FUNCTION__,
safe_strerror(errno));
-
- return ret;
}
/*
diff --git a/pimd/pim_sock.h b/pimd/pim_sock.h
index aa46cd6200..358dd39a44 100644
--- a/pimd/pim_sock.h
+++ b/pimd/pim_sock.h
@@ -36,7 +36,7 @@
#define PIM_SOCK_ERR_BIND (-11) /* Can't bind to interface */
int pim_socket_bind(int fd, struct interface *ifp);
-int pim_socket_ip_hdr(int fd);
+void pim_socket_ip_hdr(int fd);
int pim_socket_raw(int protocol);
int pim_socket_mcast(int protocol, struct in_addr ifaddr, struct interface *ifp,
u_char loop);
diff --git a/pimd/pim_ssm.c b/pimd/pim_ssm.c
index 8d270e6205..71bb6f2abd 100644
--- a/pimd/pim_ssm.c
+++ b/pimd/pim_ssm.c
@@ -71,7 +71,10 @@ static int pim_is_grp_standard_ssm(struct prefix *group)
static struct prefix group_ssm;
if (first) {
- str2prefix(PIM_SSM_STANDARD_RANGE, &group_ssm);
+ if (!str2prefix(PIM_SSM_STANDARD_RANGE, &group_ssm))
+ zlog_err("%s: Failure to Read Group Address: %s",
+ __PRETTY_FUNCTION__, PIM_SSM_STANDARD_RANGE);
+
first = 0;
}
diff --git a/pimd/pim_zebra.c b/pimd/pim_zebra.c
index 7b060aef4b..a1107e2424 100644
--- a/pimd/pim_zebra.c
+++ b/pimd/pim_zebra.c
@@ -184,6 +184,13 @@ static int pim_zebra_if_state_up(int command, struct zclient *zclient,
&& (ifp->vrf_id != vrf->vrf_id)) {
struct interface *master = if_lookup_by_name(
vrf->name, vrf->vrf_id);
+
+ if (!master) {
+ zlog_debug("%s: Unable to find Master interface for %s",
+ __PRETTY_FUNCTION__,
+ vrf->name);
+ return 0;
+ }
zclient_interface_set_master(zclient, master,
ifp);
}