The branch stable/13 has been updated by jhb:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=5bd5219d15c0408eac7083317a20706e23e9bea8

commit 5bd5219d15c0408eac7083317a20706e23e9bea8
Author:     John Baldwin <j...@freebsd.org>
AuthorDate: 2022-02-12 00:04:52 +0000
Commit:     John Baldwin <j...@freebsd.org>
CommitDate: 2022-05-11 00:11:27 +0000

    Cast pointer to uintptr_t to avoid alignment warnings.
    
    Both struct ip and struct udphdr both have an aligment of 2, but the
    cast from struct ip to a uint32_t pointer confused GCC 9 into raising
    the required alignment to 4 and then raising a
    -Waddress-of-packed-member error when casting to struct udphdr.
    
    Reviewed by:    imp
    Differential Revision:  https://reviews.freebsd.org/D31941
    
    (cherry picked from commit dba02df30d536922727a7ea509514462452a247a)
---
 tests/sys/netinet/libalias/util.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/tests/sys/netinet/libalias/util.c 
b/tests/sys/netinet/libalias/util.c
index 681c3b20ee41..14ba196a59a5 100644
--- a/tests/sys/netinet/libalias/util.c
+++ b/tests/sys/netinet/libalias/util.c
@@ -109,9 +109,9 @@ ip_packet(u_char protocol, size_t len)
 
 struct udphdr *
 set_udp(struct ip *p, u_short sport, u_short dport) {
-       uint32_t *up = (void *)p;
-       struct udphdr *u = (void *)&(up[p->ip_hl]);
-       int payload = ntohs(p->ip_len) - 4*p->ip_hl;
+       int hlen = p->ip_hl << 2;
+       struct udphdr *u = (struct udphdr *)((uintptr_t)p + hlen);
+       int payload = ntohs(p->ip_len) - hlen;
 
        REQUIRE(payload >= (int)sizeof(*u));
        p->ip_p = IPPROTO_UDP;

Reply via email to