X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=datapath%2Fdatapath.c;h=c15ded972b19ed10f3fb2ab79731b71467d895fe;hb=a2946b415e52059607a43d41ba7ad0123b39c587;hp=bacc634ce13c7a0314fb29c3aa458b98a5ea0734;hpb=bd3759d35c870d9ae66118a704d950144a66a535;p=cascardo%2Fovs.git diff --git a/datapath/datapath.c b/datapath/datapath.c index bacc634ce..c15ded972 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -469,7 +469,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) && @@ -480,6 +482,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; }