X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=datapath%2Fdatapath.c;h=5e5aa7116879524baf00b7f60b16417a27221ec1;hb=2c272bd98f619caf0b83ecf97addd94488a0c258;hp=25edd7daa93c5644886f4cfb38d098ed1dc14cb3;hpb=fd34f17610bf6d679e5606b081807e282980968c;p=sliver-openvswitch.git diff --git a/datapath/datapath.c b/datapath/datapath.c index 25edd7daa..5e5aa7116 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -485,7 +485,9 @@ static int queue_userspace_packet(struct datapath *dp, struct sk_buff *skb, } nla->nla_len = nla_attr_size(skb->len); - skb_zerocopy(user_skb, skb, skb->len, hlen); + err = skb_zerocopy(user_skb, skb, skb->len, hlen); + if (err) + goto out; /* Pad OVS_PACKET_ATTR_PACKET if linear copy was performed */ if (!(dp->user_features & OVS_DP_F_UNALIGNED)) { @@ -499,6 +501,8 @@ static int queue_userspace_packet(struct datapath *dp, struct sk_buff *skb, err = genlmsg_unicast(ovs_dp_get_net(dp), user_skb, upcall_info->portid); out: + if (err) + skb_tx_error(skb); kfree_skb(nskb); return err; }