From ad88c2c6c91b1a92f252cf48b54384cb6755dcd5 Mon Sep 17 00:00:00 2001 From: piso Date: Mon, 3 Mar 2008 22:32:01 +0000 Subject: When unloading kld, don't forget to flush the nat pointers. --- sys/netinet/ip_fw_nat.c | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'sys') diff --git a/sys/netinet/ip_fw_nat.c b/sys/netinet/ip_fw_nat.c index 488fd86..bac0d41 100644 --- a/sys/netinet/ip_fw_nat.c +++ b/sys/netinet/ip_fw_nat.c @@ -598,6 +598,7 @@ ipfw_nat_init(void) static void ipfw_nat_destroy(void) { + struct ip_fw *rule; struct cfg_nat *ptr, *ptr_temp; IPFW_WLOCK(&layer3_chain); @@ -608,6 +609,12 @@ ipfw_nat_destroy(void) free(ptr, M_IPFW); } EVENTHANDLER_DEREGISTER(ifaddr_event, ifaddr_event_tag); + /* flush all nat ptrs */ + for (rule = layer3_chain.rules; rule; rule = rule->next) { + ipfw_insn_nat *cmd = (ipfw_insn_nat *)ACTION_PTR(rule); + if (cmd->o.opcode == O_NAT) + cmd->nat = NULL; + } /* deregister ipfw_nat */ ipfw_nat_ptr = NULL; IPFW_WUNLOCK(&layer3_chain); -- cgit v1.1