From c3bd138805b9ef9f8cb9a5e02a371449f9871600 Mon Sep 17 00:00:00 2001 From: lns Date: Mon, 22 Jun 2020 16:26:04 +0200 Subject: fixed unaligned pointer access to packed member MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pdesc.c:233:2: warning: converting a packed ‘icmp_echo_packet_t’ pointer (alignment 1) to a ‘uint16_t’ {aka ‘short unsigned int’} pointer (alignment 2) may result in an unaligned pointer value [-Waddress-of-packed-member] 233 | pkt->checksum = htons(calc_icmp_checksum((uint16_t*)pkt, pkt_len)); | ^~~ --- src/pdesc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/pdesc.c b/src/pdesc.c index 78bf1cd..bcae1c4 100644 --- a/src/pdesc.c +++ b/src/pdesc.c @@ -197,6 +197,7 @@ int queue_packet(int sock_fd, proxy_desc_t *cur, char *buf, size_t bufsiz, icmp_echo_packet_t *pkt = 0; ping_tunnel_pkt_t *pt_pkt = 0; uint16_t ack_val; + uint8_t * icmp_chksm_ptr; assert(sock_fd >= 0); assert(cur); @@ -230,7 +231,8 @@ int queue_packet(int sock_fd, proxy_desc_t *cur, char *buf, size_t bufsiz, /* Copy user data */ if (buf && bufsiz > 0) memcpy(pt_pkt->data, buf, bufsiz); - pkt->checksum = htons(calc_icmp_checksum((uint16_t*)pkt, pkt_len)); + icmp_chksm_ptr = (uint8_t*)pkt; + pkt->checksum = htons(calc_icmp_checksum((uint16_t*)icmp_chksm_ptr, pkt_len)); /* Send it! */ pt_log(kLog_sendrecv, "Send: %4d [%4d] bytes " -- cgit v1.2.3