aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/linux-cp
diff options
context:
space:
mode:
authorMatthew Smith <mgsmith@netgate.com>2022-08-19 19:54:40 +0000
committerNeale Ranns <neale@graphiant.com>2022-08-23 22:12:58 +0000
commit9cd37fb28ce03b22a741e2be31250790b11182e0 (patch)
treeb21a1ab08c8a44f0206291a145ada6288d096017 /src/plugins/linux-cp
parent1a1c59d1a20ce834ee2296e9b12321410bbabac9 (diff)
linux-cp: handle AF_BRIDGE neighbors
Type: improvement VPP crashes when a linux-cp tap is added to a bridge on the host system because rtnl_neigh_get_dst() returns NULL for the neighbor message that is sent by the kernel. Check for NULL before trying to use the address from a neighbor in a netlink message. Signed-off-by: Matthew Smith <mgsmith@netgate.com> Change-Id: I8a683d815a09620df9c0cc76e18df39828428e2c Signed-off-by: Matthew Smith <mgsmith@netgate.com>
Diffstat (limited to 'src/plugins/linux-cp')
-rw-r--r--src/plugins/linux-cp/lcp_router.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/plugins/linux-cp/lcp_router.c b/src/plugins/linux-cp/lcp_router.c
index acf0a034be0..04a6ba05a89 100644
--- a/src/plugins/linux-cp/lcp_router.c
+++ b/src/plugins/linux-cp/lcp_router.c
@@ -710,8 +710,11 @@ lcp_router_neigh_del (struct rtnl_neigh *rn)
{
ip_address_t nh;
int rv;
+ struct nl_addr *rna;
- lcp_router_mk_addr (rtnl_neigh_get_dst (rn), &nh);
+ if ((rna = rtnl_neigh_get_dst (rn)) == NULL)
+ return;
+ lcp_router_mk_addr (rna, &nh);
if (ip46_address_is_multicast (&ip_addr_46 (&nh)))
{
@@ -759,8 +762,11 @@ lcp_router_neigh_add (struct rtnl_neigh *rn)
struct nl_addr *ll;
ip_address_t nh;
int state;
+ struct nl_addr *rna;
- lcp_router_mk_addr (rtnl_neigh_get_dst (rn), &nh);
+ if ((rna = rtnl_neigh_get_dst (rn)) == NULL)
+ return;
+ lcp_router_mk_addr (rna, &nh);
if (ip46_address_is_multicast (&ip_addr_46 (&nh)))
{