Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-12-SP1:Update
xen.6121
xs-02-get_parent-context.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File xs-02-get_parent-context.patch of Package xen.6121
commit f304adbd5e1047b36fb64e98ad400fa17084b9cd Author: Juergen Gross <jgross@suse.com> Date: Tue Jul 19 13:30:43 2016 +0200 xenstore: add explicit memory context parameter to get_parent() Add a parameter to xenstored get_parent() function to explicitly specify the memory context to be used for allocations. This will make it easier to avoid memory leaks by using a context which is freed soon. When available use a temporary context when calling get_parent(), otherwise mimic the old behavior by calling get_parent() with the same argument for both parameters. Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Wei Liu <wei.liu2@citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Index: xen-4.4.4-testing/tools/xenstore/xenstored_core.c =================================================================== --- xen-4.4.4-testing.orig/tools/xenstore/xenstored_core.c +++ xen-4.4.4-testing/tools/xenstore/xenstored_core.c @@ -512,12 +512,16 @@ static enum xs_perm_type perm_for_conn(s return perms[0].perms & mask; } -static char *get_parent(const char *node) +/* + * Get name of node parent. + * Temporary memory allocations are done with ctx. + */ +static char *get_parent(const void *ctx, const char *node) { char *slash = strrchr(node + 1, '/'); if (!slash) - return talloc_strdup(node, "/"); - return talloc_asprintf(node, "%.*s", (int)(slash - node), node); + return talloc_strdup(ctx, "/"); + return talloc_asprintf(ctx, "%.*s", (int)(slash - node), node); } /* What do parents say? */ @@ -526,7 +530,7 @@ static enum xs_perm_type ask_parents(str struct node *node; do { - name = get_parent(name); + name = get_parent(name, name); node = read_node(conn, name); if (node) break; @@ -822,7 +826,7 @@ static struct node *construct_node(struc const char *base; unsigned int baselen; struct node *parent, *node; - char *children, *parentname = get_parent(name); + char *children, *parentname = get_parent(name, name); /* If parent doesn't exist, create it. */ parent = read_node(conn, parentname); @@ -1056,7 +1060,7 @@ static int _rm(struct connection *conn, /* Delete from parent first, then if we crash, the worst that can happen is the child will continue to take up space, but will otherwise be unreachable. */ - struct node *parent = read_node(conn, get_parent(name)); + struct node *parent = read_node(conn, get_parent(name, name)); if (!parent) { send_error(conn, EINVAL); return 0; @@ -1093,7 +1097,7 @@ static void do_rm(struct connection *con if (!node) { /* Didn't exist already? Fine, if parent exists. */ if (errno == ENOENT) { - node = read_node(conn, get_parent(name)); + node = read_node(conn, get_parent(in, name)); if (node) { send_ack(conn, XS_RM); return;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor