git: 34e155336f0d - main - pfctl: pfctl_get_astats() doesn't set errno

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Tue, 16 Jun 2026 20:20:02 UTC
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=34e155336f0dd10efa8261b971fd540d92817339

commit 34e155336f0dd10efa8261b971fd540d92817339
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2026-06-16 19:37:35 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2026-06-16 20:19:44 +0000

    pfctl: pfctl_get_astats() doesn't set errno
    
    After commit 08f54dfca197 pfctl_get_astats() doesn't set errno anymore,
    except in one place.  Fix up that one place and adjust callers
    appropriately.
    
    Reviewed by:    kp
    Fixes:          08f54dfca197 ("pf: convert DIOCRGETASTATS to netlink")
    Differential Revision:  https://reviews.freebsd.org/D57608
---
 lib/libpfctl/libpfctl.c                   | 6 ++----
 sbin/pfctl/pfctl_radix.c                  | 9 ++++++++-
 usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c | 6 +++---
 3 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/lib/libpfctl/libpfctl.c b/lib/libpfctl/libpfctl.c
index 839693269102..50d85a7869c9 100644
--- a/lib/libpfctl/libpfctl.c
+++ b/lib/libpfctl/libpfctl.c
@@ -3877,10 +3877,8 @@ pfctl_get_astats(struct pfctl_handle *h, const struct pfr_table *tbl,
 	uint32_t seq_id;
 
 	if (tbl == NULL || size == NULL || *size < 0 ||
-	    (*size && as == NULL)) {
-		errno = EINVAL;
-		return (-1);
-	}
+	    (*size && as == NULL))
+		return (EINVAL);
 
 	snl_init_writer(&h->ss, &nw);
 	hdr = snl_create_genl_msg_request(&nw, h->family_id,
diff --git a/sbin/pfctl/pfctl_radix.c b/sbin/pfctl/pfctl_radix.c
index 608c22141ae8..db6153941cca 100644
--- a/sbin/pfctl/pfctl_radix.c
+++ b/sbin/pfctl/pfctl_radix.c
@@ -194,7 +194,14 @@ int
 pfr_get_astats(struct pfr_table *tbl, struct pfr_astats *addr, int *size,
     int flags)
 {
-	return (pfctl_get_astats(pfh, tbl, addr, size, flags));
+	int ret;
+
+	ret = pfctl_get_astats(pfh, tbl, addr, size, flags);
+	if (ret) {
+		errno = ret;
+		return (-1);
+	}
+	return (0);
 }
 
 int
diff --git a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
index f01218bee5f8..8221bbac812f 100644
--- a/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
+++ b/usr.sbin/bsnmpd/modules/snmp_pf/pf_snmp.c
@@ -1355,7 +1355,7 @@ pfa_table_addrs(u_int sidx, struct pfr_table *pt)
 	struct pfr_table tbl = { 0 };
 	struct pfr_astats *t = NULL;
 	struct pfa_entry *e;
-	int i, numaddrs = 1, outnum;
+	int error, i, numaddrs = 1, outnum;
 
 	if (pt == NULL)
 		return (-1);
@@ -1373,9 +1373,9 @@ pfa_table_addrs(u_int sidx, struct pfr_table *pt)
 		}
 
 		outnum = numaddrs;
-		if (pfctl_get_astats(pfh, &tbl, t, &outnum, 0) != 0) {
+		if ((error = pfctl_get_astats(pfh, &tbl, t, &outnum, 0)) != 0) {
 			syslog(LOG_ERR, "pfa_table_addrs(): ioctl() on %s: %s",
-			    pt->pfrt_name, strerror(errno));
+			    pt->pfrt_name, strerror(error));
 			numaddrs = -1;
 			break;
 		}