5c26870cd5
- Rebase to version 1.4.8 + fixes from upstream
39 lines
1.2 KiB
Diff
39 lines
1.2 KiB
Diff
From 3be8c5c33b10ca581d292872e63157a2e9c2c7b4 Mon Sep 17 00:00:00 2001
|
|
From: Donald Yandt <donald.yandt@gmail.com>
|
|
Date: Sat, 2 Mar 2024 11:08:00 -0500
|
|
Subject: [PATCH] conntrackd: prevent memory loss if reallocation fails
|
|
|
|
Vector data will be lost if reallocation fails, leading to undefined
|
|
behaviour.
|
|
|
|
Signed-off-by: Donald Yandt <donald.yandt@gmail.com>
|
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|
(cherry picked from commit 3fae13ae9e36105d73ba012ea438366a8126e4f5)
|
|
---
|
|
src/vector.c | 7 +++++--
|
|
1 file changed, 5 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/src/vector.c b/src/vector.c
|
|
index c81e7ce8412c6..92a54367d108a 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++;
|