vcl: fix ldp for __recv_chk socket calls

add ldp support for handling __recv_chk socket calls.

Type: fix

Signed-off-by: Sivaprasad Tummala <Sivaprasad.Tummala@intel.com>
Change-Id: I33221c465ac607bc665fcba500dd399a56b32df6
diff --git a/src/vcl/ldp.c b/src/vcl/ldp.c
index 5edb935..de886ca 100644
--- a/src/vcl/ldp.c
+++ b/src/vcl/ldp.c
@@ -1530,6 +1530,15 @@
   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)
diff --git a/src/vcl/ldp_glibc_socket.h b/src/vcl/ldp_glibc_socket.h
index 0890a64..95fb7c8 100644
--- a/src/vcl/ldp_glibc_socket.h
+++ b/src/vcl/ldp_glibc_socket.h
@@ -163,6 +163,14 @@
    __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.