From 3fae13ae9e36105d73ba012ea438366a8126e4f5 Mon Sep 17 00:00:00 2001 From: Donald Yandt Date: Sat, 2 Mar 2024 11:08:00 -0500 Subject: conntrackd: prevent memory loss if reallocation fails Vector data will be lost if reallocation fails, leading to undefined behaviour. Signed-off-by: Donald Yandt Signed-off-by: Pablo Neira Ayuso --- src/vector.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/vector.c b/src/vector.c index c81e7ce..92a5436 100644 --- a/src/vector.c +++ b/src/vector.c @@ -60,13 +60,16 @@ void vector_destroy(struct vector *v) int vector_add(struct vector *v, void *data) { + void *ptr; + if (v->cur_elems >= v->max_elems) { v->max_elems += DEFAULT_VECTOR_GROWTH; - v->data = realloc(v->data, v->max_elems * v->size); - if (v->data == NULL) { + ptr = realloc(v->data, v->max_elems * v->size); + if (!ptr) { v->max_elems -= DEFAULT_VECTOR_GROWTH; return -1; } + v->data = ptr; } memcpy(v->data + (v->size * v->cur_elems), data, v->size); v->cur_elems++; -- cgit v1.2.3