• Guillaume Nault's avatar
    netfilter: ipv6: nf_defrag: fix leakage of unqueued fragments · a0d56cb9
    Guillaume Nault authored
    With commit 997dd964 ("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: 997dd964 ("net: IP6 defrag: use rbtrees in nf_conntrack_reasm.c")
    Signed-off-by: default avatarGuillaume Nault <gnault@redhat.com>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    a0d56cb9
nf_conntrack_reasm.c 13.2 KB