Re: [PATCH nft 2/2] segtree: fix decomposition of unclosed intervals containing address prefixes

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Jeremy Sowden <jeremy@xxxxxxxxxx> wrote:
> @@ -619,24 +622,12 @@ void interval_map_decompose(struct expr *set)
>  
>  	if (!mpz_cmp(i->value, expr_value(low)->value)) {
>  		expr_free(i);
> -		i = low;
> +		compound_expr_add(set, low);
>  	} else {
> -		i = range_expr_alloc(&low->location,
> -				     expr_clone(expr_value(low)), i);
> -		i = set_elem_expr_alloc(&low->location, i);
> -		if (low->etype == EXPR_MAPPING) {
> -			i = mapping_expr_alloc(&i->location, i,
> -					       expr_clone(low->right));
> -			interval_expr_copy(i->left, low->left);
> -		} else {
> -			interval_expr_copy(i, low);
> -		}
> -		i->flags |= EXPR_F_KERNEL;
> -
> +		add_interval(set, low, i);
>  		expr_free(low);
>  	}
>  
> -	compound_expr_add(set, i);

This results in a memory leak:

__interceptor_malloc libsanitizer/asan/asan_malloc_linux.cpp:145
xmalloc src/utils.c:36
xzalloc src/utils.c:75
expr_alloc src/expression.c:46
constant_expr_alloc src/expression.c:420
interval_map_decompose src/segtree.c:619

Before, 'i' was assigned to the compund expr, but thats no longer the
case.

Does this look good to you?  If so, I will sqash this before applying:

diff --git a/src/segtree.c b/src/segtree.c
--- a/src/segtree.c
+++ b/src/segtree.c
@@ -621,13 +621,14 @@ void interval_map_decompose(struct expr *set)
 	mpz_bitmask(i->value, i->len);
 
 	if (!mpz_cmp(i->value, expr_value(low)->value)) {
-		expr_free(i);
 		compound_expr_add(set, low);
 	} else {
 		add_interval(set, low, i);
 		expr_free(low);
 	}
 
+	expr_free(i);
+
 out:
 	if (catchall)
 		compound_expr_add(set, catchall);



[Index of Archives]     [Netfitler Users]     [Berkeley Packet Filter]     [LARTC]     [Bugtraq]     [Yosemite Forum]

  Powered by Linux