pf: Add missing byte-order swap to pf_match_addr_range

Without this, rules using address ranges (e.g. "10.1.1.1 - 10.1.1.5") did not
match addresses correctly on little-endian systems.

PR:		211796
Obtained from:	OpenBSD (sthen)
MFC after:	3 days
This commit is contained in:
Kristof Provost 2016-08-15 12:13:14 +00:00
parent 07410fe461
commit 0df377cbb8

View File

@ -2600,8 +2600,8 @@ pf_match_addr_range(struct pf_addr *b, struct pf_addr *e,
switch (af) {
#ifdef INET
case AF_INET:
if ((a->addr32[0] < b->addr32[0]) ||
(a->addr32[0] > e->addr32[0]))
if ((ntohl(a->addr32[0]) < ntohl(b->addr32[0])) ||
(ntohl(a->addr32[0]) > ntohl(e->addr32[0])))
return (0);
break;
#endif /* INET */
@ -2611,15 +2611,15 @@ pf_match_addr_range(struct pf_addr *b, struct pf_addr *e,
/* check a >= b */
for (i = 0; i < 4; ++i)
if (a->addr32[i] > b->addr32[i])
if (ntohl(a->addr32[i]) > ntohl(b->addr32[i]))
break;
else if (a->addr32[i] < b->addr32[i])
else if (ntohl(a->addr32[i]) < ntohl(b->addr32[i]))
return (0);
/* check a <= e */
for (i = 0; i < 4; ++i)
if (a->addr32[i] < e->addr32[i])
if (ntohl(a->addr32[i]) < ntohl(e->addr32[i]))
break;
else if (a->addr32[i] > e->addr32[i])
else if (ntohl(a->addr32[i]) > ntohl(e->addr32[i]))
return (0);
break;
}