summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrenato <renato@openbsd.org>2015-10-04 23:00:10 +0000
committerrenato <renato@openbsd.org>2015-10-04 23:00:10 +0000
commit3c8071b056e515acf3107044c865ca25cdbe8965 (patch)
treee0279dac8d0c570eb9aad25eca0b483e49767462
parentAdd option to configure or disable the DUAL active timeout. (diff)
downloadwireguard-openbsd-3c8071b056e515acf3107044c865ca25cdbe8965.tar.xz
wireguard-openbsd-3c8071b056e515acf3107044c865ca25cdbe8965.zip
Fix warnings and add safeguards to protect against corrupted data.
-rw-r--r--usr.sbin/eigrpd/eigrpe.c6
-rw-r--r--usr.sbin/eigrpd/interface.c8
-rw-r--r--usr.sbin/eigrpd/neighbor.c5
-rw-r--r--usr.sbin/eigrpd/packet.c18
-rw-r--r--usr.sbin/eigrpd/query.c4
-rw-r--r--usr.sbin/eigrpd/rde.c6
-rw-r--r--usr.sbin/eigrpd/rde_dual.c5
-rw-r--r--usr.sbin/eigrpd/reply.c4
-rw-r--r--usr.sbin/eigrpd/tlv.c16
-rw-r--r--usr.sbin/eigrpd/update.c4
-rw-r--r--usr.sbin/eigrpd/util.c10
11 files changed, 45 insertions, 41 deletions
diff --git a/usr.sbin/eigrpd/eigrpe.c b/usr.sbin/eigrpd/eigrpe.c
index a141eaefc43..8370655a86c 100644
--- a/usr.sbin/eigrpd/eigrpe.c
+++ b/usr.sbin/eigrpd/eigrpe.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: eigrpe.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: eigrpe.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -241,7 +241,7 @@ eigrpe_imsg_compose_rde(int type, uint32_t peerid, pid_t pid,
void
eigrpe_dispatch_main(int fd, short event, void *bula)
{
- struct iface *niface;
+ struct iface *niface = NULL;
static struct eigrp *neigrp;
struct eigrp_iface *nei;
struct imsg imsg;
@@ -359,6 +359,8 @@ eigrpe_dispatch_main(int fd, short event, void *bula)
TAILQ_INSERT_TAIL(&nconf->iface_list, niface, entry);
break;
case IMSG_RECONF_EIGRP_IFACE:
+ if (niface == NULL)
+ break;
if ((nei = malloc(sizeof(struct eigrp_iface))) == NULL)
fatal(NULL);
memcpy(nei, imsg.data, sizeof(struct eigrp_iface));
diff --git a/usr.sbin/eigrpd/interface.c b/usr.sbin/eigrpd/interface.c
index 087dc764ba6..db0e6dfc708 100644
--- a/usr.sbin/eigrpd/interface.c
+++ b/usr.sbin/eigrpd/interface.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: interface.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: interface.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -364,7 +364,7 @@ eigrp_if_start(struct eigrp_iface *ei)
return;
break;
default:
- break;
+ fatalx("eigrp_if_start: unknown af");
}
eigrp_if_start_hello_timer(ei);
@@ -396,7 +396,7 @@ eigrp_if_reset(struct eigrp_iface *ei)
if_leave_ipv6_group(ei->iface, &addr6);
break;
default:
- break;
+ fatalx("eigrp_if_reset: unknown af");
}
eigrp_if_stop_hello_timer(ei);
@@ -481,7 +481,7 @@ if_to_ctl(struct eigrp_iface *ei)
ictl.prefixlen = 64;
break;
default:
- break;
+ fatalx("if_to_ctl: unknown af");
}
ictl.flags = ei->iface->flags;
ictl.linkstate = ei->iface->linkstate;
diff --git a/usr.sbin/eigrpd/neighbor.c b/usr.sbin/eigrpd/neighbor.c
index bc61672105f..d0f8bfc7955 100644
--- a/usr.sbin/eigrpd/neighbor.c
+++ b/usr.sbin/eigrpd/neighbor.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: neighbor.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: neighbor.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -68,8 +68,7 @@ nbr_compare(struct nbr *a, struct nbr *b)
return (-1);
break;
default:
- log_debug("%s: unexpected address-family", __func__);
- break;
+ fatalx("nbr_compare: unknown af");
}
return (0);
diff --git a/usr.sbin/eigrpd/packet.c b/usr.sbin/eigrpd/packet.c
index 4b2670b13a5..7d16d4dd9e4 100644
--- a/usr.sbin/eigrpd/packet.c
+++ b/usr.sbin/eigrpd/packet.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: packet.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: packet.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -196,7 +196,7 @@ send_packet(struct eigrp_iface *ei, struct nbr *nbr, uint32_t flags,
send_packet_v6(iface, nbr, buf);
break;
default:
- break;
+ fatalx("send_packet: unknown af");
}
return (0);
@@ -278,13 +278,13 @@ recv_packet(int af, union eigrpd_addr *src, union eigrpd_addr *dest,
{
struct eigrp_iface *ei;
struct nbr *nbr;
- struct tlv_parameter *tp;
- struct tlv_sw_version *tv;
- struct tlv_mcast_seq *tm;
+ struct tlv_parameter *tp = NULL;
+ struct tlv_sw_version *tv = NULL;
+ struct tlv_mcast_seq *tm = NULL;
struct rinfo ri;
struct rinfo_entry *re;
- int route_af;
- enum route_type route_type;
+ int route_af = 0;
+ enum route_type route_type = 0;
struct seq_addr_head seq_addr_list;
struct rinfo_head rinfo_list;
@@ -677,7 +677,7 @@ eigrp_hdr_sanity_check(int af, union eigrpd_addr *addr,
}
break;
default:
- break;
+ fatalx("eigrp_hdr_sanity_check: unknown af");
}
}
@@ -722,7 +722,7 @@ find_iface(unsigned int ifindex, int af, union eigrpd_addr *src)
return (iface);
break;
default:
- break;
+ fatalx("find_iface: unknown af");
}
return (NULL);
diff --git a/usr.sbin/eigrpd/query.c b/usr.sbin/eigrpd/query.c
index c6b06c65c97..627eb0493f3 100644
--- a/usr.sbin/eigrpd/query.c
+++ b/usr.sbin/eigrpd/query.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: query.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: query.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -66,7 +66,7 @@ send_query(struct eigrp_iface *ei, struct nbr *nbr,
size = sizeof(struct ip6_hdr);
break;
default:
- break;
+ fatalx("send_query: unknown af");
}
size += sizeof(struct eigrp_hdr);
diff --git a/usr.sbin/eigrpd/rde.c b/usr.sbin/eigrpd/rde.c
index 3b543648f35..1e142ab7165 100644
--- a/usr.sbin/eigrpd/rde.c
+++ b/usr.sbin/eigrpd/rde.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: rde.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -323,7 +323,7 @@ rde_dispatch_imsg(int fd, short event, void *bula)
void
rde_dispatch_parent(int fd, short event, void *bula)
{
- struct iface *niface;
+ struct iface *niface = NULL;
static struct eigrp *neigrp;
struct eigrp_iface *nei;
struct imsg imsg;
@@ -408,6 +408,8 @@ rde_dispatch_parent(int fd, short event, void *bula)
TAILQ_INSERT_TAIL(&nconf->iface_list, niface, entry);
break;
case IMSG_RECONF_EIGRP_IFACE:
+ if (niface == NULL)
+ break;
if ((nei = malloc(sizeof(struct eigrp_iface))) == NULL)
fatal(NULL);
memcpy(nei, imsg.data, sizeof(struct eigrp_iface));
diff --git a/usr.sbin/eigrpd/rde_dual.c b/usr.sbin/eigrpd/rde_dual.c
index 52543fc5f24..c49efbf3d3f 100644
--- a/usr.sbin/eigrpd/rde_dual.c
+++ b/usr.sbin/eigrpd/rde_dual.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: rde_dual.c,v 1.2 2015/10/04 22:54:38 renato Exp $ */
+/* $OpenBSD: rde_dual.c,v 1.3 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -168,8 +168,7 @@ rt_compare(struct rt_node *a, struct rt_node *b)
return (1);
break;
default:
- log_debug("%s: unexpected address-family", __func__);
- break;
+ fatalx("rt_compare: unknown af");
}
if (a->prefixlen < b->prefixlen)
diff --git a/usr.sbin/eigrpd/reply.c b/usr.sbin/eigrpd/reply.c
index 98dab8d54cf..bb0e57d6b17 100644
--- a/usr.sbin/eigrpd/reply.c
+++ b/usr.sbin/eigrpd/reply.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: reply.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: reply.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -65,7 +65,7 @@ send_reply(struct nbr *nbr, struct rinfo_head *rinfo_list, int siareply)
size = sizeof(struct ip6_hdr);
break;
default:
- break;
+ fatalx("send_reply: unknown af");
}
size += sizeof(struct eigrp_hdr);
diff --git a/usr.sbin/eigrpd/tlv.c b/usr.sbin/eigrpd/tlv.c
index a871fcdd583..40b6fb85380 100644
--- a/usr.sbin/eigrpd/tlv.c
+++ b/usr.sbin/eigrpd/tlv.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: tlv.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: tlv.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -187,7 +187,7 @@ gen_route_tlv(struct ibuf *buf, struct rinfo *ri)
}
break;
default:
- break;
+ fatalx("gen_route_tlv: unknown af");
}
if (ibuf_add(buf, &tlv, sizeof(tlv)))
return (-1);
@@ -207,7 +207,7 @@ gen_route_tlv(struct ibuf *buf, struct rinfo *ri)
tlvlen += sizeof(ri->nexthop.v6);
break;
default:
- break;
+ fatalx("gen_route_tlv: unknown af");
}
/* exterior metric */
@@ -246,7 +246,7 @@ gen_route_tlv(struct ibuf *buf, struct rinfo *ri)
return (-1);
break;
default:
- break;
+ fatalx("gen_route_tlv: unknown af");
}
tlvlen += sizeof(pflen) + pflen;
@@ -362,7 +362,7 @@ tlv_decode_route(int af, enum route_type type, struct tlv *tlv, char *buf,
min_len = TLV_TYPE_IPV6_INT_MIN_LEN;
break;
default:
- break;
+ fatalx("tlv_decode_route: unknown af");
}
if (type == EIGRP_ROUTE_EXTERNAL)
min_len += sizeof(struct classic_emetric);
@@ -386,7 +386,7 @@ tlv_decode_route(int af, enum route_type type, struct tlv *tlv, char *buf,
memcpy(&ri->nexthop.v6, buf + offset, sizeof(ri->nexthop.v6));
offset += sizeof(ri->nexthop.v6);
default:
- break;
+ fatalx("tlv_decode_route: unknown af");
}
/* exterior metric */
@@ -418,7 +418,7 @@ tlv_decode_route(int af, enum route_type type, struct tlv *tlv, char *buf,
plen = PREFIX_SIZE6(ri->prefixlen);
break;
default:
- break;
+ fatalx("tlv_decode_route: unknown af");
}
/* safety check */
@@ -456,7 +456,7 @@ tlv_decode_route(int af, enum route_type type, struct tlv *tlv, char *buf,
}
break;
default:
- break;
+ fatalx("tlv_decode_route: unknown af");
}
/* just in case... */
diff --git a/usr.sbin/eigrpd/update.c b/usr.sbin/eigrpd/update.c
index 1b7b8b5d4a2..8f071921c10 100644
--- a/usr.sbin/eigrpd/update.c
+++ b/usr.sbin/eigrpd/update.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: update.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: update.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -62,7 +62,7 @@ send_update(struct eigrp_iface *ei, struct nbr *nbr, uint32_t flags,
size = sizeof(struct ip6_hdr);
break;
default:
- break;
+ fatalx("send_update: unknown af");
}
size += sizeof(struct eigrp_hdr);
diff --git a/usr.sbin/eigrpd/util.c b/usr.sbin/eigrpd/util.c
index 90099c558b2..844b1565296 100644
--- a/usr.sbin/eigrpd/util.c
+++ b/usr.sbin/eigrpd/util.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: util.c,v 1.1 2015/10/02 04:26:47 renato Exp $ */
+/* $OpenBSD: util.c,v 1.2 2015/10/04 23:00:10 renato Exp $ */
/*
* Copyright (c) 2015 Renato Westphal <renato@openbsd.org>
@@ -131,7 +131,7 @@ eigrp_applymask(int af, union eigrpd_addr *dest, const union eigrpd_addr *src,
mask.s6_addr[i];
break;
default:
- break;
+ fatalx("eigrp_applymask: unknown af");
}
}
@@ -148,7 +148,7 @@ eigrp_addrcmp(int af, union eigrpd_addr *a, union eigrpd_addr *b)
return (1);
break;
default:
- break;
+ fatalx("eigrp_addrcmp: unknown af");
}
return (0);
@@ -158,6 +158,8 @@ int
eigrp_addrisset(int af, union eigrpd_addr *addr)
{
switch (af) {
+ case AF_UNSPEC:
+ return (0);
case AF_INET:
if (addr->v4.s_addr != INADDR_ANY)
return (1);
@@ -167,7 +169,7 @@ eigrp_addrisset(int af, union eigrpd_addr *addr)
return (1);
break;
default:
- break;
+ fatalx("eigrp_addrisset: unknown af");
}
return (0);