The branch main has been updated by arichardson:

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

commit bc596e563245d838a27e3c7aaf090caa49af1016
Author:     Alex Richardson <arichard...@freebsd.org>
AuthorDate: 2021-01-19 11:32:32 +0000
Commit:     Alex Richardson <arichard...@freebsd.org>
CommitDate: 2021-01-19 21:23:24 +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 267bd2118222..8d5097943080 100644
--- a/sys/netinet/libalias/alias.c
+++ b/sys/netinet/libalias/alias.c
@@ -274,9 +274,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 *);
@@ -655,8 +655,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
@@ -671,7 +671,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;
 
@@ -679,8 +679,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);
        }
@@ -688,7 +688,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)
 {
 /*
@@ -707,7 +707,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;
 
@@ -715,8 +715,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);
        }
@@ -1185,26 +1185,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);
        }
@@ -1212,15 +1212,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);
 }
@@ -1238,7 +1238,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;
@@ -1256,11 +1256,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);
@@ -1278,10 +1278,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   */
 )
 {
@@ -1301,39 +1301,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 */
@@ -1377,12 +1375,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;
                }
@@ -1399,7 +1397,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);
        }
 
@@ -1426,29 +1424,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 ? */
@@ -1456,17 +1454,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
@@ -1532,17 +1528,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);
@@ -1551,7 +1547,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 a9935f7aa812..671241212799 100644
--- a/sys/netinet/libalias/alias.h
+++ b/sys/netinet/libalias/alias.h
@@ -93,10 +93,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. */
 
@@ -119,9 +119,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 e05cc3da948f..8da9a7fe683a 100644
--- a/sys/netinet/libalias/alias_db.c
+++ b/sys/netinet/libalias/alias_db.c
@@ -1742,13 +1742,13 @@ 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 ff6c16f7d9eb..5919851a4019 100644
--- a/sys/netinet/libalias/alias_local.h
+++ b/sys/netinet/libalias/alias_local.h
@@ -322,8 +322,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 fc8e148d62d0..79d9db82914c 100644
--- a/sys/netinet/libalias/alias_proxy.c
+++ b/sys/netinet/libalias/alias_proxy.c
@@ -382,7 +382,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 c323edf4c499..beef2ff7fca5 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.
_______________________________________________
dev-commits-src-main@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/dev-commits-src-main
To unsubscribe, send any mail to "dev-commits-src-main-unsubscr...@freebsd.org"

Reply via email to