• Jarno Rajahalme's avatar
    openvswitch: Delete conntrack entry clashing with an expectation. · cf5d7091
    Jarno Rajahalme authored
    Conntrack helpers do not check for a potentially clashing conntrack
    entry when creating a new expectation.  Also, nf_conntrack_in() will
    check expectations (via init_conntrack()) only if a conntrack entry
    can not be found.  The expectation for a packet which also matches an
    existing conntrack entry will not be removed by conntrack, and is
    currently handled inconsistently by OVS, as OVS expects the
    expectation to be removed when the connection tracking entry matching
    that expectation is confirmed.
    
    It should be noted that normally an IP stack would not allow reuse of
    a 5-tuple of an old (possibly lingering) connection for a new data
    connection, so this is somewhat unlikely corner case.  However, it is
    possible that a misbehaving source could cause conntrack entries be
    created that could then interfere with new related connections.
    
    Fix this in the OVS module by deleting the clashing conntrack entry
    after an expectation has been matched.  This causes the following
    nf_conntrack_in() call also find the expectation and remove it when
    creating the new conntrack entry, as well as the forthcoming reply
    direction packets to match the new related connection instead of the
    old clashing conntrack entry.
    
    Fixes: 7f8a436e ("openvswitch: Add conntrack action")
    Reported-by: default avatarYang Song <yangsong@vmware.com>
    Signed-off-by: default avatarJarno Rajahalme <jarno@ovn.org>
    Acked-by: default avatarJoe Stringer <joe@ovn.org>
    Signed-off-by: default avatarPablo Neira Ayuso <pablo@netfilter.org>
    cf5d7091
conntrack.c 42.2 KB