NAK/cmnt: [SRU][F:linux-bluefield][PATCH V1 1/3] net: openvswitch: Be liberal in tcp conntrack.

Kleber Souza kleber.souza at canonical.com
Fri Feb 18 15:39:18 UTC 2022


Hi Bodong,

On 11.02.22 16:52, Bodong Wang wrote:
> From: Numan Siddique <nusiddiq at redhat.com>
> 
> BugLink: https://bugs.launchpad.net/bugs/1960575
> 
> There is no easy way to distinguish if a conntracked tcp packet is
> marked invalid because of tcp_in_window() check error or because
> it doesn't belong to an existing connection. With this patch,
> openvswitch sets liberal tcp flag for the established sessions so
> that out of window packets are not marked invalid.
> 
> A helper function - nf_ct_set_tcp_be_liberal(nf_conn) is added which
> sets this flag for both the directions of the nf_conn.
> 
> Suggested-by: Florian Westphal <fw at strlen.de>
> Signed-off-by: Numan Siddique <nusiddiq at redhat.com>
> Acked-by: Florian Westphal <fw at strlen.de>
> Link: https://lore.kernel.org/r/20201116130126.3065077-1-nusiddiq@redhat.com
> Signed-off-by: Jakub Kicinski <kuba at kernel.org>
> Signed-off-by: Paul Blakey <paulb at nvidia.com>
> (cherry picked from commit e2ef5203c817a60bfb591343ffd851b6537370ff)

These patches are not matching the mainline provenance block. For this patch,
the original provenance is:

Suggested-by: Florian Westphal <fw at strlen.de>

Signed-off-by: Numan Siddique <nusiddiq at redhat.com>

Acked-by: Florian Westphal <fw at strlen.de>

Link: https://lore.kernel.org/r/20201116130126.3065077-1-nusiddiq@redhat.com

Signed-off-by: Jakub Kicinski <kuba at kernel.org>


The other two patches of this set seem to be missing the Signed-off-by of the
upstream maintainer.

When taking a patch from upstream/mainline the original block should be kept,
only adding additional information below it.

Could you please re-submit these patches with the block fixed?


Thank you,
Kleber

> Signed-off-by: Bodong Wang <bodong at nvidia.com>
> ---
>   include/net/netfilter/nf_conntrack_l4proto.h | 14 ++++++++++++++
>   net/netfilter/nf_conntrack_proto_tcp.c       |  6 ------
>   net/openvswitch/conntrack.c                  |  8 ++++++++
>   3 files changed, 22 insertions(+), 6 deletions(-)
> 
> diff --git a/include/net/netfilter/nf_conntrack_l4proto.h b/include/net/netfilter/nf_conntrack_l4proto.h
> index 4cad1f0..dc9bba6 100644
> --- a/include/net/netfilter/nf_conntrack_l4proto.h
> +++ b/include/net/netfilter/nf_conntrack_l4proto.h
> @@ -201,6 +201,20 @@ static inline struct nf_icmp_net *nf_icmpv6_pernet(struct net *net)
>   {
>   	return &net->ct.nf_ct_proto.icmpv6;
>   }
> +
> +/* Caller must check nf_ct_protonum(ct) is IPPROTO_TCP before calling. */
> +static inline void nf_ct_set_tcp_be_liberal(struct nf_conn *ct)
> +{
> +	ct->proto.tcp.seen[0].flags |= IP_CT_TCP_FLAG_BE_LIBERAL;
> +	ct->proto.tcp.seen[1].flags |= IP_CT_TCP_FLAG_BE_LIBERAL;
> +}
> +
> +/* Caller must check nf_ct_protonum(ct) is IPPROTO_TCP before calling. */
> +static inline bool nf_conntrack_tcp_established(const struct nf_conn *ct)
> +{
> +	return ct->proto.tcp.state == TCP_CONNTRACK_ESTABLISHED &&
> +	       test_bit(IPS_ASSURED_BIT, &ct->status);
> +}
>   #endif
>   
>   #ifdef CONFIG_NF_CT_PROTO_DCCP
> diff --git a/net/netfilter/nf_conntrack_proto_tcp.c b/net/netfilter/nf_conntrack_proto_tcp.c
> index dc0fe06..d8e554c 100644
> --- a/net/netfilter/nf_conntrack_proto_tcp.c
> +++ b/net/netfilter/nf_conntrack_proto_tcp.c
> @@ -834,12 +834,6 @@ static noinline bool tcp_new(struct nf_conn *ct, const struct sk_buff *skb,
>   	return true;
>   }
>   
> -static bool nf_conntrack_tcp_established(const struct nf_conn *ct)
> -{
> -	return ct->proto.tcp.state == TCP_CONNTRACK_ESTABLISHED &&
> -	       test_bit(IPS_ASSURED_BIT, &ct->status);
> -}
> -
>   /* Returns verdict for packet, or -1 for invalid. */
>   int nf_conntrack_tcp_packet(struct nf_conn *ct,
>   			    struct sk_buff *skb,
> diff --git a/net/openvswitch/conntrack.c b/net/openvswitch/conntrack.c
> index 45e9a59..4a08ebf 100644
> --- a/net/openvswitch/conntrack.c
> +++ b/net/openvswitch/conntrack.c
> @@ -1034,6 +1034,14 @@ static int __ovs_ct_lookup(struct net *net, struct sw_flow_key *key,
>   		    ovs_ct_helper(skb, info->family) != NF_ACCEPT) {
>   			return -EINVAL;
>   		}
> +
> +		if (nf_ct_protonum(ct) == IPPROTO_TCP &&
> +		    nf_ct_is_confirmed(ct) && nf_conntrack_tcp_established(ct)) {
> +			/* Be liberal for tcp packets so that out-of-window
> +			 * packets are not marked invalid.
> +			 */
> +			nf_ct_set_tcp_be_liberal(ct);
> +		}
>   	}
>   
>   	return 0;




More information about the kernel-team mailing list