aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCy Schubert <cy@FreeBSD.org>2026-02-11 19:30:38 +0000
committerCy Schubert <cy@FreeBSD.org>2026-02-17 02:21:59 +0000
commit3fdbd8a07a2dcb8fe3cec19fc59ef064453e4755 (patch)
tree52260c8b9ebc11e73750da249a1e10b2cc3f2ccd
parentfba81b33aabff74ad03d5f9f9663c176cf060fa6 (diff)
ipfilter: Avoid negative array indicies
Array indices must always be posive. We avoid this by making each index unsigned. This mitigates out-of-bounds reads and writes. Reported by: Ilja Van Sprundel <ivansprundel@ioactive.com> Reviewed by: glebius MFC after: 3 days Differential revision: https://reviews.freebsd.org/D55260
-rw-r--r--sys/netpfil/ipfilter/netinet/fil.c4
-rw-r--r--sys/netpfil/ipfilter/netinet/ip_fil.h2
-rw-r--r--sys/netpfil/ipfilter/netinet/ip_state.c2
3 files changed, 4 insertions, 4 deletions
diff --git a/sys/netpfil/ipfilter/netinet/fil.c b/sys/netpfil/ipfilter/netinet/fil.c
index 657097ca7b85..9217572aac50 100644
--- a/sys/netpfil/ipfilter/netinet/fil.c
+++ b/sys/netpfil/ipfilter/netinet/fil.c
@@ -8530,7 +8530,7 @@ ipf_matcharray_load(ipf_main_softc_t *softc, caddr_t data, ipfobj_t *objp,
int
ipf_matcharray_verify(int *array, int arraysize)
{
- int i, nelem, maxidx;
+ u_int i, nelem, maxidx;
ipfexp_t *e;
nelem = arraysize / sizeof(*array);
@@ -8591,7 +8591,7 @@ ipf_matcharray_verify(int *array, int arraysize)
static int
ipf_fr_matcharray(fr_info_t *fin, int *array)
{
- int i, n, *x, rv, p;
+ u_int i, n, *x, rv, p;
ipfexp_t *e;
rv = 0;
diff --git a/sys/netpfil/ipfilter/netinet/ip_fil.h b/sys/netpfil/ipfilter/netinet/ip_fil.h
index 81ad50373fe9..dbfc045a8646 100644
--- a/sys/netpfil/ipfilter/netinet/ip_fil.h
+++ b/sys/netpfil/ipfilter/netinet/ip_fil.h
@@ -1473,7 +1473,7 @@ typedef struct ipfexp {
int ipfe_cmd;
int ipfe_not;
int ipfe_narg;
- int ipfe_size;
+ u_int ipfe_size;
int ipfe_arg0[1];
} ipfexp_t;
diff --git a/sys/netpfil/ipfilter/netinet/ip_state.c b/sys/netpfil/ipfilter/netinet/ip_state.c
index 8a21e7593995..c8d6e4e0feb3 100644
--- a/sys/netpfil/ipfilter/netinet/ip_state.c
+++ b/sys/netpfil/ipfilter/netinet/ip_state.c
@@ -4910,7 +4910,7 @@ ipf_state_matchflush(ipf_main_softc_t *softc, caddr_t data)
static int
ipf_state_matcharray(ipstate_t *state, int *array, u_long ticks)
{
- int i, n, *x, rv, p;
+ u_int i, n, *x, rv, p;
ipfexp_t *e;
rv = 0;