svn commit: r323254 - head/sys/compat/freebsd32

John Baldwin jhb at FreeBSD.org
Fri Sep 8 12:14:29 UTC 2017


On 9/7/17 12:29 AM, Maxim Sobolev wrote:
> Author: sobomax
> Date: Thu Sep  7 04:29:57 2017
> New Revision: 323254
> URL: https://svnweb.freebsd.org/changeset/base/323254
> 
> Log:
>   In the recvmsg32() system call iterate over returned structure(s)
>   and convert any messages of types SCM_BINTIME, SCM_TIMESTAMP,
>   SCM_REALTIME and SCM_MONOTONIC from 64-bit to its 32-bit
>   representation. Otherwise we either run out of user-supplied
>   buffer to copy those out resulting in the MSG_CTRUNC or simply
>   return values that the userland 32-bit code is not going
>   to parse correctly. This fixes at least two regression tests
>   failing to function properly in 32-bit compat mode:
>   
>       tools/regression/sockets/udp_pingpong
>       tools/regression/sockets/unix_cmsg
>   
>   PR:             kern/222039
>   MFC after:	30 days

Is this correct on !amd64?  Other 32-bit platforms use a 64-bit time_t
(note the time32_t type defined earlier in freebsd32.h).  struct bintime32
should use time32_t for the seconds field, not uint32_t.  I think that
will be sufficient to make this correct on !amd64 (it also means that
bintime32 == bintime on !amd64 so you could perhaps use a simpler BT_CP
for !amd64, but the existing one is probably ok).

-- 
John Baldwin


More information about the svn-src-all mailing list