Index: lwip-deb/src/api/sockets.c
===================================================================
--- lwip-deb.orig/src/api/sockets.c
+++ lwip-deb/src/api/sockets.c
@@ -1267,15 +1267,17 @@ lwip_recvfrom_udp_raw(struct lwip_sock *
 #if LWIP_IPV4
         if (msg->msg_controllen >= CMSG_SPACE(sizeof(struct in_pktinfo))) {
           struct cmsghdr *chdr = CMSG_FIRSTHDR(msg); /* This will always return a header!! */
-          struct in_pktinfo *pkti = (struct in_pktinfo *)CMSG_DATA(chdr);
+          struct in_pktinfo pkti;
+          memset(&pkti, 0, sizeof(struct in_pktinfo));
           chdr->cmsg_level = IPPROTO_IP;
           chdr->cmsg_type = IP_PKTINFO;
           chdr->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
-          pkti->ipi_ifindex = buf->p->if_idx;
+          pkti.ipi_ifindex = buf->p->if_idx;
 #if LWIP_SOCKET_HAVE_IPI_SPEC_DST
-          inet_addr_from_ip4addr(&pkti->ipi_spec_dst, ip_2_ip4(netbuf_ifaddr(buf)));
+          inet_addr_from_ip4addr(&pkti.ipi_spec_dst, ip_2_ip4(netbuf_ifaddr(buf)));
 #endif /* LWIP_SOCKET_HAVE_IPI_SPEC_DST */
-          inet_addr_from_ip4addr(&pkti->ipi_addr, ip_2_ip4(netbuf_destaddr(buf)));
+          inet_addr_from_ip4addr(&pkti.ipi_addr, ip_2_ip4(netbuf_destaddr(buf)));
+          memcpy(CMSG_DATA(chdr), &pkti, sizeof(struct in_pktinfo));
           msg->msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo));
           wrote_msg = 1;
         } else {
