Mark Patruck reported the following assertion:
 
        splassert: pool_put: want 5 have 7
        Starting stack trace...
        pool_put() at pool_put+0x4e
        pf_pkt_unlink_state_key() at pf_pkt_unlink_state_key+0x15
        m_free() at m_free+0xa0
        m_freem() at m_freem+0x19
        vmxnet3_txintr() at vmxnet3_txintr+0x9c
        vmxnet3_intr() at vmxnet3_intr+0x70
        intr_handler() at intr_handler+0x28
        Xintr_ioapic_level7() at Xintr_ioapic_level7+0xcd
        --- interrupt ---
        acpicpu_idle() at acpicpu_idle+0xcb
        cpu_idle_cycle() at cpu_idle_cycle+0x10
        end trace frame: 0x0, count: 247
        End of stack trace.

Since state keys can be pool_put(9)'d in interrupt handlers the correct
IPL should be IPL_NET.

ok?

Index: net/pf_ioctl.c
===================================================================
RCS file: /cvs/src/sys/net/pf_ioctl.c,v
retrieving revision 1.305
diff -u -p -r1.305 pf_ioctl.c
--- net/pf_ioctl.c      16 Nov 2016 08:46:05 -0000      1.305
+++ net/pf_ioctl.c      11 Jan 2017 17:24:26 -0000
@@ -155,7 +155,7 @@ pfattach(int num)
        pool_init(&pf_state_pl, sizeof(struct pf_state), 0,
            IPL_SOFTNET, 0, "pfstate", NULL);
        pool_init(&pf_state_key_pl, sizeof(struct pf_state_key), 0,
-           IPL_SOFTNET, 0, "pfstkey", NULL);
+           IPL_NET, 0, "pfstkey", NULL);
        pool_init(&pf_state_item_pl, sizeof(struct pf_state_item), 0,
            IPL_SOFTNET, 0, "pfstitem", NULL);
        pool_init(&pf_rule_item_pl, sizeof(struct pf_rule_item), 0,

Reply via email to