const struct nf_nat_range2 *range,
                              enum nf_nat_manip_type maniptype, struct sw_flow_key *key)
 {
-       int hooknum, nh_off, err = NF_ACCEPT;
-
-       nh_off = skb_network_offset(skb);
-       skb_pull_rcsum(skb, nh_off);
+       int hooknum, err = NF_ACCEPT;
 
        /* See HOOK2MANIP(). */
        if (maniptype == NF_NAT_MANIP_SRC)
                        if (!nf_nat_icmp_reply_translation(skb, ct, ctinfo,
                                                           hooknum))
                                err = NF_DROP;
-                       goto push;
+                       goto out;
                } else if (IS_ENABLED(CONFIG_IPV6) &&
                           skb->protocol == htons(ETH_P_IPV6)) {
                        __be16 frag_off;
                                                                     hooknum,
                                                                     hdrlen))
                                        err = NF_DROP;
-                               goto push;
+                               goto out;
                        }
                }
                /* Non-ICMP, fall thru to initialize if needed. */
                                ? nf_nat_setup_info(ct, range, maniptype)
                                : nf_nat_alloc_null_binding(ct, hooknum);
                        if (err != NF_ACCEPT)
-                               goto push;
+                               goto out;
                }
                break;
 
 
        default:
                err = NF_DROP;
-               goto push;
+               goto out;
        }
 
        err = nf_nat_packet(ct, ctinfo, hooknum, skb);
-push:
-       skb_push_rcsum(skb, nh_off);
-
+out:
        /* Update the flow key if NAT successful. */
        if (err == NF_ACCEPT)
                ovs_nat_update_key(key, skb, maniptype);