summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorsr2013-01-10 12:32:44 +0100
committersr2013-01-10 12:32:44 +0100
commitad0405a1745594aeab71beb52ee23bac6f514138 (patch)
tree3ccfe55463cb0e8de84178d6b2f692ce1e2fd521
parent[SERVER] Ignore trusted server if soft- or hard-deadline for an image has bee... (diff)
downloaddnbd3-ad0405a1745594aeab71beb52ee23bac6f514138.tar.gz
dnbd3-ad0405a1745594aeab71beb52ee23bac6f514138.tar.xz
dnbd3-ad0405a1745594aeab71beb52ee23bac6f514138.zip
[SERVER] Fix double-free/dangling pointer related to deleting a trusted namespace
-rw-r--r--src/server/saveload.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/server/saveload.c b/src/server/saveload.c
index 8c48304..51869b1 100644
--- a/src/server/saveload.c
+++ b/src/server/saveload.c
@@ -667,6 +667,10 @@ int dnbd3_add_trusted_namespace(dnbd3_trusted_server_t *server, char *namespace,
/**
* Remove trusted namespace from given trusted server.
* !! Lock before calling this function !!
+ * @return TRUE if element could be removed
+ * !! Assume that the _trusted_servers list changed after calling this,
+ * since the trusted server gets removed from it if this was the last namespace
+ * it contained
*/
int dnbd3_del_trusted_namespace(dnbd3_trusted_server_t *server, char *namespace)
{
@@ -688,6 +692,7 @@ int dnbd3_del_trusted_namespace(dnbd3_trusted_server_t *server, char *namespace)
if (server->namespaces == NULL)
{
g_free(server->comment);
+ _trusted_servers = g_slist_remove(_trusted_servers, server);
free(server);
}
return TRUE;