mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
tools/xenstore: move the call of setup_structure() to dom0 introduction
Setting up the basic structure when introducing dom0 has the advantage to be able to add proper node memory accounting for the added nodes later. This makes it possible to do proper node accounting, too. An additional requirement to make that work fine is to correct the owner of the created nodes to be dom0_domid instead of domid 0. This is part of XSA-326. Signed-off-by: Juergen Gross <jgross@suse.com> Acked-by: Julien Grall <jgrall@amazon.com>
This commit is contained in:
1 parent
268369d8e3
commit
60e2f6020d
3 files changed
+8
-5
No files matched your search
@@ -2018,7 +2018,8 @@ static int tdb_flags;
|
||||
static void manual_node(const char *name, const char *child)
|
||||
{
|
||||
struct node *node;
|
||||
struct xs_permissions perms = { .id = 0, .perms = XS_PERM_NONE };
|
||||
struct xs_permissions perms = { .id = dom0_domid,
|
||||
.perms = XS_PERM_NONE };
|
||||
|
||||
node = talloc_zero(NULL, struct node);
|
||||
if (!node)
|
||||
@@ -2057,7 +2058,7 @@ static void tdb_logger(TDB_CONTEXT *tdb, int level, const char * fmt, ...)
|
||||
}
|
||||
}
|
||||
|
||||
static void setup_structure(bool live_update)
|
||||
void setup_structure(bool live_update)
|
||||
{
|
||||
char *tdbname;
|
||||
|
||||
@@ -2080,6 +2081,7 @@ static void setup_structure(bool live_update)
|
||||
manual_node("/", "tool");
|
||||
manual_node("/tool", "xenstored");
|
||||
manual_node("/tool/xenstored", NULL);
|
||||
domain_entry_fix(dom0_domid, 3, true);
|
||||
}
|
||||
|
||||
check_store();
|
||||
@@ -2598,9 +2600,6 @@ int main(int argc, char *argv[])
|
||||
|
||||
init_pipe(reopen_log_pipe);
|
||||
|
||||
/* Setup the database */
|
||||
setup_structure(live_update);
|
||||
|
||||
/* Listen to hypervisor. */
|
||||
if (!no_domain_init && !live_update) {
|
||||
domain_init(-1);
|
||||
|
||||
@@ -231,6 +231,7 @@ int write_node_raw(struct connection *conn, TDB_DATA *key, struct node *node,
|
||||
struct node *read_node(struct connection *conn, const void *ctx,
|
||||
const char *name);
|
||||
|
||||
void setup_structure(bool live_update);
|
||||
struct connection *new_connection(const struct interface_funcs *funcs);
|
||||
struct connection *get_connection_by_id(unsigned int conn_id);
|
||||
void check_store(void);
|
||||
|
||||
@@ -496,6 +496,9 @@ static struct domain *introduce_domain(const void *ctx,
|
||||
}
|
||||
domain->interface = interface;
|
||||
|
||||
if (is_master_domain)
|
||||
setup_structure(restore);
|
||||
|
||||
/* Now domain belongs to its connection. */
|
||||
talloc_steal(domain->conn, domain);
|
||||
|
||||
|
||||