[PATCH v5 3/3] Linux: Only generate 64 bit timestamps for 64 bit time_t recvmsg/recvmmsg

Florian Weimer fweimer@redhat.com
Fri Jan 28 14:02:12 GMT 2022


* Adhemerval Zanella:

> diff --git a/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c b/sysdeps/unix/sysv/linux/tst-socket-timestamp-compat.c

> +/* Check if recvmsg create the additional 64 bit timestamp if only 32 bit
> +   is enabled for 64 bit recvmsg symbol.  */
> +static void
> +do_test_large_buffer (bool mc)
> +{
> +  struct mmsghdr mmhdr = { 0 };
> +  /* It should be large enought for either timeval/timespec and the
> +     64 time type as well.  */
> +  char msgbuf[512];

I think this needs a union with struct cmsgbuf to ensure alignment.
Alternatively, use malloc.


> +static void
> +do_test_small_buffer (bool mc)
> +{
> +  struct mmsghdr mmhdr = { 0 };
> +
> +  /* Enable 32 bit timeval precision and check if no 64 bit timeval stamp
> +     is created.  */
> +  {
> +    char msgbuf[CMSG_SPACE (sizeof (struct timeval))];

Likewise.

Rest looks okay.  The kernel does not pass on whether a time32 or time64
system call was used, so implementing time32 recvmsg with recvmsg_time64
is fine in that regard.

Thanks,
Florian



More information about the Libc-alpha mailing list