From 8ae6fa0eb6d5fbd0626127be3f6d2cd2b3d604f6 Mon Sep 17 00:00:00 2001 From: jilles Date: Sun, 10 May 2015 14:50:50 +0000 Subject: [PATCH] recv(),send(): Directly call interposing entry instead of going through PLT. recv() and send()'s calls to recvfrom() and sendto() are much like waitpid()'s call to wait4(), and likewise need not allow PLT interposing on the called function. --- lib/libc/net/recv.c | 6 +++++- lib/libc/net/send.c | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/libc/net/recv.c b/lib/libc/net/recv.c index f71d4780bb7c..6a584cadbff6 100644 --- a/lib/libc/net/recv.c +++ b/lib/libc/net/recv.c @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include "libc_private.h" #include @@ -48,5 +49,8 @@ recv(s, buf, len, flags) * POSIX says recv() shall be a cancellation point, so call the * cancellation-enabled recvfrom() and not _recvfrom(). */ - return (recvfrom(s, buf, len, flags, NULL, 0)); + return (((ssize_t (*)(int, void *, size_t, int, + struct sockaddr *, socklen_t *)) + __libc_interposing[INTERPOS_recvfrom])(s, buf, len, flags, + NULL, NULL)); } diff --git a/lib/libc/net/send.c b/lib/libc/net/send.c index 93cdfda17532..c44f4b922a81 100644 --- a/lib/libc/net/send.c +++ b/lib/libc/net/send.c @@ -35,6 +35,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include "libc_private.h" #include @@ -48,5 +49,8 @@ send(s, msg, len, flags) * POSIX says send() shall be a cancellation point, so call the * cancellation-enabled sendto() and not _sendto(). */ - return (sendto(s, msg, len, flags, NULL, 0)); + return (((ssize_t (*)(int, const void *, size_t, int, + const struct sockaddr *, socklen_t)) + __libc_interposing[INTERPOS_sendto])(s, msg, len, flags, + NULL, 0)); }