summaryrefslogtreecommitdiff
path: root/eigrpd/eigrp_packet.c
diff options
context:
space:
mode:
authorDonald Sharp <sharpd@cumulusnetworks.com>2017-10-29 08:51:57 -0400
committerDonald Sharp <sharpd@cumulusnetworks.com>2017-10-29 09:48:02 -0400
commitd4395853e8af1e21c86d4d9227e702640af58ab1 (patch)
treecb79fd10ae079b5b2517049519d521817b485ada /eigrpd/eigrp_packet.c
parentb42a4a099a105c0e12b30c27c820b27afbcf1871 (diff)
eigrpd: When writing packet don't crash in some cases
When we are writing a packet if we have gotten ourselves into a bad situation, note it and move on. Hopefully dumping enough information so that we can find the offending reason. Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
Diffstat (limited to 'eigrpd/eigrp_packet.c')
-rw-r--r--eigrpd/eigrp_packet.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/eigrpd/eigrp_packet.c b/eigrpd/eigrp_packet.c
index 83ff194729..5b54f81326 100644
--- a/eigrpd/eigrp_packet.c
+++ b/eigrpd/eigrp_packet.c
@@ -344,8 +344,18 @@ int eigrp_write(struct thread *thread)
/* Get one packet from queue. */
ep = eigrp_fifo_next(ei->obuf);
- assert(ep);
- assert(ep->length >= EIGRP_HEADER_LEN);
+ if (!ep) {
+ zlog_err("%s: Interface %s no packet on queue?",
+ __PRETTY_FUNCTION__, ei->ifp->name);
+ goto out;
+ }
+ if (ep->length < EIGRP_HEADER_LEN) {
+ zlog_err("%s: Packet just has a header?",
+ __PRETTY_FUNCTION__);
+ eigrp_header_dump((struct eigrp_header *)ep->s->data);
+ eigrp_packet_delete(ei);
+ goto out;
+ }
if (ep->dst.s_addr == htonl(EIGRP_MULTICAST_ADDRESS))
eigrp_if_ipmulticast(eigrp, ei->address, ei->ifp->ifindex);
@@ -442,6 +452,7 @@ int eigrp_write(struct thread *thread)
/* Now delete packet from queue. */
eigrp_packet_delete(ei);
+out:
if (eigrp_fifo_next(ei->obuf) == NULL) {
ei->on_write_q = 0;
list_delete_node(eigrp->oi_write_q, node);