const struct nf_conntrack_tuple *orig,
                                        u8 icmp_proto)
 {
-       key->ct.orig_proto = orig->dst.protonum;
+       key->ct_orig_proto = orig->dst.protonum;
        if (orig->dst.protonum == icmp_proto) {
                key->ct.orig_tp.src = htons(orig->dst.u.icmp.type);
                key->ct.orig_tp.dst = htons(orig->dst.u.icmp.code);
                                const struct nf_conntrack_zone *zone,
                                const struct nf_conn *ct)
 {
-       key->ct.state = state;
-       key->ct.zone = zone->id;
+       key->ct_state = state;
+       key->ct_zone = zone->id;
        key->ct.mark = ovs_ct_get_mark(ct);
        ovs_ct_get_labels(ct, &key->ct.labels);
 
                        return;
                }
        }
-       /* Clear 'ct.orig_proto' to mark the non-existence of conntrack
+       /* Clear 'ct_orig_proto' to mark the non-existence of conntrack
         * original direction key fields.
         */
-       key->ct.orig_proto = 0;
+       key->ct_orig_proto = 0;
 }
 
 /* Update 'key' based on skb->_nfct.  If 'post_ct' is true, then OVS has
                if (ct->master)
                        state |= OVS_CS_F_RELATED;
                if (keep_nat_flags) {
-                       state |= key->ct.state & OVS_CS_F_NAT_MASK;
+                       state |= key->ct_state & OVS_CS_F_NAT_MASK;
                } else {
                        if (ct->status & IPS_SRC_NAT)
                                state |= OVS_CS_F_SRC_NAT;
 int ovs_ct_put_key(const struct sw_flow_key *swkey,
                   const struct sw_flow_key *output, struct sk_buff *skb)
 {
-       if (nla_put_u32(skb, OVS_KEY_ATTR_CT_STATE, output->ct.state))
+       if (nla_put_u32(skb, OVS_KEY_ATTR_CT_STATE, output->ct_state))
                return -EMSGSIZE;
 
        if (IS_ENABLED(CONFIG_NF_CONNTRACK_ZONES) &&
-           nla_put_u16(skb, OVS_KEY_ATTR_CT_ZONE, output->ct.zone))
+           nla_put_u16(skb, OVS_KEY_ATTR_CT_ZONE, output->ct_zone))
                return -EMSGSIZE;
 
        if (IS_ENABLED(CONFIG_NF_CONNTRACK_MARK) &&
                    &output->ct.labels))
                return -EMSGSIZE;
 
-       if (swkey->ct.orig_proto) {
+       if (swkey->ct_orig_proto) {
                if (swkey->eth.type == htons(ETH_P_IP)) {
                        struct ovs_key_ct_tuple_ipv4 orig = {
                                output->ipv4.ct_orig.src,
                                output->ipv4.ct_orig.dst,
                                output->ct.orig_tp.src,
                                output->ct.orig_tp.dst,
-                               output->ct.orig_proto,
+                               output->ct_orig_proto,
                        };
                        if (nla_put(skb, OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4,
                                    sizeof(orig), &orig))
                                IN6_ADDR_INITIALIZER(output->ipv6.ct_orig.dst),
                                output->ct.orig_tp.src,
                                output->ct.orig_tp.dst,
-                               output->ct.orig_proto,
+                               output->ct_orig_proto,
                        };
                        if (nla_put(skb, OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6,
                                    sizeof(orig), &orig))
         * due to an upcall.  If the connection was not confirmed, it is not
         * cached and needs to be run through conntrack again.
         */
-       if (!ct && key->ct.state & OVS_CS_F_TRACKED &&
-           !(key->ct.state & OVS_CS_F_INVALID) &&
-           key->ct.zone == info->zone.id) {
+       if (!ct && key->ct_state & OVS_CS_F_TRACKED &&
+           !(key->ct_state & OVS_CS_F_INVALID) &&
+           key->ct_zone == info->zone.id) {
                ct = ovs_ct_find_existing(net, &info->zone, info->family, skb,
-                                         !!(key->ct.state
+                                         !!(key->ct_state
                                             & OVS_CS_F_NAT_MASK));
                if (ct)
                        nf_ct_get(skb, &ctinfo);
        if (maniptype == NF_NAT_MANIP_SRC) {
                __be16 src;
 
-               key->ct.state |= OVS_CS_F_SRC_NAT;
+               key->ct_state |= OVS_CS_F_SRC_NAT;
                if (key->eth.type == htons(ETH_P_IP))
                        key->ipv4.addr.src = ip_hdr(skb)->saddr;
                else if (key->eth.type == htons(ETH_P_IPV6))
        } else {
                __be16 dst;
 
-               key->ct.state |= OVS_CS_F_DST_NAT;
+               key->ct_state |= OVS_CS_F_DST_NAT;
                if (key->eth.type == htons(ETH_P_IP))
                        key->ipv4.addr.dst = ip_hdr(skb)->daddr;
                else if (key->eth.type == htons(ETH_P_IPV6))
                 * NAT after the nf_conntrack_in() call.  We can actually clear
                 * the whole state, as it will be re-initialized below.
                 */
-               key->ct.state = 0;
+               key->ct_state = 0;
 
                /* Update the key, but keep the NAT flags. */
                ovs_ct_update_key(skb, info, key, true, true);
                 *
                 * NAT will be done only if the CT action has NAT, and only
                 * once per packet (per zone), as guarded by the NAT bits in
-                * the key->ct.state.
+                * the key->ct_state.
                 */
-               if (info->nat && !(key->ct.state & OVS_CS_F_NAT_MASK) &&
+               if (info->nat && !(key->ct_state & OVS_CS_F_NAT_MASK) &&
                    (nf_ct_is_confirmed(ct) || info->commit) &&
                    ovs_ct_nat(net, key, info, skb, ct, ctinfo) != NF_ACCEPT) {
                        return -EINVAL;
 
                        return -EINVAL;
                }
 
-               SW_FLOW_KEY_PUT(match, ct.state, ct_state, is_mask);
+               SW_FLOW_KEY_PUT(match, ct_state, ct_state, is_mask);
                *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_STATE);
        }
        if (*attrs & (1 << OVS_KEY_ATTR_CT_ZONE) &&
            ovs_ct_verify(net, OVS_KEY_ATTR_CT_ZONE)) {
                u16 ct_zone = nla_get_u16(a[OVS_KEY_ATTR_CT_ZONE]);
 
-               SW_FLOW_KEY_PUT(match, ct.zone, ct_zone, is_mask);
+               SW_FLOW_KEY_PUT(match, ct_zone, ct_zone, is_mask);
                *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_ZONE);
        }
        if (*attrs & (1 << OVS_KEY_ATTR_CT_MARK) &&
                SW_FLOW_KEY_PUT(match, ipv4.ct_orig.dst, ct->ipv4_dst, is_mask);
                SW_FLOW_KEY_PUT(match, ct.orig_tp.src, ct->src_port, is_mask);
                SW_FLOW_KEY_PUT(match, ct.orig_tp.dst, ct->dst_port, is_mask);
-               SW_FLOW_KEY_PUT(match, ct.orig_proto, ct->ipv4_proto, is_mask);
+               SW_FLOW_KEY_PUT(match, ct_orig_proto, ct->ipv4_proto, is_mask);
                *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV4);
        }
        if (*attrs & (1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6)) {
                                   is_mask);
                SW_FLOW_KEY_PUT(match, ct.orig_tp.src, ct->src_port, is_mask);
                SW_FLOW_KEY_PUT(match, ct.orig_tp.dst, ct->dst_port, is_mask);
-               SW_FLOW_KEY_PUT(match, ct.orig_proto, ct->ipv6_proto, is_mask);
+               SW_FLOW_KEY_PUT(match, ct_orig_proto, ct->ipv6_proto, is_mask);
                *attrs &= ~(1ULL << OVS_KEY_ATTR_CT_ORIG_TUPLE_IPV6);
        }
 
        memset(&match, 0, sizeof(match));
        match.key = key;
 
+       key->ct_state = 0;
+       key->ct_zone = 0;
+       key->ct_orig_proto = 0;
        memset(&key->ct, 0, sizeof(key->ct));
        memset(&key->ipv4.ct_orig, 0, sizeof(key->ipv4.ct_orig));
        memset(&key->ipv6.ct_orig, 0, sizeof(key->ipv6.ct_orig));