summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWaldemar Brodkorb <wbrodkorb@conet.de>2018-10-20 14:25:49 (GMT)
committerWaldemar Brodkorb <wbrodkorb@conet.de>2018-10-20 14:25:49 (GMT)
commitf2aac995e790d240b8ab8bf915e8283e8ba531f0 (patch)
treef13cc027fab0f09fb039948a3c5ef7c75a31b960
parente550b5c085654f3310e378821d73bccce11fa172 (diff)
do not expose recvmmsg/sendmmsg for unsupported kernels
-rw-r--r--libc/inet/socketcalls.c5
-rw-r--r--libc/sysdeps/linux/common/bits/kernel-features.h6
2 files changed, 11 insertions, 0 deletions
diff --git a/libc/inet/socketcalls.c b/libc/inet/socketcalls.c
index 1b92609..edb5ab8 100644
--- a/libc/inet/socketcalls.c
+++ b/libc/inet/socketcalls.c
@@ -8,6 +8,7 @@
#include <sys/syscall.h>
#include <sys/socket.h>
#include <cancel.h>
+#include <bits/kernel-features.h>
#ifdef __NR_socketcall
/* Various socketcall numbers */
@@ -267,6 +268,7 @@ lt_libc_hidden(recvmsg)
#endif
#ifdef L_recvmmsg
+#ifdef __ASSUME_RECVMMSG_SYSCALL
static ssize_t __NC(recvmmsg)(int sockfd, struct mmsghdr *msg, size_t vlen,
int flags, struct timespec *tmo)
{
@@ -289,6 +291,7 @@ CANCELLABLE_SYSCALL(ssize_t, recvmmsg,
(sockfd, msg, vlen, flags, tmo))
lt_libc_hidden(recvmmsg)
#endif
+#endif
#ifdef L_send
static ssize_t __NC(send)(int sockfd, const void *buffer, size_t len, int flags)
@@ -332,6 +335,7 @@ lt_libc_hidden(sendmsg)
#endif
#ifdef L_sendmmsg
+#ifdef __ASSUME_SENDMMSG_SYSCALL
static ssize_t __NC(sendmmsg)(int sockfd, struct mmsghdr *msg, size_t vlen,
int flags)
{
@@ -352,6 +356,7 @@ CANCELLABLE_SYSCALL(ssize_t, sendmmsg,
(sockfd, msg, vlen, flags))
lt_libc_hidden(sendmmsg)
#endif
+#endif
#ifdef L_sendto
ssize_t __NC(sendto)(int sockfd, const void *buffer, size_t len, int flags,
diff --git a/libc/sysdeps/linux/common/bits/kernel-features.h b/libc/sysdeps/linux/common/bits/kernel-features.h
index e0195e4..f1ebe02 100644
--- a/libc/sysdeps/linux/common/bits/kernel-features.h
+++ b/libc/sysdeps/linux/common/bits/kernel-features.h
@@ -461,6 +461,12 @@
# define __ASSUME_ACCEPT4 1
#endif
+/* Support for the recvmmsg/sendmmsg syscall was added in 2.6.33 */
+#if __LINUX_KERNEL_VERSION >= 0x020621
+#define __ASSUME_RECVMMSG_SYSCALL 1
+#define __ASSUME_SENDMMSG_SYSCALL 1
+#endif
+
/* Support for the FUTEX_CLOCK_REALTIME flag was added in 2.6.29. */
#if __LINUX_KERNEL_VERSION >= 0x02061d
# define __ASSUME_FUTEX_CLOCK_REALTIME 1