bug-hurd
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [hurd-amd64] ibus test failures


From: Samuel Thibault
Subject: Re: [hurd-amd64] ibus test failures
Date: Wed, 1 Jan 2025 22:11:24 +0100

Diego Nieto Cid, le mer. 01 janv. 2025 20:07:04 +0000, a ecrit:
> On Wed, Jan 01, 2025 at 06:51:47PM +0100, Samuel Thibault wrote:
> > >     /* Structure used for storage of ancillary data object information.  
> > > */
> > >     struct cmsghdr
> > >       {
> > >         socklen_t cmsg_len;         /* Length of data in cmsg_data plus 
> > > length
> > >                                        of cmsghdr structure.  */
> > 
> > That's the correct type according to posix:
> > 
> > ./basedefs/sys_socket.h.html:<tt>socklen_t  cmsg_len   </tt> Data byte 
> > count, including the <b>cmsghdr</b>. <tt>
> >
> 
> Ok, but

I was only answering about the cmsg_len type, I hadn't taken the time to
look at the rest yet.

> we are giving unaligned data pointers with the current implementation
> of CMSG_DATA.

Indeed, that's a concern that we need to fix. The code dates from BSD
4.4, which probably hadn't been exposed to 64b systems yet.

> GLib has the following code to parse control messages
> 
>     control_message = g_socket_control_message_deserialize (cmsg->cmsg_level,
>                     cmsg->cmsg_type,
>                     cmsg->cmsg_len - ((char *)CMSG_DATA (cmsg) - (char 
> *)cmsg),
> 
> the third parameter is the size of the ancillary data. And CMSG_DATA should
> align the header structure size for it to work (bacause cmsg_len was computed
> with CMSG_LEN which aligns the header).

Indeed. And the whole data has to be aligned anyway. It's actually the
very definition of __cmsg_data which is bogus, it can't be right with
64b ports.

> Something like the definition below could work, (except for when felxarr are
> available):
> 
>     #define CMSG_DATA(cmsg) ((unsigned char *) (cmsg) + (CMSG_ALIGN (sizeof 
> (struct cmsghdr))))

Yes, that's the more modern definition on BSDs.

I'm pushing a fix on glibc master.

Thanks!
Samuel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]