Date: Sun, 30 May 2021 14:34:29 GMT From: Lutz Donnerhacke <donner@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Subject: git: 41301f352de6 - stable/12 - libalias: Fix -Wcast-align compiler warnings Message-ID: <202105301434.14UEYTA1036260@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch stable/12 has been updated by donner: URL: https://cgit.FreeBSD.org/src/commit/?id=41301f352de65fcc3db5cc0364ca6cec07a8f7b0 commit 41301f352de65fcc3db5cc0364ca6cec07a8f7b0 Author: Alex Richardson <arichardson@FreeBSD.org> AuthorDate: 2021-01-19 11:32:32 +0000 Commit: Lutz Donnerhacke <donner@FreeBSD.org> CommitDate: 2021-05-30 14:31:38 +0000 libalias: Fix -Wcast-align compiler warnings This fixes -Wcast-align warnings caused by the underaligned `struct ip`. This also silences them in the public functions by changing the function signature from char * to void *. This is source and binary compatible and avoids the -Wcast-align warning. Reviewed By: ae, gbe (manpages) Differential Revision: https://reviews.freebsd.org/D27882 --- sys/netinet/libalias/alias.c | 102 ++++++++++++++++++------------------- sys/netinet/libalias/alias.h | 14 ++--- sys/netinet/libalias/alias_db.c | 4 +- sys/netinet/libalias/alias_local.h | 4 +- sys/netinet/libalias/alias_proxy.c | 2 +- sys/netinet/libalias/libalias.3 | 16 +++--- 6 files changed, 69 insertions(+), 73 deletions(-) diff --git a/sys/netinet/libalias/alias.c b/sys/netinet/libalias/alias.c index 59e20d0470df..50545fbc037b 100644 --- a/sys/netinet/libalias/alias.c +++ b/sys/netinet/libalias/alias.c @@ -279,9 +279,9 @@ static int IcmpAliasOut2(struct libalias *, struct ip *); static int IcmpAliasOut(struct libalias *, struct ip *, int create); static int ProtoAliasIn(struct libalias *la, struct in_addr ip_src, - struct in_addr *ip_dst, u_char ip_p, u_short *ip_sum); -static int ProtoAliasOut(struct libalias *la, struct in_addr *ip_src, - struct in_addr ip_dst, u_char ip_p, u_short *ip_sum, + struct ip *pip, u_char ip_p, u_short *ip_sum); +static int ProtoAliasOut(struct libalias *la, struct ip *pip, + struct in_addr ip_dst, u_char ip_p, u_short *ip_sum, int create); static int UdpAliasIn(struct libalias *, struct ip *); @@ -665,8 +665,8 @@ IcmpAliasOut(struct libalias *la, struct ip *pip, int create) } static int -ProtoAliasIn(struct libalias *la, struct in_addr ip_src, - struct in_addr *ip_dst, u_char ip_p, u_short *ip_sum) +ProtoAliasIn(struct libalias *la, struct in_addr ip_src, + struct ip *pip, u_char ip_p, u_short *ip_sum) { /* Handle incoming IP packets. The @@ -681,7 +681,7 @@ ProtoAliasIn(struct libalias *la, struct in_addr ip_src, if (la->packetAliasMode & PKT_ALIAS_PROXY_ONLY) return (PKT_ALIAS_OK); - lnk = FindProtoIn(la, ip_src, *ip_dst, ip_p); + lnk = FindProtoIn(la, ip_src, pip->ip_dst, ip_p); if (lnk != NULL) { struct in_addr original_address; @@ -689,8 +689,8 @@ ProtoAliasIn(struct libalias *la, struct in_addr ip_src, /* Restore original IP address */ DifferentialChecksum(ip_sum, - &original_address, ip_dst, 2); - *ip_dst = original_address; + &original_address, &pip->ip_dst, 2); + pip->ip_dst = original_address; return (PKT_ALIAS_OK); } @@ -698,7 +698,7 @@ ProtoAliasIn(struct libalias *la, struct in_addr ip_src, } static int -ProtoAliasOut(struct libalias *la, struct in_addr *ip_src, +ProtoAliasOut(struct libalias *la, struct ip *pip, struct in_addr ip_dst, u_char ip_p, u_short *ip_sum, int create) { /* @@ -717,7 +717,7 @@ ProtoAliasOut(struct libalias *la, struct in_addr *ip_src, if (!create) return (PKT_ALIAS_IGNORED); - lnk = FindProtoOut(la, *ip_src, ip_dst, ip_p); + lnk = FindProtoOut(la, pip->ip_src, ip_dst, ip_p); if (lnk != NULL) { struct in_addr alias_address; @@ -725,8 +725,8 @@ ProtoAliasOut(struct libalias *la, struct in_addr *ip_src, /* Change source address */ DifferentialChecksum(ip_sum, - &alias_address, ip_src, 2); - *ip_src = alias_address; + &alias_address, &pip->ip_src, 2); + pip->ip_src = alias_address; return (PKT_ALIAS_OK); } @@ -1201,26 +1201,26 @@ saved and recalled when a header fragment is seen. */ /* Local prototypes */ -static int FragmentIn(struct libalias *la, struct in_addr ip_src, - struct in_addr *ip_dst, u_short ip_id, u_short *ip_sum); -static int FragmentOut(struct libalias *, struct in_addr *ip_src, +static int FragmentIn(struct libalias *la, struct in_addr ip_src, + struct ip *pip, u_short ip_id, u_short *ip_sum); +static int FragmentOut(struct libalias *, struct ip *pip, u_short *ip_sum); static int -FragmentIn(struct libalias *la, struct in_addr ip_src, struct in_addr *ip_dst, +FragmentIn(struct libalias *la, struct in_addr ip_src, struct ip *pip, u_short ip_id, u_short *ip_sum) { struct alias_link *lnk; LIBALIAS_LOCK_ASSERT(la); - lnk = FindFragmentIn2(la, ip_src, *ip_dst, ip_id); + lnk = FindFragmentIn2(la, ip_src, pip->ip_dst, ip_id); if (lnk != NULL) { struct in_addr original_address; GetFragmentAddr(lnk, &original_address); DifferentialChecksum(ip_sum, - &original_address, ip_dst, 2); - *ip_dst = original_address; + &original_address, &pip->ip_dst, 2); + pip->ip_dst = original_address; return (PKT_ALIAS_OK); } @@ -1228,15 +1228,15 @@ FragmentIn(struct libalias *la, struct in_addr ip_src, struct in_addr *ip_dst, } static int -FragmentOut(struct libalias *la, struct in_addr *ip_src, u_short *ip_sum) +FragmentOut(struct libalias *la, struct ip *pip, u_short *ip_sum) { struct in_addr alias_address; LIBALIAS_LOCK_ASSERT(la); - alias_address = FindAliasAddress(la, *ip_src); + alias_address = FindAliasAddress(la, pip->ip_src); DifferentialChecksum(ip_sum, - &alias_address, ip_src, 2); - *ip_src = alias_address; + &alias_address, &pip->ip_src, 2); + pip->ip_src = alias_address; return (PKT_ALIAS_OK); } @@ -1259,7 +1259,7 @@ FragmentOut(struct libalias *la, struct in_addr *ip_src, u_short *ip_sum) */ int -LibAliasSaveFragment(struct libalias *la, char *ptr) +LibAliasSaveFragment(struct libalias *la, void *ptr) { int iresult; struct alias_link *lnk; @@ -1277,11 +1277,11 @@ LibAliasSaveFragment(struct libalias *la, char *ptr) return (iresult); } -char * -LibAliasGetFragment(struct libalias *la, char *ptr) +void * +LibAliasGetFragment(struct libalias *la, void *ptr) { struct alias_link *lnk; - char *fptr; + void *fptr; struct ip *pip; LIBALIAS_LOCK(la); @@ -1299,10 +1299,10 @@ LibAliasGetFragment(struct libalias *la, char *ptr) } void -LibAliasFragmentIn(struct libalias *la, char *ptr, /* Points to correctly +LibAliasFragmentIn(struct libalias *la, void *ptr, /* Points to correctly * de-aliased header * fragment */ - char *ptr_fragment /* Points to fragment which must be + void *ptr_fragment /* Points to fragment which must be * de-aliased */ ) { @@ -1322,39 +1322,37 @@ LibAliasFragmentIn(struct libalias *la, char *ptr, /* Points to correctly /* Local prototypes */ static int -LibAliasOutLocked(struct libalias *la, char *ptr, +LibAliasOutLocked(struct libalias *la, struct ip *pip, int maxpacketsize, int create); static int -LibAliasInLocked(struct libalias *la, char *ptr, +LibAliasInLocked(struct libalias *la, struct ip *pip, int maxpacketsize); int -LibAliasIn(struct libalias *la, char *ptr, int maxpacketsize) +LibAliasIn(struct libalias *la, void *ptr, int maxpacketsize) { int res; LIBALIAS_LOCK(la); - res = LibAliasInLocked(la, ptr, maxpacketsize); + res = LibAliasInLocked(la, (struct ip *)ptr, maxpacketsize); LIBALIAS_UNLOCK(la); return (res); } static int -LibAliasInLocked(struct libalias *la, char *ptr, int maxpacketsize) +LibAliasInLocked(struct libalias *la, struct ip *pip, int maxpacketsize) { struct in_addr alias_addr; - struct ip *pip; int iresult; if (la->packetAliasMode & PKT_ALIAS_REVERSE) { la->packetAliasMode &= ~PKT_ALIAS_REVERSE; - iresult = LibAliasOutLocked(la, ptr, maxpacketsize, 1); + iresult = LibAliasOutLocked(la, pip, maxpacketsize, 1); la->packetAliasMode |= PKT_ALIAS_REVERSE; goto getout; } HouseKeeping(la); ClearCheckNewLink(la); - pip = (struct ip *)ptr; alias_addr = pip->ip_dst; /* Defense against mangled packets */ @@ -1398,12 +1396,12 @@ LibAliasInLocked(struct libalias *la, char *ptr, int maxpacketsize) if (error == 0) iresult = PKT_ALIAS_OK; else - iresult = ProtoAliasIn(la, pip->ip_src, - &pip->ip_dst, pip->ip_p, &pip->ip_sum); + iresult = ProtoAliasIn(la, pip->ip_src, + pip, pip->ip_p, &pip->ip_sum); } break; default: - iresult = ProtoAliasIn(la, pip->ip_src, &pip->ip_dst, + iresult = ProtoAliasIn(la, pip->ip_src, pip, pip->ip_p, &pip->ip_sum); break; } @@ -1420,7 +1418,7 @@ LibAliasInLocked(struct libalias *la, char *ptr, int maxpacketsize) } } } else { - iresult = FragmentIn(la, pip->ip_src, &pip->ip_dst, pip->ip_id, + iresult = FragmentIn(la, pip->ip_src, pip, pip->ip_id, &pip->ip_sum); } @@ -1449,29 +1447,29 @@ getout: #define UNREG_ADDR_CGN_UPPER 0x647fffff int -LibAliasOut(struct libalias *la, char *ptr, int maxpacketsize) +LibAliasOut(struct libalias *la, void *ptr, int maxpacketsize) { int res; LIBALIAS_LOCK(la); - res = LibAliasOutLocked(la, ptr, maxpacketsize, 1); + res = LibAliasOutLocked(la, (struct ip *)ptr, maxpacketsize, 1); LIBALIAS_UNLOCK(la); return (res); } int -LibAliasOutTry(struct libalias *la, char *ptr, int maxpacketsize, int create) +LibAliasOutTry(struct libalias *la, void *ptr, int maxpacketsize, int create) { int res; LIBALIAS_LOCK(la); - res = LibAliasOutLocked(la, ptr, maxpacketsize, create); + res = LibAliasOutLocked(la, (struct ip *)ptr, maxpacketsize, create); LIBALIAS_UNLOCK(la); return (res); } static int -LibAliasOutLocked(struct libalias *la, char *ptr, /* valid IP packet */ +LibAliasOutLocked(struct libalias *la, struct ip *pip, /* valid IP packet */ int maxpacketsize, /* How much the packet data may grow (FTP * and IRC inline changes) */ int create /* Create new entries ? */ @@ -1479,17 +1477,15 @@ LibAliasOutLocked(struct libalias *la, char *ptr, /* valid IP packet */ { int iresult; struct in_addr addr_save; - struct ip *pip; if (la->packetAliasMode & PKT_ALIAS_REVERSE) { la->packetAliasMode &= ~PKT_ALIAS_REVERSE; - iresult = LibAliasInLocked(la, ptr, maxpacketsize); + iresult = LibAliasInLocked(la, pip, maxpacketsize); la->packetAliasMode |= PKT_ALIAS_REVERSE; goto getout; } HouseKeeping(la); ClearCheckNewLink(la); - pip = (struct ip *)ptr; /* Defense against mangled packets */ if (ntohs(pip->ip_len) > maxpacketsize @@ -1555,17 +1551,17 @@ LibAliasOutLocked(struct libalias *la, char *ptr, /* valid IP packet */ if (error == 0) iresult = PKT_ALIAS_OK; else - iresult = ProtoAliasOut(la, &pip->ip_src, + iresult = ProtoAliasOut(la, pip, pip->ip_dst, pip->ip_p, &pip->ip_sum, create); } break; default: - iresult = ProtoAliasOut(la, &pip->ip_src, + iresult = ProtoAliasOut(la, pip, pip->ip_dst, pip->ip_p, &pip->ip_sum, create); break; } } else { - iresult = FragmentOut(la, &pip->ip_src, &pip->ip_sum); + iresult = FragmentOut(la, pip, &pip->ip_sum); } SetDefaultAliasAddress(la, addr_save); @@ -1574,7 +1570,7 @@ getout: } int -LibAliasUnaliasOut(struct libalias *la, char *ptr, /* valid IP packet */ +LibAliasUnaliasOut(struct libalias *la, void *ptr, /* valid IP packet */ int maxpacketsize /* for error checking */ ) { diff --git a/sys/netinet/libalias/alias.h b/sys/netinet/libalias/alias.h index c252c823ced8..e712fb41628c 100644 --- a/sys/netinet/libalias/alias.h +++ b/sys/netinet/libalias/alias.h @@ -94,10 +94,10 @@ unsigned int void LibAliasUninit(struct libalias *); /* Packet Handling functions. */ -int LibAliasIn (struct libalias *, char *_ptr, int _maxpacketsize); -int LibAliasOut(struct libalias *, char *_ptr, int _maxpacketsize); -int LibAliasOutTry(struct libalias *, char *_ptr, int _maxpacketsize, int _create); -int LibAliasUnaliasOut(struct libalias *, char *_ptr, int _maxpacketsize); +int LibAliasIn (struct libalias *, void *_ptr, int _maxpacketsize); +int LibAliasOut(struct libalias *, void *_ptr, int _maxpacketsize); +int LibAliasOutTry(struct libalias *, void *_ptr, int _maxpacketsize, int _create); +int LibAliasUnaliasOut(struct libalias *, void *_ptr, int _maxpacketsize); /* Port and address redirection functions. */ @@ -120,9 +120,9 @@ LibAliasRedirectProto(struct libalias *, struct in_addr _src_addr, unsigned char _proto); /* Fragment Handling functions. */ -void LibAliasFragmentIn(struct libalias *, char *_ptr, char *_ptr_fragment); -char *LibAliasGetFragment(struct libalias *, char *_ptr); -int LibAliasSaveFragment(struct libalias *, char *_ptr); +void LibAliasFragmentIn(struct libalias *, void *_ptr, void *_ptr_fragment); +void *LibAliasGetFragment(struct libalias *, void *_ptr); +int LibAliasSaveFragment(struct libalias *, void *_ptr); /* Miscellaneous functions. */ int LibAliasCheckNewLink(struct libalias *); diff --git a/sys/netinet/libalias/alias_db.c b/sys/netinet/libalias/alias_db.c index 9eb6901ed5bc..4569a9dec122 100644 --- a/sys/netinet/libalias/alias_db.c +++ b/sys/netinet/libalias/alias_db.c @@ -1797,14 +1797,14 @@ GetFragmentAddr(struct alias_link *lnk, struct in_addr *src_addr) void -SetFragmentPtr(struct alias_link *lnk, char *fptr) +SetFragmentPtr(struct alias_link *lnk, void *fptr) { lnk->data.frag_ptr = fptr; } void -GetFragmentPtr(struct alias_link *lnk, char **fptr) +GetFragmentPtr(struct alias_link *lnk, void **fptr) { *fptr = lnk->data.frag_ptr; } diff --git a/sys/netinet/libalias/alias_local.h b/sys/netinet/libalias/alias_local.h index 94eb26978658..d6fe21869f1e 100644 --- a/sys/netinet/libalias/alias_local.h +++ b/sys/netinet/libalias/alias_local.h @@ -327,8 +327,8 @@ FindNewPortGroup(struct libalias *la, struct in_addr _dst_addr, struct in_addr _ u_char _proto, u_char _align); void GetFragmentAddr(struct alias_link *_lnk, struct in_addr *_src_addr); void SetFragmentAddr(struct alias_link *_lnk, struct in_addr _src_addr); -void GetFragmentPtr(struct alias_link *_lnk, char **_fptr); -void SetFragmentPtr(struct alias_link *_lnk, char *fptr); +void GetFragmentPtr(struct alias_link *_lnk, void **_fptr); +void SetFragmentPtr(struct alias_link *_lnk, void *fptr); void SetStateIn(struct alias_link *_lnk, int _state); void SetStateOut(struct alias_link *_lnk, int _state); int GetStateIn (struct alias_link *_lnk); diff --git a/sys/netinet/libalias/alias_proxy.c b/sys/netinet/libalias/alias_proxy.c index a7b6b0371d01..ef2c8ee3e0ac 100644 --- a/sys/netinet/libalias/alias_proxy.c +++ b/sys/netinet/libalias/alias_proxy.c @@ -388,7 +388,7 @@ ProxyEncodeIpHeader(struct ip *pip, #define OPTION_LEN_BYTES 8 #define OPTION_LEN_INT16 4 #define OPTION_LEN_INT32 2 - u_char option[OPTION_LEN_BYTES]; + _Alignas(_Alignof(u_short)) u_char option[OPTION_LEN_BYTES]; #ifdef LIBALIAS_DEBUG fprintf(stdout, " ip cksum 1 = %x\n", (u_int) IpChecksum(pip)); diff --git a/sys/netinet/libalias/libalias.3 b/sys/netinet/libalias/libalias.3 index fe85730f095d..79b0dd15db97 100644 --- a/sys/netinet/libalias/libalias.3 +++ b/sys/netinet/libalias/libalias.3 @@ -25,7 +25,7 @@ .\" .\" $FreeBSD$ .\" -.Dd December 25, 2013 +.Dd January 1, 2020 .Dt LIBALIAS 3 .Os .Sh NAME @@ -311,7 +311,7 @@ comprise the minimal set of functions needed for a basic IP masquerading implementation. .Pp .Ft int -.Fn LibAliasIn "struct libalias *" "char *buffer" "int maxpacketsize" +.Fn LibAliasIn "struct libalias *" "void *buffer" "int maxpacketsize" .Bd -ragged -offset indent An incoming packet coming from a remote machine to the local network is de-aliased by this function. @@ -352,7 +352,7 @@ An internal error within the packet aliasing engine occurred. .Ed .Pp .Ft int -.Fn LibAliasOut "struct libalias *" "char *buffer" "int maxpacketsize" +.Fn LibAliasOut "struct libalias *" "void *buffer" "int maxpacketsize" .Bd -ragged -offset indent An outgoing packet coming from the local network to a remote machine is aliased by this function. @@ -770,7 +770,7 @@ Fragments which arrive before the header are saved and then retrieved once the header fragment has been resolved. .Pp .Ft int -.Fn LibAliasSaveFragment "struct libalias *" "char *ptr" +.Fn LibAliasSaveFragment "struct libalias *" "void *ptr" .Bd -ragged -offset indent When .Fn LibAliasIn @@ -794,8 +794,8 @@ if it was successful and if there was an error. .Ed .Pp -.Ft char * -.Fn LibAliasGetFragment "struct libalias *" "char *buffer" +.Ft void * +.Fn LibAliasGetFragment "struct libalias *" "void *buffer" .Bd -ragged -offset indent This function can be used to retrieve fragment pointers saved by .Fn LibAliasSaveFragment . @@ -816,7 +816,7 @@ available, at which time it returns .Ed .Pp .Ft void -.Fn LibAliasFragmentIn "struct libalias *" "char *header" "char *fragment" +.Fn LibAliasFragmentIn "struct libalias *" "void *header" "void *fragment" .Bd -ragged -offset indent When a fragment is retrieved with .Fn LibAliasGetFragment , @@ -896,7 +896,7 @@ will return zero. .Ed .Pp .Ft int -.Fn LibAliasUnaliasOut "struct libalias *" "char *buffer" "int maxpacketsize" +.Fn LibAliasUnaliasOut "struct libalias *" "void *buffer" "int maxpacketsize" .Bd -ragged -offset indent An outgoing packet, which has already been aliased, has its private address/port information restored by this function.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202105301434.14UEYTA1036260>