This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
pespin gerrit-no-reply at lists.osmocom.orgpespin has uploaded this change for review. ( https://gerrit.osmocom.org/c/osmo-ggsn/+/14980
Change subject: sgsnemu: Fix unaligned pointer access during ip/icmp checksum
......................................................................
sgsnemu: Fix unaligned pointer access during ip/icmp checksum
Catched by gcc 9.1.0:
osmo-ggsn/sgsnemu/sgsnemu.c:1294:2: error: converting a packed struct ip_ping pointer (alignment 1) to a uint16_t {aka short unsigned int} pointer (alignment 2) may result in an unaligned pointer value [-Werror=address-of-packed-member]
1294 | p = (uint16_t *) & pack;
Change-Id: I783f104c31234a07f2a13f6dbc577a71b25b36a7
---
M sgsnemu/sgsnemu.c
1 file changed, 12 insertions(+), 8 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/osmo-ggsn refs/changes/80/14980/1
diff --git a/sgsnemu/sgsnemu.c b/sgsnemu/sgsnemu.c
index 8e41031..4f1f844 100644
--- a/sgsnemu/sgsnemu.c
+++ b/sgsnemu/sgsnemu.c
@@ -1234,7 +1234,7 @@
{
struct ip_ping pack;
- uint16_t *p = (uint16_t *) & pack;
+ uint16_t v16;
uint8_t *p8 = (uint8_t *) & pack;
struct in_addr src;
unsigned int n;
@@ -1270,7 +1270,7 @@
pack.seq = htons(seq);
/* Generate ICMP payload */
- p8 = (uint8_t *) & pack + CREATEPING_IP + CREATEPING_ICMP;
+ p8 = (uint8_t *) &pack + CREATEPING_IP + CREATEPING_ICMP;
for (n = 0; n < (datasize); n++)
p8[n] = n;
@@ -1278,11 +1278,13 @@
gettimeofday(tp, &tz);
/* Calculate IP header checksum */
- p = (uint16_t *) & pack;
+ p8 = (uint8_t *) &pack;
count = CREATEPING_IP;
sum = 0;
while (count > 1) {
- sum += *p++;
+ memcpy(&v16, p8, 2);
+ sum += v16;
+ p8 += 2;
count -= 2;
}
while (sum >> 16)
@@ -1292,14 +1294,16 @@
/* Calculate ICMP checksum */
count = CREATEPING_ICMP + datasize; /* Length of ICMP message */
sum = 0;
- p = (uint16_t *) & pack;
- p += CREATEPING_IP / 2;
+ p8 = (uint8_t *) &pack;
+ p8 += CREATEPING_IP;
while (count > 1) {
- sum += *p++;
+ memcpy(&v16, p8, 2);
+ sum += v16;
+ p8 += 2;
count -= 2;
}
if (count > 0)
- sum += *(unsigned char *)p;
+ sum += *(unsigned char *)p8;
while (sum >> 16)
sum = (sum & 0xffff) + (sum >> 16);
pack.checksum = ~sum;
--
To view, visit https://gerrit.osmocom.org/c/osmo-ggsn/+/14980
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings
Gerrit-Project: osmo-ggsn
Gerrit-Branch: master
Gerrit-Change-Id: I783f104c31234a07f2a13f6dbc577a71b25b36a7
Gerrit-Change-Number: 14980
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin at sysmocom.de>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190729/c605fa97/attachment.htm>