laforge has submitted this change. ( 
https://gerrit.osmocom.org/c/libosmocore/+/41950?usp=email )

Change subject: osmo_io: Fix misalignment of iofd->cmsg used as struct cmsghdr
......................................................................

osmo_io: Fix misalignment of iofd->cmsg used as struct cmsghdr

Fixes following ASAN runtime error:
"""
src/stream.c:398:47: runtime error: member access within misaligned address 
0x516000012b81 for type 'struct cmsghdr', which requires 8 byte alignment
0x516000012b81: note: pointer points here
 51 00 00  00 30 00 00 00 00 00 00  00 84 00 00 00 01 00 00  00 00 00 00 00 00 
00 00  00 00 00 00 03
              ^
"""

Current GCC documentation [1] states that __attribute__ ((__aligned__
(alignment))) is the older sytnax. The newer _Alignas mimics the
standarized alignas() in C23. Since we build with CLAGS=-std=gnu11 we
are fine using _Alignas, which was introduced in C11.

[1] 
https://www.gnu.org/software/c-intro-and-ref/manual/html_node/Type-Alignment.html

Related: OS#6905
Change-Id: Ia80dfc4dbffe85514b18dcf8d36b85bfafd76d64
---
M src/core/osmo_io_internal.h
1 file changed, 5 insertions(+), 2 deletions(-)

Approvals:
  Jenkins Builder: Verified
  osmith: Looks good to me, but someone else must approve
  jolly: Looks good to me, but someone else must approve
  laforge: Looks good to me, approved




diff --git a/src/core/osmo_io_internal.h b/src/core/osmo_io_internal.h
index c15262b..4f35fee 100644
--- a/src/core/osmo_io_internal.h
+++ b/src/core/osmo_io_internal.h
@@ -170,8 +170,11 @@
        /*! msghdr is in the cancel_queue list */
        bool in_cancel_queue;

-       /*! control message buffer for passing sctp_sndrcvinfo along */
-       char cmsg[0]; /* size is determined by iofd->cmsg_size on recvmsg, and 
by mcghdr->msg_controllen on sendmsg */
+       /*! control message buffer for passing sctp_sndrcvinfo along.
+        * Size is determined by iofd->cmsg_size on recvmsg, and by 
mcghdr->msg_controllen on sendmsg.
+        * Alignment of the array is required due to cast to  "struct cmsghdr", 
eg. by CMSG_FIRSTHDR().
+        */
+       char _Alignas(struct cmsghdr) cmsg[0];
 };

 enum iofd_seg_act {

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/41950?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: merged
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: Ia80dfc4dbffe85514b18dcf8d36b85bfafd76d64
Gerrit-Change-Number: 41950
Gerrit-PatchSet: 3
Gerrit-Owner: pespin <[email protected]>
Gerrit-Reviewer: Hoernchen <[email protected]>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: daniel <[email protected]>
Gerrit-Reviewer: fixeria <[email protected]>
Gerrit-Reviewer: jolly <[email protected]>
Gerrit-Reviewer: laforge <[email protected]>
Gerrit-Reviewer: osmith <[email protected]>

Reply via email to