diff options
author | sr | 2013-01-10 12:32:44 +0100 |
---|---|---|
committer | sr | 2013-01-10 12:32:44 +0100 |
commit | ad0405a1745594aeab71beb52ee23bac6f514138 (patch) | |
tree | 3ccfe55463cb0e8de84178d6b2f692ce1e2fd521 | |
parent | [SERVER] Ignore trusted server if soft- or hard-deadline for an image has bee... (diff) | |
download | dnbd3-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.c | 5 |
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; |