Page MenuHomeFreeBSD

pfil: PFIL_PASS never frees the mbuf
ClosedPublic

Authored by kp on Jan 26 2024, 2:45 PM.
Tags
None
Referenced Files
F115509491: D43617.diff
Thu, Apr 24, 3:39 PM
Unknown Object (File)
Sat, Apr 19, 9:45 PM
Unknown Object (File)
Fri, Mar 28, 7:09 AM
Unknown Object (File)
Mar 25 2025, 12:18 PM
Unknown Object (File)
Mar 3 2025, 4:56 AM
Unknown Object (File)
Mar 3 2025, 3:36 AM
Unknown Object (File)
Mar 3 2025, 3:07 AM
Unknown Object (File)
Mar 2 2025, 9:14 PM

Details

Summary

pfil hooks (i.e. firewalls) may pass, modify or free the mbuf passed
to them. (E.g. when rejecting a packet, or when gathering up packets
for reassembly).

If the hook returns PFIL_PASS the mbuf must still be present. Assert
this in pfil_mem_common() and ensure that ipfilter follows this
convention. pf and ipfw already did.
Similarly, if the hook returns PFIL_DROPPED or PFIL_CONSUMED the mbuf
must have been freed (or now be owned by the firewall for further
processing, like packet scheduling or reassembly).

This allows us to remove a few extraneous NULL checks.

Suggested by: tuexen
Sponsored by: Rubicon Communications, LLC ("Netgate")

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Passed
Unit
No Test Coverage
Build Status
Buildable 55641
Build 52530: arc lint + arc unit