From 7e0b977fcd2d350a83a21318195f2b896081485c Mon Sep 17 00:00:00 2001 From: Andreas Schultz Date: Thu, 4 Feb 2016 14:59:20 +0100 Subject: [PATCH] fix strict aliasing errors --- src/common/capwap_network.c | 6 ++++-- src/common/capwap_protocol.c | 4 +++- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/common/capwap_network.c b/src/common/capwap_network.c index 4f805a2..d8d7b8b 100644 --- a/src/common/capwap_network.c +++ b/src/common/capwap_network.c @@ -307,8 +307,9 @@ int capwap_recvfrom(int sock, void* buffer, int* size, union sockaddr_capwap* fr for (cmsg = CMSG_FIRSTHDR(&msgh); cmsg != NULL; cmsg = CMSG_NXTHDR(&msgh, cmsg)) { #ifdef IP_PKTINFO if ((cmsg->cmsg_level == SOL_IP) && (cmsg->cmsg_type == IP_PKTINFO)) { + struct in_pktinfo *pi = (struct in_pktinfo *)CMSG_DATA(cmsg); toaddr->sin.sin_family = AF_INET; - memcpy(&toaddr->sin.sin_addr, &((struct in_pktinfo*)CMSG_DATA(cmsg))->ipi_addr, sizeof(struct in_addr)); + memcpy(&toaddr->sin.sin_addr, &pi->ipi_addr, sizeof(struct in_addr)); break; } #elif defined IP_RECVDSTADDR @@ -319,8 +320,9 @@ int capwap_recvfrom(int sock, void* buffer, int* size, union sockaddr_capwap* fr } #endif if ((cmsg->cmsg_level == IPPROTO_IPV6) && ((cmsg->cmsg_type == IPV6_PKTINFO) || (cmsg->cmsg_type == IPV6_RECVPKTINFO))) { + struct in6_pktinfo *pi6 = (struct in6_pktinfo*) CMSG_DATA(cmsg); toaddr->sin6.sin6_family = AF_INET6; - memcpy(&toaddr->sin6.sin6_addr, &((struct in6_pktinfo*)CMSG_DATA(cmsg))->ipi6_addr, sizeof(struct in6_addr)); + memcpy(&toaddr->sin6.sin6_addr, &pi6->ipi6_addr, sizeof(struct in6_addr)); /* Check if IPv4 is mapped into IPv6 */ if (fromaddr->ss.ss_family == AF_INET) { diff --git a/src/common/capwap_protocol.c b/src/common/capwap_protocol.c index 2e03b94..8b5a276 100644 --- a/src/common/capwap_protocol.c +++ b/src/common/capwap_protocol.c @@ -446,6 +446,7 @@ static struct capwap_packet_txmng* capwap_packet_txmng_create(struct capwap_head /* */ struct capwap_packet_txmng* capwap_packet_txmng_create_ctrl_message(struct capwap_header_data* data, unsigned long type, unsigned char seq, unsigned short mtu) { + struct capwap_header* header; unsigned short length; struct capwap_packet_txmng* txmngpacket; struct capwap_fragment_packet_item* fragmentpacket; @@ -453,7 +454,8 @@ struct capwap_packet_txmng* capwap_packet_txmng_create_ctrl_message(struct capwa ASSERT(data != NULL); ASSERT(mtu > 0); - length = GET_HLEN_HEADER((struct capwap_header*)data->headerbuffer) * 4; + header = (struct capwap_header *)data->headerbuffer; + length = GET_HLEN_HEADER(header) * 4; /* Check MTU */ if ((mtu > 0) && (mtu < (length + sizeof(struct capwap_control_message)))) {