HomeFreeBSD

Properly drain callouts in the IPFW subsystem to avoid use after free

Description

Properly drain callouts in the IPFW subsystem to avoid use after free
panics when unloading the dummynet and IPFW modules:

  • The callout drain function can sleep and should not be called having

a non-sleepable lock locked. Remove locks around "ipfw_dyn_uninit(0)".

  • Add a new "dn_gone" variable to prevent asynchronous restart of

dummynet callouts when unloading the dummynet kernel module.

  • Call "dn_reschedule()" locked so that "dn_gone" can be set and

checked atomically with regard to starting a new callout.

Reviewed by: hiren
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D3855

Details

Provenance
hselaskyAuthored on
Reviewer
hiren
Differential Revision
D3855: Properly drain callouts in the IPFW subsystem
Parents
rS292253: Fix a typo (opencrypto -> crypto) and remove useless comment.
Branches
Unknown
Tags
Unknown