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
This commit is contained in:
parent
4bbfe4bf08
commit
bc596e5632
@ -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 */
|
||||
)
|
||||
{
|
||||
|
@ -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 *);
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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);
|
||||
|
@ -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));
|
||||
|
@ -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.
|
||||
|
Loading…
x
Reference in New Issue
Block a user