@@ -483,6 +483,7 @@ static void expr_evaluate_bits(struct eval_ctx *ctx, struct expr **exprp)
mask = constant_expr_alloc(&expr->location, expr_basetype(expr),
BYTEORDER_HOST_ENDIAN, masklen, NULL);
mpz_set(mask->value, bitmask);
+ mpz_clear(bitmask);
and = binop_expr_alloc(&expr->location, OP_AND, expr, mask);
and->dtype = expr->dtype;
@@ -2290,6 +2291,7 @@ static int stmt_evaluate_payload(struct eval_ctx *ctx, struct stmt *stmt)
mpz_export_data(data, bitmask, BYTEORDER_HOST_ENDIAN, sizeof(data));
mask = constant_expr_alloc(&payload->location, expr_basetype(payload),
BYTEORDER_HOST_ENDIAN, masklen, data);
+ mpz_clear(bitmask);
payload_bytes = payload_expr_alloc(&payload->location, NULL, 0);
payload_init_raw(payload_bytes, payload->payload.base,
@@ -2558,6 +2558,7 @@ static void stmt_payload_binop_postprocess(struct rule_pp_ctx *ctx)
mpz_init_bitmask(bitmask, payload->len);
mpz_xor(bitmask, bitmask, value->value);
mpz_set(value->value, bitmask);
+ mpz_clear(bitmask);
break;
case OP_OR: /* IIb */
break;
Some bitmask variables are not cleared. Signed-off-by: Jeremy Sowden <jeremy@azazel.net> --- src/evaluate.c | 2 ++ src/netlink_delinearize.c | 1 + 2 files changed, 3 insertions(+)