Don't assume !IPv6 is IPv4 in ipfw(8) add_src() and add_dst().

Submitted by:	Neel Chauhan <neel AT neelc DOT org>
MFC after:	2 weeks
Differential Revision:	https://reviews.freebsd.org/D21812
This commit is contained in:
Alexander V. Chernikov 2020-03-10 20:30:21 +00:00
parent 4d4aa25694
commit 8149b12da1

View File

@ -3717,11 +3717,10 @@ add_src(ipfw_insn *cmd, char *av, u_char proto, int cblen, struct tidx *tstate)
if (proto == IPPROTO_IPV6 || strcmp(av, "me6") == 0 ||
inet_pton(AF_INET6, host, &a) == 1)
ret = add_srcip6(cmd, av, cblen, tstate);
/* XXX: should check for IPv4, not !IPv6 */
if (ret == NULL && (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
inet_pton(AF_INET6, host, &a) != 1))
else if (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
inet_pton(AF_INET, host, &a) == 1)
ret = add_srcip(cmd, av, cblen, tstate);
if (ret == NULL && strcmp(av, "any") != 0)
else if (ret == NULL && strcmp(av, "any") != 0)
ret = cmd;
return ret;
@ -3748,11 +3747,10 @@ add_dst(ipfw_insn *cmd, char *av, u_char proto, int cblen, struct tidx *tstate)
if (proto == IPPROTO_IPV6 || strcmp(av, "me6") == 0 ||
inet_pton(AF_INET6, host, &a) == 1)
ret = add_dstip6(cmd, av, cblen, tstate);
/* XXX: should check for IPv4, not !IPv6 */
if (ret == NULL && (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
inet_pton(AF_INET6, host, &a) != 1))
else if (proto == IPPROTO_IP || strcmp(av, "me") == 0 ||
inet_pton(AF_INET, host, &a) == 1)
ret = add_dstip(cmd, av, cblen, tstate);
if (ret == NULL && strcmp(av, "any") != 0)
else if (ret == NULL && strcmp(av, "any") != 0)
ret = cmd;
return ret;