diff options
author | 2015-10-04 23:00:10 +0000 | |
---|---|---|
committer | 2015-10-04 23:00:10 +0000 | |
commit | 3c8071b056e515acf3107044c865ca25cdbe8965 (patch) | |
tree | e0279dac8d0c570eb9aad25eca0b483e49767462 | |
parent | Add option to configure or disable the DUAL active timeout. (diff) | |
download | wireguard-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.c | 6 | ||||
-rw-r--r-- | usr.sbin/eigrpd/interface.c | 8 | ||||
-rw-r--r-- | usr.sbin/eigrpd/neighbor.c | 5 | ||||
-rw-r--r-- | usr.sbin/eigrpd/packet.c | 18 | ||||
-rw-r--r-- | usr.sbin/eigrpd/query.c | 4 | ||||
-rw-r--r-- | usr.sbin/eigrpd/rde.c | 6 | ||||
-rw-r--r-- | usr.sbin/eigrpd/rde_dual.c | 5 | ||||
-rw-r--r-- | usr.sbin/eigrpd/reply.c | 4 | ||||
-rw-r--r-- | usr.sbin/eigrpd/tlv.c | 16 | ||||
-rw-r--r-- | usr.sbin/eigrpd/update.c | 4 | ||||
-rw-r--r-- | usr.sbin/eigrpd/util.c | 10 |
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); |