The branch main has been updated by tsoome: URL: https://cgit.FreeBSD.org/src/commit/?id=733da235aa6a3c71d06b92a41656bad07fada5e6
commit 733da235aa6a3c71d06b92a41656bad07fada5e6 Author: Toomas Soome <tso...@freebsd.org> AuthorDate: 2025-07-31 19:11:16 +0000 Commit: Toomas Soome <tso...@freebsd.org> CommitDate: 2025-07-31 22:04:32 +0000 libsa: errors with pointer conversion loader ip implementation is using pointer to structure ip to receive the packet and is using this pointer to cast on other data types (namely structure arphdr). Problem does arise when those data structures are declared with different alignment rules and when/if the compiler does check those rules. To work around and silence warnings, use void * generic pointer instead. Error seen with gcc 14 (-Werror=address-of-packed-member). Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D51662 --- stand/libsa/ip.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/stand/libsa/ip.c b/stand/libsa/ip.c index 2c2acf2eda16..6c7b0844b14d 100644 --- a/stand/libsa/ip.c +++ b/stand/libsa/ip.c @@ -181,6 +181,7 @@ readipv4(struct iodesc *d, void **pkt, void **payload, time_t tleft, ssize_t n; size_t hlen; struct ether_header *eh; + void *buf; struct ip *ip; struct udphdr *uh; uint16_t etype; /* host order */ @@ -195,7 +196,7 @@ readipv4(struct iodesc *d, void **pkt, void **payload, time_t tleft, ip = NULL; ptr = NULL; - n = readether(d, (void **)&ptr, (void **)&ip, tleft, &etype); + n = readether(d, (void **)&ptr, (void **)&buf, tleft, &etype); if (n == -1 || n < sizeof(*ip) + sizeof(*uh)) { free(ptr); return (-1); @@ -205,7 +206,7 @@ readipv4(struct iodesc *d, void **pkt, void **payload, time_t tleft, /* Need to respond to ARP requests. */ if (etype == ETHERTYPE_ARP) { - struct arphdr *ah = (void *)ip; + struct arphdr *ah = buf; if (ah->ar_op == htons(ARPOP_REQUEST)) { /* Send ARP reply */ arp_reply(d, ah); @@ -224,6 +225,7 @@ readipv4(struct iodesc *d, void **pkt, void **payload, time_t tleft, return (-1); } + ip = buf; /* Check ip header */ if (ip->ip_v != IPVERSION || /* half char */ ip->ip_p != proto) {