diff --git a/src/core/inet_chksum.c b/src/core/inet_chksum.c index 646074c6..e027169e 100644 --- a/src/core/inet_chksum.c +++ b/src/core/inet_chksum.c @@ -315,10 +315,10 @@ inet_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, addr = ip4_addr_get_u32(src); acc = (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); addr = ip4_addr_get_u32(dest); - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); /* fold down to 16 bits */ acc = FOLD_U32T(acc); acc = FOLD_U32T(acc); @@ -349,11 +349,11 @@ ip6_chksum_pseudo(struct pbuf *p, u8_t proto, u16_t proto_len, for (addr_part = 0; addr_part < 4; addr_part++) { addr = src->addr[addr_part]; - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); addr = dest->addr[addr_part]; - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); } /* fold down to 16 bits */ acc = FOLD_U32T(acc); @@ -461,10 +461,10 @@ inet_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, addr = ip4_addr_get_u32(src); acc = (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); addr = ip4_addr_get_u32(dest); - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); /* fold down to 16 bits */ acc = FOLD_U32T(acc); acc = FOLD_U32T(acc); @@ -497,11 +497,11 @@ ip6_chksum_pseudo_partial(struct pbuf *p, u8_t proto, u16_t proto_len, for (addr_part = 0; addr_part < 4; addr_part++) { addr = src->addr[addr_part]; - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); addr = dest->addr[addr_part]; - acc += (addr & 0xffffUL); - acc += ((addr >> 16) & 0xffffUL); + acc = (u32_t)(acc + (addr & 0xffffUL)); + acc = (u32_t)(acc + ((addr >> 16) & 0xffffUL)); } /* fold down to 16 bits */ acc = FOLD_U32T(acc); diff --git a/src/include/lwip/inet_chksum.h b/src/include/lwip/inet_chksum.h index 4e23d7f1..76893ef5 100644 --- a/src/include/lwip/inet_chksum.h +++ b/src/include/lwip/inet_chksum.h @@ -49,7 +49,7 @@ /** Split an u32_t in two u16_ts and add them up */ #ifndef FOLD_U32T -#define FOLD_U32T(u) (((u) >> 16) + ((u) & 0x0000ffffUL)) +#define FOLD_U32T(u) ((u32_t)(((u) >> 16) + ((u) & 0x0000ffffUL))) #endif #if LWIP_CHECKSUM_ON_COPY