Allocate properly aligned Message type in SctpReadWrite::ReadMessage
ubsan observed that we were not aligning our allocations for the Message
type. Fix that.
Change-Id: I3031e999ffca7ffa656141fbe190c3c323e6e738
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/network/sctp_lib.cc b/aos/network/sctp_lib.cc
index 6539953..9632d3c 100644
--- a/aos/network/sctp_lib.cc
+++ b/aos/network/sctp_lib.cc
@@ -340,8 +340,13 @@
CHECK(fd_ != -1);
while (true) {
- aos::unique_c_ptr<Message> result(
- reinterpret_cast<Message *>(malloc(sizeof(Message) + max_size_ + 1)));
+ constexpr size_t kMessageAlign = alignof(Message);
+ const size_t max_message_size =
+ ((sizeof(Message) + max_size_ + 1 + (kMessageAlign - 1)) /
+ kMessageAlign) *
+ kMessageAlign;
+ aos::unique_c_ptr<Message> result(reinterpret_cast<Message *>(
+ aligned_alloc(kMessageAlign, max_message_size)));
struct msghdr inmessage;
memset(&inmessage, 0, sizeof(struct msghdr));