FAILED: patch "[PATCH] net: openvswitch: Fix matching zone id for invalid conns" failed to apply to 5.15-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 635d448a1cce4b4ebee52b351052c70434fa90ea Mon Sep 17 00:00:00 2001
From: Paul Blakey <[email protected]>
Date: Tue, 14 Dec 2021 19:24:35 +0200
Subject: [PATCH] net: openvswitch: Fix matching zone id for invalid conns
arriving from tc
Zone id is not restored if we passed ct and ct rejected the connection, as there is no ct info on the skb.
Save the zone from tc skb cb to tc skb extension and pass it on to ovs, use that info to restore the zone id for invalid connections.
include/linux/skbuff.h +1 -0
@@ -286,6 +286,7 @@ struct nf_bridge_info {struct tc_skb_ext {__u32 chain;__u16 mru; +__u16 zone;bool post_ct; };#endif
net/openvswitch/flow.c +7 -1
@@ -34,6 +34,7 @@#include <net/mpls.h> #include <net/ndisc.h> #include <net/nsh.h> +#include <net/netfilter/nf_conntrack_zones.h> #include "conntrack.h" #include "datapath.h"
@@ -860,6 +861,7 @@ int ovs_flow_key_extract(const struct ip_tunnel_info *tun_info,#endif bool post_ct = false;int res, err; +u16 zone =0 ;/* Extract metadata from packet. */ if (tun_info) {
@@ -898,6 +900,7 @@ int ovs_flow_key_extract(const struct ip_tunnel_info *tun_info, key->recirc_id = tc_ext ? tc_ext->chain :0 ;OVS_CB (skb)->mru = tc_ext ? tc_ext->mru :0 ; post_ct = tc_ext ? tc_ext->post_ct : false; + zone = post_ct ? tc_ext->zone :0 ; }else { key->recirc_id =0 ; }
@@ -906,8 +909,11 @@ int ovs_flow_key_extract(const struct ip_tunnel_info *tun_info,#endif err =key_extract (skb, key); -if (!err) +if (!err) {ovs_ct_fill_key (skb, key, post_ct);/* Must be after key_extract(). */ +if (post_ct && !skb_get_nfct (skb)) + key->ct_zone = zone; + }return err; }
net/sched/cls_api.c +1 -0
@@ -1625,6 +1625,7 @@ int tcf_classify(struct sk_buff *skb, ext->chain = last_executed_chain; ext->mru = cb->mru; ext->post_ct = cb->post_ct; + ext->zone = cb->zone; }return ret;