Message ID | 20201121034317.577081-1-xiyou.wangcong@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | [stable] netfilter: clear skb->next in NF_HOOK_LIST() | expand |
Context | Check | Description |
---|---|---|
netdev/tree_selection | success | Not a local patch |
Cong Wang <xiyou.wangcong@gmail.com> wrote: > From: Cong Wang <cong.wang@bytedance.com> > > NF_HOOK_LIST() uses list_del() to remove skb from the linked list, > however, it is not sufficient as skb->next still points to other > skb. We should just call skb_list_del_init() to clear skb->next, > like the rest places which using skb list. > > This has been fixed in upstream by commit ca58fbe06c54 > ("netfilter: add and use nf_hook_slow_list()"). Thanks Cong, agree with this change, afaics its applicable to 4.19.y and 5.4.y.
On Sat, Nov 21, 2020 at 11:22:49PM +0100, Florian Westphal wrote: >Cong Wang <xiyou.wangcong@gmail.com> wrote: >> From: Cong Wang <cong.wang@bytedance.com> >> >> NF_HOOK_LIST() uses list_del() to remove skb from the linked list, >> however, it is not sufficient as skb->next still points to other >> skb. We should just call skb_list_del_init() to clear skb->next, >> like the rest places which using skb list. >> >> This has been fixed in upstream by commit ca58fbe06c54 >> ("netfilter: add and use nf_hook_slow_list()"). > >Thanks Cong, agree with this change, afaics its applicable to 4.19.y and 5.4.y. Queued for 5.4 and 4.19, thanks!
On Sat, Nov 28, 2020 at 05:09:18PM +0800, 刘志旭 wrote: > I still didn't see this patch in stable queue yet. Since we've a working POC to panic the > system (see https://bugzilla.kernel.org/show_bug.cgi?id=209823), I think it's necessary > to merge this patch ASAP, thanks. Odd, I don't think Sasha pushed out his patch queue. I've applied this now, thanks. greg k-h
diff --git a/include/linux/netfilter.h b/include/linux/netfilter.h index 77ebb61faf48..4c0e6539effd 100644 --- a/include/linux/netfilter.h +++ b/include/linux/netfilter.h @@ -316,7 +316,7 @@ NF_HOOK_LIST(uint8_t pf, unsigned int hook, struct net *net, struct sock *sk, INIT_LIST_HEAD(&sublist); list_for_each_entry_safe(skb, next, head, list) { - list_del(&skb->list); + skb_list_del_init(skb); if (nf_hook(pf, hook, net, sk, skb, in, out, okfn) == 1) list_add_tail(&skb->list, &sublist); }