Samuel Thibault, le mar. 31 déc. 2024 14:36:02 +0100, a ecrit: > > I'm not sure how to fix it. Should the expectations of GLib be updated > > to be aligned? Like below: > > > > - if (size != G_CREDENTIALS_NATIVE_SIZE) > > + if (size != CMSG_ALIGN(G_CREDENTIALS_NATIVE_SIZE)) > > > > Or should the macros be updated to use a 4 bytes size_t equivalent? > > I'd rather say it's our socket layer which is aligning cmsg_len while > it shouldn't, since it's CMSG_NXTHDR that aligns it to get to the next > header.
Or perhaps it's glib itself that does the rounding, see ./gio/gsocket.c: cmsg->cmsg_len = CMSG_LEN (g_socket_control_message_get_size (_message->control_messages[i])); Adding CMSG_ALIGN to the glib size check seems odd to be because in the linux case G_CREDENTIALS_NATIVE_SIZE is sizeof (struct ucred), which is 12bytes, so not 8byte-round and rounding would break the check on Linux. You should probably check precisely the difference between Linux and Hurd on these alignment questions at the various stages. Samuel