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