|
@@ -514,7 +514,7 @@ static int ovs_ct_nat_execute(struct sk_buff *skb, struct nf_conn *ct,
|
|
|
int hooknum, nh_off, err = NF_ACCEPT;
|
|
|
|
|
|
nh_off = skb_network_offset(skb);
|
|
|
- skb_pull(skb, nh_off);
|
|
|
+ skb_pull_rcsum(skb, nh_off);
|
|
|
|
|
|
/* See HOOK2MANIP(). */
|
|
|
if (maniptype == NF_NAT_MANIP_SRC)
|
|
@@ -579,6 +579,7 @@ static int ovs_ct_nat_execute(struct sk_buff *skb, struct nf_conn *ct,
|
|
|
err = nf_nat_packet(ct, ctinfo, hooknum, skb);
|
|
|
push:
|
|
|
skb_push(skb, nh_off);
|
|
|
+ skb_postpush_rcsum(skb, skb->data, nh_off);
|
|
|
|
|
|
return err;
|
|
|
}
|
|
@@ -886,7 +887,7 @@ int ovs_ct_execute(struct net *net, struct sk_buff *skb,
|
|
|
|
|
|
/* The conntrack module expects to be working at L3. */
|
|
|
nh_ofs = skb_network_offset(skb);
|
|
|
- skb_pull(skb, nh_ofs);
|
|
|
+ skb_pull_rcsum(skb, nh_ofs);
|
|
|
|
|
|
if (key->ip.frag != OVS_FRAG_TYPE_NONE) {
|
|
|
err = handle_fragments(net, key, info->zone.id, skb);
|
|
@@ -900,6 +901,7 @@ int ovs_ct_execute(struct net *net, struct sk_buff *skb,
|
|
|
err = ovs_ct_lookup(net, key, info, skb);
|
|
|
|
|
|
skb_push(skb, nh_ofs);
|
|
|
+ skb_postpush_rcsum(skb, skb->data, nh_ofs);
|
|
|
if (err)
|
|
|
kfree_skb(skb);
|
|
|
return err;
|