diff --git a/net/unix/garbage.c b/net/unix/garbage.c index 3e4b986de94b..51acf795f096 100644 --- a/net/unix/garbage.c +++ b/net/unix/garbage.c @@ -340,10 +340,11 @@ static void __unix_gc(struct work_struct *work) __skb_queue_purge(&hitlist); #if IS_ENABLED(CONFIG_AF_UNIX_OOB) - list_for_each_entry_safe(u, next, &gc_candidates, link) { - struct sk_buff *skb = u->oob_skb; + while (!list_empty(&gc_candidates)) { + u = list_entry(gc_candidates.next, struct unix_sock, link); + if (u->oob_skb) { + struct sk_buff *skb = u->oob_skb; - if (skb) { u->oob_skb = NULL; kfree_skb(skb); }