Commit 2af25a97 authored by Ondřej Zajíček's avatar Ondřej Zajíček
Browse files

Fixes a crash caused by missing error hook on BGP listening socket.

Error happened when too many BGP connections arrived in one moment
(ECONNABORTED).
parent fa5a99c7
...@@ -55,6 +55,8 @@ ...@@ -55,6 +55,8 @@
#undef LOCAL_DEBUG #undef LOCAL_DEBUG
#include <errno.h>
#include "nest/bird.h" #include "nest/bird.h"
#include "nest/iface.h" #include "nest/iface.h"
#include "nest/protocol.h" #include "nest/protocol.h"
...@@ -614,6 +616,15 @@ bgp_incoming_connection(sock *sk, int dummy UNUSED) ...@@ -614,6 +616,15 @@ bgp_incoming_connection(sock *sk, int dummy UNUSED)
return 0; return 0;
} }
static void
bgp_listen_sock_err(sock *sk, int err)
{
if (err == ECONNABORTED)
log(L_WARN "BGP: Incoming connection aborted");
else
log(L_ERR "BGP: Error on incoming socket: %M", err);
}
static sock * static sock *
bgp_setup_listen_sk(ip_addr addr, unsigned port, u32 flags) bgp_setup_listen_sk(ip_addr addr, unsigned port, u32 flags)
{ {
...@@ -627,9 +638,10 @@ bgp_setup_listen_sk(ip_addr addr, unsigned port, u32 flags) ...@@ -627,9 +638,10 @@ bgp_setup_listen_sk(ip_addr addr, unsigned port, u32 flags)
s->rbsize = BGP_RX_BUFFER_SIZE; s->rbsize = BGP_RX_BUFFER_SIZE;
s->tbsize = BGP_TX_BUFFER_SIZE; s->tbsize = BGP_TX_BUFFER_SIZE;
s->rx_hook = bgp_incoming_connection; s->rx_hook = bgp_incoming_connection;
s->err_hook = bgp_listen_sock_err;
if (sk_open(s)) if (sk_open(s))
{ {
log(L_ERR "Unable to open incoming BGP socket"); log(L_ERR "BGP: Unable to open incoming socket");
rfree(s); rfree(s);
return NULL; return NULL;
} }
......
...@@ -947,7 +947,6 @@ sk_passive_connected(sock *s, struct sockaddr *sa, int al, int type) ...@@ -947,7 +947,6 @@ sk_passive_connected(sock *s, struct sockaddr *sa, int al, int type)
} }
else if (errno != EINTR && errno != EAGAIN) else if (errno != EINTR && errno != EAGAIN)
{ {
log(L_ERR "accept: %m");
s->err_hook(s, errno); s->err_hook(s, errno);
} }
return 0; return 0;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment