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.