aboutsummaryrefslogtreecommitdiff
path: root/sys/net/route/route_tables.c
diff options
context:
space:
mode:
authorAlexander V. Chernikov <melifaro@FreeBSD.org>2023-04-25 10:53:51 +0000
committerAlexander V. Chernikov <melifaro@FreeBSD.org>2023-04-25 10:53:51 +0000
commitfd1aa866eb22bcaa01dbedfbe7778c29c0c2fa25 (patch)
tree648ab3ad2b9aea0741a55afa5fe21cfca523e010 /sys/net/route/route_tables.c
parent6f96b5487f4359199ceb8339d2d7063e2249f538 (diff)
downloadsrc-fd1aa866eb22bcaa01dbedfbe7778c29c0c2fa25.tar.gz
src-fd1aa866eb22bcaa01dbedfbe7778c29c0c2fa25.zip
routing: add rt_tables_get_rnh_safe() that doesn't panic when af/fib is
incorrect. MFC after: 2 weeks
Diffstat (limited to 'sys/net/route/route_tables.c')
-rw-r--r--sys/net/route/route_tables.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/net/route/route_tables.c b/sys/net/route/route_tables.c
index be67556915d0..31696e847488 100644
--- a/sys/net/route/route_tables.c
+++ b/sys/net/route/route_tables.c
@@ -54,6 +54,7 @@ __FBSDID("$FreeBSD$");
#include <net/vnet.h>
#include <net/route.h>
+#include <net/route/route_ctl.h>
#include <net/route/route_var.h>
/* Kernel config default option. */
@@ -387,6 +388,16 @@ rt_tables_get_rnh(uint32_t table, sa_family_t family)
return (rt_tables_get_rnh_ptr(table, family));
}
+struct rib_head *
+rt_tables_get_rnh_safe(uint32_t table, sa_family_t family)
+{
+ if (__predict_false(table >= V_rt_numfibs))
+ return (NULL);
+ if (__predict_false(family >= (AF_MAX + 1)))
+ return (NULL);
+ return (rt_tables_get_rnh_ptr(table, family));
+}
+
u_int
rt_tables_get_gen(uint32_t table, sa_family_t family)
{