netdev-linux: Report error for truncated packets on receive.
[openvswitch] / lib / netdev-linux.c
index 9ff286ee4fe75b0031c2f24dae02a66622dbb0f9..27a123cd4ea9c87642d04f7d7dbb3110898e5205 100644 (file)
@@ -802,8 +802,11 @@ netdev_linux_recv(struct netdev *netdev_, void *data, size_t size)
     }
 
     for (;;) {
-        ssize_t retval = read(netdev->fd, data, size);
-        if (retval >= 0) {
+        ssize_t retval = recv(netdev->fd, data, size, MSG_TRUNC);
+        if (retval > size) {
+            /* Received packet was longer than supplied buffer. */
+            return -EMSGSIZE;
+        } else if (retval >= 0) {
             return retval;
         } else if (errno != EINTR) {
             if (errno != EAGAIN) {