This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[PATCH][BZ 16852] Do not clobber recvmmsg argument.
- From: OndÅej BÃlka <neleai at seznam dot cz>
- To: libc-alpha at sourceware dot org
- Date: Mon, 28 Apr 2014 17:29:37 +0200
- Subject: [PATCH][BZ 16852] Do not clobber recvmmsg argument.
- Authentication-results: sourceware.org; auth=none
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);