Mildly different in flavor due to the special check. OK?

Tested:
% sysctl | grep bpf
net.bpf.bufsize=32768
net.bpf.maxbufsize=2097152
% doas sysctl -w net.bpf.bufsize=32768
net.bpf.bufsize: 32768 -> 32768
% doas sysctl -w net.bpf.bufsize=32767
net.bpf.bufsize: 32768 -> 32767
% doas sysctl -w net.bpf.bufsize=32
net.bpf.bufsize: 32767 -> 32
% doas sysctl -w net.bpf.bufsize=31
sysctl: net.bpf.bufsize: Invalid argument
% doas sysctl -w net.bpf.bufsize=2097152
net.bpf.bufsize: 32 -> 2097152
% doas sysctl -w net.bpf.bufsize=2097153
sysctl: net.bpf.bufsize: Invalid argument
% doas sysctl -w net.bpf.bufsize=32768
net.bpf.bufsize: 2097152 -> 32768
% doas sysctl -w net.bpf.maxbufsize=100
net.bpf.maxbufsize: 2097152 -> 100
% doas sysctl -w net.bpf.bufsize=90
net.bpf.bufsize: 32768 -> 90
% doas sysctl -w net.bpf.bufsize=101
sysctl: net.bpf.bufsize: Invalid argument
% sysctl | grep bpf
net.bpf.bufsize=90
net.bpf.maxbufsize=100
% doas sysctl -w net.bpf.maxbufsize=2097152
net.bpf.maxbufsize: 100 -> 2097152
% doas sysctl -w net.bpf.bufsize=32768
net.bpf.bufsize: 90 -> 32768

>From 8e7e3c4b19cc52ffff7bfe4a643c816fe971a284 Mon Sep 17 00:00:00 2001
From: Greg Steuck <g...@nest.cx>
Date: Sun, 1 Nov 2020 19:06:46 -0800
Subject: [PATCH 2/3] Use bpf_sysctl for sysctl_int_bounded

Unlike the other cases of sysctl_bounded_arr this one uses a dynamic limit.
---
 sys/net/bpf.c | 24 ++++--------------------
 1 file changed, 4 insertions(+), 20 deletions(-)

diff --git sys/net/bpf.c sys/net/bpf.c
index 0d900b38e3c..efb1d4b2a17 100644
--- sys/net/bpf.c
+++ sys/net/bpf.c
@@ -1720,32 +1720,16 @@ int
 bpf_sysctl_locked(int *name, u_int namelen, void *oldp, size_t *oldlenp,
     void *newp, size_t newlen)
 {
-       int newval;
-       int error;
-
        switch (name[0]) {
        case NET_BPF_BUFSIZE:
-               newval = bpf_bufsize;
-               error = sysctl_int(oldp, oldlenp, newp, newlen, &newval);
-               if (error)
-                       return (error);
-               if (newval < BPF_MINBUFSIZE || newval > bpf_maxbufsize)
-                       return (EINVAL);
-               bpf_bufsize = newval;
-               break;
+               return sysctl_int_bounded(oldp, oldlenp, newp, newlen,
+                   &bpf_bufsize, BPF_MINBUFSIZE, bpf_maxbufsize);
        case NET_BPF_MAXBUFSIZE:
-               newval = bpf_maxbufsize;
-               error = sysctl_int(oldp, oldlenp, newp, newlen, &newval);
-               if (error)
-                       return (error);
-               if (newval < BPF_MINBUFSIZE)
-                       return (EINVAL);
-               bpf_maxbufsize = newval;
-               break;
+               return sysctl_int_bounded(oldp, oldlenp, newp, newlen,
+                   &bpf_maxbufsize, BPF_MINBUFSIZE, INT_MAX);
        default:
                return (EOPNOTSUPP);
        }
-       return (0);
 }
 
 int
-- 
2.29.1

Reply via email to