Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F175566783
D60535.id.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
828 B
Referenced Files
None
Subscribers
None
D60535.id.diff
View Options
diff --git a/sys/netpfil/pf/pf_if.c b/sys/netpfil/pf/pf_if.c
--- a/sys/netpfil/pf/pf_if.c
+++ b/sys/netpfil/pf/pf_if.c
@@ -448,6 +448,7 @@
void
pfi_kkif_purge(void)
{
+ LIST_HEAD(, pfi_kkif) freeq = LIST_HEAD_INITIALIZER(freeq);
struct pfi_kkif *kif, *kif1;
/*
@@ -458,11 +459,18 @@
LIST_FOREACH_SAFE(kif, &V_pfi_unlinked_kifs, pfik_list, kif1) {
if (!(kif->pfik_flags & PFI_IFLAG_REFS)) {
LIST_REMOVE(kif, pfik_list);
- pf_kkif_free(kif);
+ LIST_INSERT_HEAD(&freeq, kif, pfik_list);
} else
atomic_clear_int(&kif->pfik_flags, PFI_IFLAG_REFS);
}
mtx_unlock(&pfi_unlnkdkifs_mtx);
+
+ /*
+ * pf_kkif_free() may take the rules lock, which is held before
+ * pfi_unlnkdkifs_mtx in pfi_kkif_remove_if_unref().
+ */
+ LIST_FOREACH_SAFE(kif, &freeq, pfik_list, kif1)
+ pf_kkif_free(kif);
}
int
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Oct 12, 6:18 PM (3 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
40561144
Default Alt Text
D60535.id.diff (828 B)
Attached To
Mode
D60535: pf: Free unreferenced interfaces after dropping pfi_unlnkdkifs_mtx
Attached
Detach File
Event Timeline
Log In to Comment