diff --git a/src/core/ipv6/ip6.c b/src/core/ipv6/ip6.c index 90bf5b0f..b682eba4 100644 --- a/src/core/ipv6/ip6.c +++ b/src/core/ipv6/ip6.c @@ -976,7 +976,7 @@ netif_found: /* check payload length is multiple of 8 octets when mbit is set */ if (IP6_FRAG_MBIT(frag_hdr) && (IP6H_PLEN(ip6hdr) & 0x7)) { /* ipv6 payload length is not multiple of 8 octets */ - icmp6_param_problem(p, ICMP6_PP_FIELD, &ip6hdr->_plen); + icmp6_param_problem(p, ICMP6_PP_FIELD, LWIP_PACKED_CAST(const void *, &ip6hdr->_plen)); LWIP_DEBUGF(IP6_DEBUG, ("ip6_input: packet with invalid payload length dropped\n")); pbuf_free(p); IP6_STATS_INC(ip6.drop); diff --git a/src/include/lwip/arch.h b/src/include/lwip/arch.h index 488f9972..dafd500c 100644 --- a/src/include/lwip/arch.h +++ b/src/include/lwip/arch.h @@ -220,6 +220,11 @@ typedef int ssize_t; #define LWIP_PTR_NUMERIC_CAST(target_type, val) LWIP_CONST_CAST(target_type, val) #endif +/** Avoid warnings/errors related to implicitly casting away packed attributes by doing a explicit cast */ +#ifndef LWIP_PACKED_CAST +#define LWIP_PACKED_CAST(target_type, val) LWIP_CONST_CAST(target_type, val) +#endif + /** Allocates a memory buffer of specified size that is of sufficient size to align * its start address using LWIP_MEM_ALIGN. * You can declare your own version here e.g. to enforce alignment without adding