Skip to content
  • Kristof Provost's avatar
    pf: protect the rpool from races · 5f5e32f1
    Kristof Provost authored
    The roundrobin pool stores its state in the rule, which could
    potentially lead to invalid addresses being returned.
    
    For example, thread A just executed PF_AINC(&rpool->counter) and
    immediately afterwards thread B executes PF_ACPY(naddr, &rpool->counter)
    (i.e. after the pf_match_addr() check of rpool->counter).
    
    Lock the rpool with its own mutex to prevent these races. The
    performance impact of this is expected to be low, as each rule has its
    own lock, and the lock is also only relevant when state is being created
    (so only for the initial packets of a connection, not for all traffic).
    
    See also:	https://redmine.pfsense.org/issues/12660
    Reviewed by:	glebius
    MFC after:	3 weeks
    Sponsored by:	Rubicon Communications, LLC ("Netgate")
    Differential Revision:	https://reviews.freebsd.org/D33874
    5f5e32f1