From: Jesse Gross Date: Mon, 19 Sep 2011 23:23:25 +0000 (-0700) Subject: datapath: Correctly set error code in queue_userspace_packets(). X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=5721c788f25dda3be1b281331db262f6806ab35e;p=openvswitch datapath: Correctly set error code in queue_userspace_packets(). In a few places in queue_userspace_packets() when we encounter an error, we don't actually set the 'err' variable. Although we free the packets we don't correctly account for these packets as being lost. Signed-off-by: Jesse Gross Acked-by: Ben Pfaff --- diff --git a/datapath/datapath.c b/datapath/datapath.c index 98c2bafd..1fba23bf 100644 --- a/datapath/datapath.c +++ b/datapath/datapath.c @@ -449,8 +449,10 @@ static int queue_userspace_packets(struct datapath *dp, struct sk_buff *skb, if (unlikely(err)) goto err_kfree_skbs; - if (nla_attr_size(skb->len) > USHRT_MAX) + if (nla_attr_size(skb->len) > USHRT_MAX) { + err = -EFBIG; goto err_kfree_skbs; + } len = sizeof(struct ovs_header); len += nla_total_size(skb->len); @@ -465,6 +467,7 @@ static int queue_userspace_packets(struct datapath *dp, struct sk_buff *skb, user_skb = genlmsg_new(len, GFP_ATOMIC); if (!user_skb) { netlink_set_err(INIT_NET_GENL_SOCK, 0, group, -ENOBUFS); + err = -ENOMEM; goto err_kfree_skbs; }