diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2019-06-10 17:19:49 +0200 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2019-06-10 17:35:13 +0200 |
commit | 371c3a0bc3c2bf027127b27a15419d1e18a530d6 (patch) | |
tree | c86ef3d0a897e40e56393563c43f3afe92c0cee6 /src | |
parent | aaf0167f2615372c1baaff327d1fb89d4297a52a (diff) |
netlink_delinearize: release expressions in context registers
netlink_release_registers() needs to go a bit further to release the
expressions in the register array. This should be safe since
netlink_get_register() clones expressions in the context registers.
Reported-by: Václav Zindulka <vaclav.zindulka@tlapnet.cz>
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r-- | src/netlink_delinearize.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/src/netlink_delinearize.c b/src/netlink_delinearize.c index c018e78b..a1c775e6 100644 --- a/src/netlink_delinearize.c +++ b/src/netlink_delinearize.c @@ -63,7 +63,7 @@ static void netlink_set_register(struct netlink_parse_ctx *ctx, enum nft_registers reg, struct expr *expr) { - if (reg == NFT_REG_VERDICT || reg > 1 + NFT_REG32_15 - NFT_REG32_00) { + if (reg == NFT_REG_VERDICT || reg > MAX_REGS) { netlink_error(ctx, &expr->location, "Invalid destination register %u", reg); expr_free(expr); @@ -82,7 +82,7 @@ static struct expr *netlink_get_register(struct netlink_parse_ctx *ctx, { struct expr *expr; - if (reg == NFT_REG_VERDICT || reg > 1 + NFT_REG32_15 - NFT_REG32_00) { + if (reg == NFT_REG_VERDICT || reg > MAX_REGS) { netlink_error(ctx, loc, "Invalid source register %u", reg); return NULL; } @@ -98,7 +98,7 @@ static void netlink_release_registers(struct netlink_parse_ctx *ctx) { int i; - for (i = 0; i <= NFT_REG_MAX; i++) + for (i = 0; i < MAX_REGS; i++) expr_free(ctx->registers[i]); } |