git: cbea6b60da00 - stable/13 - pflog: Correctly check if bpf peers are present

From: Zhenlei Huang <zlei_at_FreeBSD.org>
Date: Mon, 17 Jun 2024 04:28:02 UTC
The branch stable/13 has been updated by zlei:

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

commit cbea6b60da007bff698e508a10dd632c80c22b22
Author:     Zhenlei Huang <zlei@FreeBSD.org>
AuthorDate: 2024-06-09 01:05:22 +0000
Commit:     Zhenlei Huang <zlei@FreeBSD.org>
CommitDate: 2024-06-17 04:10:35 +0000

    pflog: Correctly check if bpf peers are present
    
    On creating the pflog(4) interface, pflog_clone_create() does an
    unconditional bpfattach(). Use bpf_peers_present() which was introduced
    in commit 16d878cc99ef [1] to check the presence of bpf peers.
    
    This will save a little CPU cycles when no bpf peers present. There
    should be no functional change.
    
    1. 16d878cc99ef Fix the following bpf(4) race condition which can result in a panic
    
    Reviewed by:    kp
    MFC after:      1 week
    Differential Revision:  https://reviews.freebsd.org/D45532
    
    (cherry picked from commit ebc2bab04823c24c524f913457d6b88dc7ea9fac)
    (cherry picked from commit 954e548b7e88b7490aa5b23d16df7972c407bef1)
---
 sys/netpfil/pf/if_pflog.c | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/sys/netpfil/pf/if_pflog.c b/sys/netpfil/pf/if_pflog.c
index 0f9c18654077..541625709494 100644
--- a/sys/netpfil/pf/if_pflog.c
+++ b/sys/netpfil/pf/if_pflog.c
@@ -207,9 +207,10 @@ pflog_packet(struct pfi_kkif *kif, struct mbuf *m, sa_family_t af, u_int8_t dir,
 	struct pfloghdr hdr;
 
 	if (kif == NULL || m == NULL || rm == NULL || pd == NULL)
-		return ( 1);
+		return (1);
 
-	if ((ifn = V_pflogifs[rm->logif]) == NULL || !ifn->if_bpf)
+	ifn = V_pflogifs[rm->logif];
+	if (ifn == NULL || !bpf_peers_present(ifn->if_bpf))
 		return (0);
 
 	bzero(&hdr, sizeof(hdr));
@@ -258,7 +259,7 @@ pflog_packet(struct pfi_kkif *kif, struct mbuf *m, sa_family_t af, u_int8_t dir,
 
 	if_inc_counter(ifn, IFCOUNTER_OPACKETS, 1);
 	if_inc_counter(ifn, IFCOUNTER_OBYTES, m->m_pkthdr.len);
-	BPF_MTAP2(ifn, &hdr, PFLOG_HDRLEN, m);
+	bpf_mtap2(ifn->if_bpf, &hdr, PFLOG_HDRLEN, m);
 
 	return (0);
 }