From b08fab42bb4b09632a69ce980db41c53243185b7 Mon Sep 17 00:00:00 2001 From: Yakun Xu Date: Fri, 15 Feb 2019 05:26:06 +0800 Subject: [PATCH] [posix-app] fix aliasing issues in platform UDP (#3591) --- src/posix/platform/udp.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/posix/platform/udp.cpp b/src/posix/platform/udp.cpp index 79dfbe41c..1add07227 100644 --- a/src/posix/platform/udp.cpp +++ b/src/posix/platform/udp.cpp @@ -186,18 +186,20 @@ static otError receivePacket(int aFd, uint8_t *aPayload, uint16_t &aLength, otMe { if (cmsg->cmsg_type == IPV6_HOPLIMIT) { - int hoplimit = *reinterpret_cast(CMSG_DATA(cmsg)); + int hoplimit; + + memcpy(&hoplimit, CMSG_DATA(cmsg), sizeof(hoplimit)); aMessageInfo.mHopLimit = static_cast(hoplimit); } else if (cmsg->cmsg_type == IPV6_PKTINFO) { - struct in6_pktinfo *pktinfo; + struct in6_pktinfo pktinfo; - pktinfo = reinterpret_cast(CMSG_DATA(cmsg)); + memcpy(&pktinfo, CMSG_DATA(cmsg), sizeof(pktinfo)); aMessageInfo.mInterfaceId = - (pktinfo->ipi6_ifindex == sPlatNetifIndex ? static_cast(OT_NETIF_INTERFACE_ID_THREAD) : 0); - memcpy(&aMessageInfo.mSockAddr, &pktinfo->ipi6_addr, sizeof(aMessageInfo.mSockAddr)); + (pktinfo.ipi6_ifindex == sPlatNetifIndex ? static_cast(OT_NETIF_INTERFACE_ID_THREAD) : 0); + memcpy(&aMessageInfo.mSockAddr, &pktinfo.ipi6_addr, sizeof(aMessageInfo.mSockAddr)); } } }