Re: [PATCH v2] linux: align the ancillary buffer in tst-socket-timestamp

Florian Weimer <[email protected]>
Newsgroups gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
* Matt Turner:

> The test places the ancillary buffer so that it ends against a PROT_NONE
> page, at cmsg - (CMSG_SPACE (tsize) + slack).  CMSG_SPACE (sizeof (struct
> timeval)) is a multiple of the alignment of struct cmsghdr, so the start of
> the buffer inherits the alignment of the slack, and one of the slack sizes
> the test uses is 4.
>
> msg_control has to be suitably aligned for struct cmsghdr: recvmsg and the
> CMSG_* macros both read cmsg_len from the start of the buffer, and it is a
> size_t.  On a target that does not fix up unaligned accesses in hardware,
> reading it from a misaligned address traps into the kernel.  On alpha each
> one is reported:
>
>   ld-linux.so.2(48878): unaligned trap at 0000000120001e3c: ... 29 2
>
> five per run, all from the loop over the control messages in
> do_recvmsg_slack_ancillary.  The test still passes, since the kernel
> completes the access and returns.
>
> Round the start of the buffer down to the alignment, and add the alignment
> minus one to the requested allocation so the rounding cannot move the start
> outside it.  A slack that is not a multiple of the alignment then leaves the
> buffer ending a few bytes short of the guard page rather than against it; the
> overruns the guard page is there to catch are a whole timestamp rather than a
> few bytes, so they are still caught.
> ---
>  .../unix/sysv/linux/tst-socket-timestamp.c    | 20 +++++++++++++++----
>  1 file changed, 16 insertions(+), 4 deletions(-)

This looks okay to me.  I think I verified that the test still works as
expected to isolate the original bug after your changes, on i386 with
the old code paths being used.

Reviewed-by: Florian Weimer <[email protected]>

Thanks,
Florian
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.