vcl: fix ldp for __recv_chk socket calls 15/33315/1
authorSivaprasad Tummala <Sivaprasad.Tummala@intel.com>
Sat, 31 Jul 2021 16:08:19 +0000 (21:38 +0530)
committerSivaprasad Tummala <Sivaprasad.Tummala@intel.com>
Sat, 31 Jul 2021 16:25:11 +0000 (21:55 +0530)
add ldp support for handling __recv_chk socket calls.

Type: fix

Signed-off-by: Sivaprasad Tummala <Sivaprasad.Tummala@intel.com>
Change-Id: I33221c465ac607bc665fcba500dd399a56b32df6

src/vcl/ldp.c
src/vcl/ldp_glibc_socket.h

index 5edb935..de886ca 100644 (file)
@@ -1530,6 +1530,15 @@ recv (int fd, void *buf, size_t n, int flags)
   return size;
 }
 
+ssize_t
+__recv_chk (int fd, void *buf, size_t n, size_t buflen, int flags)
+{
+  if (n > buflen)
+    return -1;
+
+  return recv (fd, buf, n, flags);
+}
+
 static int
 ldp_vls_sendo (vls_handle_t vlsh, const void *buf, size_t n, int flags,
               __CONST_SOCKADDR_ARG addr, socklen_t addr_len)
index 0890a64..95fb7c8 100644 (file)
@@ -163,6 +163,14 @@ extern ssize_t sendfile (int __out_fd, int __in_fd, off_t * __offset,
    __THROW.  */
 extern ssize_t recv (int __fd, void *__buf, size_t __n, int __flags);
 
+/* Read N bytes into BUF from socket FD with buffer overflow checking.
+   Returns the number read or -1 for errors.
+
+   This function is a cancellation point and therefore not marked with
+   __THROW.  */
+extern ssize_t __recv_chk (int fd, void *buf, size_t n, size_t buflen,
+                          int flags);
+
 /* Send N bytes of BUF on socket FD to peer at address ADDR (which is
    ADDR_LEN bytes long).  Returns the number sent, or -1 for errors.