Page MenuHomeFreeBSD

pf: fix udp_mapping cleanup
ClosedPublic

Authored by kp on Nov 13 2025, 3:23 PM.
Tags
None
Referenced Files
F176037539: D53737.id166366.diff
Thu, Oct 15, 1:03 PM
F175956774: D53737.diff
Wed, Oct 14, 6:52 PM
Unknown Object (File)
Mon, Oct 12, 2:56 AM
Unknown Object (File)
Sat, Oct 10, 1:06 AM
Unknown Object (File)
Fri, Oct 9, 12:10 AM
Unknown Object (File)
Wed, Oct 7, 1:58 PM
Unknown Object (File)
Tue, Sep 29, 7:27 PM
Unknown Object (File)
Mon, Sep 28, 8:43 AM

Details

Summary

If we fail to obtain a new source port (pf_get_sport()) while we've
created a udp_mapping (for 'endpoint independent nat') we must free the
udp_mapping in pf_get_sport(). Otherwise the calling function will call
pf_udp_mapping_release(). This will then attempt to remove the udp_mapping from
a list it's not in, and crash.

Actually free the udp_mapping in all failure cases. While here sprinkle in a few
more assertions to ensure we don't forget leak udp_mappings and add a test case
to provoke this problem.

MFC after: 1 week
See also: https://redmine.pfsense.org/issues/16517
Sponsored by: Rubicon Communications, LLC ("Netgate")

Diff Detail

Repository
rG FreeBSD src repository
Lint
Lint Not Applicable
Unit
Tests Not Applicable