diff options
| -rw-r--r-- | datapath/actions.c | 8 | ||||
| -rw-r--r-- | datapath/vport-gre.c | 4 |
2 files changed, 10 insertions, 2 deletions
diff --git a/datapath/actions.c b/datapath/actions.c index ff67372a0..f7e51d925 100644 --- a/datapath/actions.c +++ b/datapath/actions.c @@ -113,6 +113,8 @@ modify_vlan_tci(struct datapath *dp, struct sk_buff *skb, ~skb->csum); } } else { + int err; + /* Add vlan header */ /* Set up checksumming pointers for checksum-deferred packets @@ -120,7 +122,11 @@ modify_vlan_tci(struct datapath *dp, struct sk_buff *skb, * when we send the packet out on the wire, and it will fail at * that point because skb_checksum_setup() will not look inside * an 802.1Q header. */ - vswitch_skb_checksum_setup(skb); + err = vswitch_skb_checksum_setup(skb); + if (unlikely(err)) { + kfree_skb(skb); + return ERR_PTR(err); + } /* GSO is not implemented for packets with an 802.1Q header, so * we have to do segmentation before we add that header. diff --git a/datapath/vport-gre.c b/datapath/vport-gre.c index 98e0abc3b..c71cc34d9 100644 --- a/datapath/vport-gre.c +++ b/datapath/vport-gre.c @@ -1131,7 +1131,9 @@ gre_send(struct vport *vport, struct sk_buff *skb) } forward_ip_summed(skb); - vswitch_skb_checksum_setup(skb); + + if (unlikely(vswitch_skb_checksum_setup(skb))) + goto error_free; skb = handle_gso(skb); if (unlikely(IS_ERR(skb))) { |
