diff options
author | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2023-04-25 10:53:51 +0000 |
---|---|---|
committer | Alexander V. Chernikov <melifaro@FreeBSD.org> | 2023-04-25 10:53:51 +0000 |
commit | fd1aa866eb22bcaa01dbedfbe7778c29c0c2fa25 (patch) | |
tree | 648ab3ad2b9aea0741a55afa5fe21cfca523e010 /sys/net/route/route_tables.c | |
parent | 6f96b5487f4359199ceb8339d2d7063e2249f538 (diff) | |
download | src-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.c | 11 |
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) { |