summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOndrej Zajicek (work) <santiago@crfreenet.org>2020-11-24 03:42:23 +0100
committerOndrej Zajicek (work) <santiago@crfreenet.org>2020-11-24 03:42:23 +0100
commit1678bc07467e6d977fc2f6bf830274ca92e0a6e5 (patch)
treefdbdc70d526b7dedabdabd9bed889f0fdc2e023e
parentc9ae81656f97bcc55910e80b6f00d3ee9383d848 (diff)
Fix some failed asserts due to add_tail()
When config structures are copied due to template application, we need to reset list node structure before calling add_tail(). Thanks to Mikael Magnusson for patches.
-rw-r--r--conf/conf.c1
-rw-r--r--nest/proto.c1
-rw-r--r--proto/static/static.c1
3 files changed, 3 insertions, 0 deletions
diff --git a/conf/conf.c b/conf/conf.c
index b21d5213..6f64b541 100644
--- a/conf/conf.c
+++ b/conf/conf.c
@@ -573,6 +573,7 @@ cfg_copy_list(list *dest, list *src, unsigned node_size)
{
dn = cfg_alloc(node_size);
memcpy(dn, sn, node_size);
+ memset(dn, 0, sizeof(node));
add_tail(dest, dn);
}
}
diff --git a/nest/proto.c b/nest/proto.c
index 41b3a6b9..748601c3 100644
--- a/nest/proto.c
+++ b/nest/proto.c
@@ -626,6 +626,7 @@ channel_copy_config(struct channel_config *src, struct proto_config *proto)
struct channel_config *dst = cfg_alloc(src->channel->config_size);
memcpy(dst, src, src->channel->config_size);
+ memset(&dst->n, 0, sizeof(node));
add_tail(&proto->channels, &dst->n);
CALL(src->channel->copy_config, dst, src);
diff --git a/proto/static/static.c b/proto/static/static.c
index 7b22d49b..941e916f 100644
--- a/proto/static/static.c
+++ b/proto/static/static.c
@@ -643,6 +643,7 @@ static_copy_config(struct proto_config *dest, struct proto_config *src)
{
dnh = cfg_alloc(sizeof(struct static_route));
memcpy(dnh, snh, sizeof(struct static_route));
+ memset(&dnh->n, 0, sizeof(node));
if (!drt)
add_tail(&d->routes, &(dnh->n));