aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlns <matzeton@googlemail.com>2020-06-22 16:26:04 +0200
committerlns <matzeton@googlemail.com>2020-06-22 16:26:04 +0200
commitc3bd138805b9ef9f8cb9a5e02a371449f9871600 (patch)
treef0bd4a3d88ab45a9c917df9c9a847925c3011d8e
parentaf15e7f597ad03d541a43199b29e422971e48ed8 (diff)
fixed unaligned pointer access to packed member
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)); | ^~~
-rw-r--r--src/pdesc.c4
1 files changed, 3 insertions, 1 deletions
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 "