[PATCH][BZ 16852] Do not clobber recvmmsg argument.
Ondřej Bílka
neleai@seznam.cz
Mon Apr 28 15:29:00 GMT 2014
Hi, here Rich asked about intended behaviour of recvmmsg timeout
argument. A kernel overwrites it by remaining time but we declare it
with const argument. So who is correct?
If we want to make timeout constant following patch should work.
Comments?
* sysdeps/unix/sysv/linux/recvmmsg.c (recvmmsg): Do not clobber
timeout argument.
diff --git a/sysdeps/unix/sysv/linux/recvmmsg.c b/sysdeps/unix/sysv/linux/recvmmsg.c
index 57ddf31..56690ff 100644
--- a/sysdeps/unix/sysv/linux/recvmmsg.c
+++ b/sysdeps/unix/sysv/linux/recvmmsg.c
@@ -37,6 +37,10 @@ int
recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
const struct timespec *tmo)
{
+ struct timespec dummy;
+ memcpy (&dummy, tmo, sizeof (struct timespec));
+ tmo = &dummy;
+
if (SINGLE_THREAD_P)
return INLINE_SYSCALL (recvmmsg, 5, fd, vmessages, vlen, flags, tmo);
@@ -61,6 +65,10 @@ int
recvmmsg (int fd, struct mmsghdr *vmessages, unsigned int vlen, int flags,
const struct timespec *tmo)
{
+ struct timespec dummy;
+ memcpy (&dummy, tmo, sizeof (struct timespec));
+ tmo = &dummy;
+
if (__glibc_likely (have_recvmmsg >= 0))
{
int ret = __internal_recvmmsg (fd, vmessages, vlen, flags, tmo);
More information about the Libc-alpha
mailing list