[ovs-dev] [PATCH] netdev-linux: avoid negative value cast to non-negative in comparison

ZhengLingyun konghuarukhr at 163.com
Thu Jul 18 08:08:06 UTC 2013


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 <konghuarukhr at 163.com>
---
 lib/netdev-linux.c |    6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)


diff --git a/lib/netdev-linux.c b/lib/netdev-linux.c
index 8790f14..1f73886 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",
-- 
1.7.9.5

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.openvswitch.org/pipermail/ovs-dev/attachments/20130718/4bc7322b/attachment-0003.html>


More information about the dev mailing list