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)); } } }