Fix matching table entry value. Use real table value instead of its index
in valuestate array. When opcode has size equal to ipfw_insn_u32, this means that it should additionally match value specified in d[0] with table entry value. ipfw_table_lookup() returns table value index, use TARG_VAL() macro to convert it to its value. The actual 32-bit value stored in the tag field of table_value structure, where all unspecified u32 values are kept. PR: 217262 Reviewed by: melifaro MFC after: 1 week Sponsored by: Yandex LLC
This commit is contained in:
parent
7d9ade5da1
commit
43b294a4db
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=314614
@ -1511,8 +1511,8 @@ do { \
|
||||
if (!match)
|
||||
break;
|
||||
if (cmdlen == F_INSN_SIZE(ipfw_insn_u32))
|
||||
match =
|
||||
((ipfw_insn_u32 *)cmd)->d[0] == v;
|
||||
match = ((ipfw_insn_u32 *)cmd)->d[0] ==
|
||||
TARG_VAL(chain, v, tag);
|
||||
else
|
||||
tablearg = v;
|
||||
} else if (is_ipv6) {
|
||||
@ -1524,7 +1524,8 @@ do { \
|
||||
sizeof(struct in6_addr),
|
||||
pkey, &v);
|
||||
if (cmdlen == F_INSN_SIZE(ipfw_insn_u32))
|
||||
match = ((ipfw_insn_u32 *)cmd)->d[0] == v;
|
||||
match = ((ipfw_insn_u32 *)cmd)->d[0] ==
|
||||
TARG_VAL(chain, v, tag);
|
||||
if (match)
|
||||
tablearg = v;
|
||||
}
|
||||
@ -1536,7 +1537,8 @@ do { \
|
||||
match = ipfw_lookup_table_extended(chain,
|
||||
cmd->arg1, 0, &args->f_id, &v);
|
||||
if (cmdlen == F_INSN_SIZE(ipfw_insn_u32))
|
||||
match = ((ipfw_insn_u32 *)cmd)->d[0] == v;
|
||||
match = ((ipfw_insn_u32 *)cmd)->d[0] ==
|
||||
TARG_VAL(chain, v, tag);
|
||||
if (match)
|
||||
tablearg = v;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user