Re: [PATCH] daemon.c: avoid accessing ss_family member of struct sockaddr_storage
- From
Martin Storsjö <martin@martin.st>
- Date
- Mar 15, 2010, 21:37 UTC
- Message-ID
- <alpine.DEB.2.00.1003152336520.29993@cone.home.martin.st>
- In-Reply-To
- <XI3O9HirgFwPkEqC3RdYR4j56mg_uuJQZk1YFST6ukqbKXjgxaqJdNDHwlLXg5R_FVXWmWQSGmg@cipher.nrlssc.navy.mil>
On Mon, 15 Mar 2010, Brandon Casey wrote:
Show 19 quoted lines
> diff --git a/daemon.c b/daemon.c
> index 3769b6f..8a52fdc 100644
> --- a/daemon.c
> +++ b/daemon.c
> @@ -590,9 +590,11 @@ static int execute(struct sockaddr *addr)
> static int addrcmp(const struct sockaddr_storage *s1,
> const struct sockaddr_storage *s2)
> {
> - if (s1->ss_family != s2->ss_family)
> - return s1->ss_family - s2->ss_family;
> - if (s1->ss_family == AF_INET)
> + if (((const struct sockaddr*) s1)->sa_family !=
> + ((const struct sockaddr*) s2)->sa_family)
> + return ((const struct sockaddr*) s1)->sa_family -
> + ((const struct sockaddr*) s2)->sa_family;
> + if (((const struct sockaddr*) s1)->sa_family == AF_INET)
> return memcmp(&((struct sockaddr_in *)s1)->sin_addr,
> &((struct sockaddr_in *)s2)->sin_addr,
> sizeof(struct in_addr));Coming to think about it, would it simplify the code even more if the function were to take a const struct sockaddr* as a parameter instead? That would, on the other hand, require more casts where it's called, though...
// Martin