|
Message-ID: <20230602152327.GT4163@brightrain.aerifal.cx> Date: Fri, 2 Jun 2023 11:23:27 -0400 From: Rich Felker <dalias@...c.org> To: Markus Wichmann <nullplan@....net> Cc: musl@...ts.openwall.com Subject: Re: __convert_scm_timestamps() probably breaks with struct timeval On Fri, Jun 02, 2023 at 04:49:37PM +0200, Markus Wichmann wrote: > Hi all, > > I couldn't think of a better subject. For unrelated reasons, today I > stumbled upon the abovenamed function. It looks through all control > messages in a msghdr, looking for SCM_TIMESTAMP_OLD and > SCM_TIMESTAMPNS_OLD, and converting an array two long into an array of > two long long. > > This will work with struct timespec (or SCM_TIMESTAMPNS_OLD) on all > architectures, because struct timespec has been defined specifically for > this to work (due to the kernel accessing it the same way). But it will > break with struct timeval (or SCM_TIMESTAMP_OLD). > > First of all, on some 32-bit archs (and this code is only used on 32-bit > archs) we have alignof(int64_t) == 4, and therefore sizeof (struct > timeval) == 12. Therefore CMSG_LEN(sizeof (long long[2])) != > CMSG_LEN(struct timeval), and therefore, applications won't read the > newly converted cmsg. All the work for nothing. > > Next, even if alignof(int64_t) == 8, struct timeval does not have the > same padding as struct timespec, and so on big endian architectures, the > code ends up writing the microseconds into the padding and clearing the > tv_usec field. > > This can all be solved easily, if you just try to be a touch less > clever. I am attaching a patch that makes the intent more obvious. It's > not as flashy as the previous code. It doesn't have a switch with a goto > in it. I hope it finds your favor. I'm confused what problem you're seeing. There is no conversion in-place. The function finds a timeval or timespec in the old cmsg array, extracts the value to a local variable that's a pair of long long, and finally *appends* that as a new cmsg to the cmsg array. Rich
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.