Download raw body.
sysctl(2): unlock igmp_sysctl(), pfsync_sysctl() and rip6_sysctl()
Each of them is the only IGMPCTL_STATS, PFSYNCCTL_STATS and
RIPV6CTL_STATS per-CPU counters.
sysctl_rdstruct() has "newp != NULL" check within and also returns
EPERM, no need for redundant check in igmp_sysctl().
ok?
Index: sys/netinet/igmp.c
===================================================================
RCS file: /cvs/src/sys/netinet/igmp.c,v
diff -u -p -r1.84 igmp.c
--- sys/netinet/igmp.c 12 Aug 2024 11:25:27 -0000 1.84
+++ sys/netinet/igmp.c 16 Aug 2024 13:11:21 -0000
@@ -687,8 +687,6 @@ igmp_sysctl(int *name, u_int namelen, vo
switch (name[0]) {
case IGMPCTL_STATS:
- if (newp != NULL)
- return (EPERM);
return (igmp_sysctl_igmpstat(oldp, oldlenp, newp));
default:
return (EOPNOTSUPP);
Index: sys/netinet/in_proto.c
===================================================================
RCS file: /cvs/src/sys/netinet/in_proto.c,v
diff -u -p -r1.108 in_proto.c
--- sys/netinet/in_proto.c 16 Aug 2024 09:20:35 -0000 1.108
+++ sys/netinet/in_proto.c 16 Aug 2024 13:11:21 -0000
@@ -270,7 +270,7 @@ const struct protosw inetsw[] = {
.pr_type = SOCK_RAW,
.pr_domain = &inetdomain,
.pr_protocol = IPPROTO_IGMP,
- .pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
+ .pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
.pr_input = igmp_input,
.pr_ctloutput = rip_ctloutput,
.pr_usrreqs = &rip_usrreqs,
@@ -342,7 +342,7 @@ const struct protosw inetsw[] = {
.pr_type = SOCK_RAW,
.pr_domain = &inetdomain,
.pr_protocol = IPPROTO_PFSYNC,
- .pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET,
+ .pr_flags = PR_ATOMIC|PR_ADDR|PR_MPSOCKET|PR_MPSYSCTL,
.pr_input = pfsync_input4,
.pr_ctloutput = rip_ctloutput,
.pr_usrreqs = &rip_usrreqs,
Index: sys/netinet6/in6_proto.c
===================================================================
RCS file: /cvs/src/sys/netinet6/in6_proto.c,v
diff -u -p -r1.118 in6_proto.c
--- sys/netinet6/in6_proto.c 16 Aug 2024 09:20:35 -0000 1.118
+++ sys/netinet6/in6_proto.c 16 Aug 2024 13:11:21 -0000
@@ -158,7 +158,7 @@ const struct protosw inet6sw[] = {
.pr_type = SOCK_RAW,
.pr_domain = &inet6domain,
.pr_protocol = IPPROTO_RAW,
- .pr_flags = PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET,
+ .pr_flags = PR_ATOMIC|PR_ADDR|PR_MPINPUT|PR_MPSOCKET|PR_MPSYSCTL,
.pr_input = rip6_input,
.pr_ctlinput = rip6_ctlinput,
.pr_ctloutput = rip6_ctloutput,
sysctl(2): unlock igmp_sysctl(), pfsync_sysctl() and rip6_sysctl()