|
@@ -684,7 +684,7 @@ static void ovs_fragment(struct vport *vport, struct sk_buff *skb, u16 mru,
|
|
|
{
|
|
|
if (skb_network_offset(skb) > MAX_L2_LEN) {
|
|
|
OVS_NLERR(1, "L2 header too long to fragment");
|
|
|
- return;
|
|
|
+ goto err;
|
|
|
}
|
|
|
|
|
|
if (ethertype == htons(ETH_P_IP)) {
|
|
@@ -708,8 +708,7 @@ static void ovs_fragment(struct vport *vport, struct sk_buff *skb, u16 mru,
|
|
|
struct rt6_info ovs_rt;
|
|
|
|
|
|
if (!v6ops) {
|
|
|
- kfree_skb(skb);
|
|
|
- return;
|
|
|
+ goto err;
|
|
|
}
|
|
|
|
|
|
prepare_frag(vport, skb);
|
|
@@ -728,8 +727,12 @@ static void ovs_fragment(struct vport *vport, struct sk_buff *skb, u16 mru,
|
|
|
WARN_ONCE(1, "Failed fragment ->%s: eth=%04x, MRU=%d, MTU=%d.",
|
|
|
ovs_vport_name(vport), ntohs(ethertype), mru,
|
|
|
vport->dev->mtu);
|
|
|
- kfree_skb(skb);
|
|
|
+ goto err;
|
|
|
}
|
|
|
+
|
|
|
+ return;
|
|
|
+err:
|
|
|
+ kfree_skb(skb);
|
|
|
}
|
|
|
|
|
|
static void do_output(struct datapath *dp, struct sk_buff *skb, int out_port,
|