diff options
author | Guillaume Nault <gnault@redhat.com> | 2019-06-02 15:13:47 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2019-06-04 15:25:51 +0200 |
commit | a0d56cb911ca301de81735f1d73c2aab424654ba (patch) | |
tree | 8e3c9b1dee210ccf4c62fe7549f06e69693c8197 /net/ipv6/raw.c | |
parent | 5142967ab524eb8e5c1f6122e46e2df81bae178b (diff) | |
download | linux-a0d56cb911ca301de81735f1d73c2aab424654ba.tar.bz2 |
netfilter: ipv6: nf_defrag: fix leakage of unqueued fragments
With commit 997dd9647164 ("net: IP6 defrag: use rbtrees in
nf_conntrack_reasm.c"), nf_ct_frag6_reasm() is now called from
nf_ct_frag6_queue(). With this change, nf_ct_frag6_queue() can fail
after the skb has been added to the fragment queue and
nf_ct_frag6_gather() was adapted to handle this case.
But nf_ct_frag6_queue() can still fail before the fragment has been
queued. nf_ct_frag6_gather() can't handle this case anymore, because it
has no way to know if nf_ct_frag6_queue() queued the fragment before
failing. If it didn't, the skb is lost as the error code is overwritten
with -EINPROGRESS.
Fix this by setting -EINPROGRESS directly in nf_ct_frag6_queue(), so
that nf_ct_frag6_gather() can propagate the error as is.
Fixes: 997dd9647164 ("net: IP6 defrag: use rbtrees in nf_conntrack_reasm.c")
Signed-off-by: Guillaume Nault <gnault@redhat.com>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'net/ipv6/raw.c')
0 files changed, 0 insertions, 0 deletions