From: ZhengLingyun Date: Thu, 18 Jul 2013 08:08:06 +0000 (+0800) Subject: netdev-linux: avoid negative value cast to non-negative in comparison X-Git-Tag: sliver-openvswitch-2.0.90-1~36^2~8 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=bb5c146881eb2b3d48962f89ecaa9598533a91c5;p=sliver-openvswitch.git netdev-linux: avoid negative value cast to non-negative in comparison I am using a userspace OVS, there is a constant ERR message in log: "dpif_netdev|ERR|error receiving data from ovs-netdev: Message too long" Check the code and find there is a comparison between ssize_t and size_t type in netdev_rx_linux_recv(). It makes the negative "retval" greater than the "size". Change the sequence of comparison to avoid negative return value cast to a positive and become greater then a non-negative value. Signed-off-by: ZhengLingyun Signed-off-by: Ben Pfaff --- diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c index 8790f14ec..1f7388649 100644 --- a/lib/netdev-linux.c +++ b/lib/netdev-linux.c @@ -835,10 +835,8 @@ netdev_rx_linux_recv(struct netdev_rx *rx_, void *data, size_t size) : recv(rx->fd, data, size, MSG_TRUNC)); } while (retval < 0 && errno == EINTR); - if (retval > size) { - return -EMSGSIZE; - } else if (retval >= 0) { - return retval; + if (retval >= 0) { + return retval > size ? -EMSGSIZE : retval; } else { if (errno != EAGAIN) { VLOG_WARN_RL(&rl, "error receiving Ethernet packet on %s: %s",