VCL-LDPRELOAD: Fix CID179207 85/9485/1
authorDave Wallace <dwallacelf@gmail.com>
Sun, 19 Nov 2017 16:20:02 +0000 (11:20 -0500)
committerDave Wallace <dwallacelf@gmail.com>
Sun, 19 Nov 2017 16:20:02 +0000 (11:20 -0500)
Change-Id: Ia6b9e39d5a2ef064cf71bfe87cb4b4a0648d735d
Signed-off-by: Dave Wallace <dwallacelf@gmail.com>
src/vcl/vcom_socket.c
src/vcl/vppcom.h

index 6450edd..e87fd8a 100644 (file)
@@ -1557,8 +1557,17 @@ vcom_socket_sendfile (int __out_fd, int __in_fd, off_t * __offset,
 
   do
     {
-      bytes_to_read = vppcom_session_attr (out_sid,
-                                          VPPCOM_ATTR_GET_NWRITE, 0, 0);
+      rv = vppcom_session_attr (out_sid, VPPCOM_ATTR_GET_NWRITE, 0, 0);
+      if (rv < 0)
+       {
+         clib_warning ("[%d] ERROR: vppcom_session_attr (out_sid (%u), "
+                       "VPPCOM_ATTR_GET_NWRITE, 0, 0) returned %d (%s)!",
+                       getpid (), out_sid, rv, vppcom_retval_str (rv));
+         vec_reset_length (vsm->io_buffer);
+         return rv;
+       }
+
+      bytes_to_read = (size_t) rv;
       if (VCOM_DEBUG > 2)
        clib_warning ("[%d] results %ld, n_bytes_left %lu, "
                      "bytes_to_read %lu", getpid (), results,
@@ -1606,8 +1615,10 @@ vcom_socket_sendfile (int __out_fd, int __in_fd, off_t * __offset,
       if (rv < 0)
        {
          clib_warning ("[%d] ERROR: vppcom_session_write ("
-                       "out_sid %u, io_buffer %p, nbytes %d) returned %d",
-                       getpid (), out_sid, vsm->io_buffer, nbytes, rv);
+                       "out_sid %u, io_buffer %p, nbytes %d) "
+                       "returned %d (%s)",
+                       getpid (), out_sid, vsm->io_buffer, nbytes,
+                       rv, vppcom_retval_str (rv));
          if (results == 0)
            {
              vec_reset_length (vsm->io_buffer);
index 93b7173..45ff116 100644 (file)
@@ -103,6 +103,10 @@ vppcom_retval_str (int retval)
       st = "VPPCOM_EAGAIN";
       break;
 
+    case VPPCOM_ENOMEM:
+      st = "VPPCOM_ENOMEM";
+      break;
+
     case VPPCOM_EINVAL:
       st = "VPPCOM_EINVAL";
       break;