diff options
author | Will Woods <wwoods@redhat.com> | 2012-10-16 17:04:34 -0400 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2012-10-23 01:53:02 +0200 |
commit | bcbd5405b1b6d9d219259e3be2c3ec4d92812bcb (patch) | |
tree | d2e30f3def858fe5b311e5c98cd15ce954781792 | |
parent | 5411ae4782270e8e82b05e4c7c8135f4eb774dda (diff) |
mount: make sure m->where is set before unit_add_exec_dependencies()
If you enter unit_add_exec_dependencies with m->where = NULL, you'll
very likely end up aborting somewhere under socket_needs_mount.
(When systemd goes to check to see if the journald socket requires your
mount, it'll do path_startswith(path, m->where)... *kaboom*)
This patch should ensure that:
a) both branches in mount_add_one() set m->where, and
b) mount_add_extras() calls unit_add_exec_dependencies() *after*
setting m->where.
-rw-r--r-- | src/core/mount.c | 16 |
1 files changed, 12 insertions, 4 deletions
diff --git a/src/core/mount.c b/src/core/mount.c index e1c240e31b..14f4863dc6 100644 --- a/src/core/mount.c +++ b/src/core/mount.c @@ -547,10 +547,6 @@ static int mount_add_extras(Mount *m) { Unit *u = UNIT(m); int r; - r = unit_add_exec_dependencies(u, &m->exec_context); - if (r < 0) - return r; - if (UNIT(m)->fragment_path) m->from_fragment = true; @@ -562,6 +558,10 @@ static int mount_add_extras(Mount *m) { path_kill_slashes(m->where); + r = unit_add_exec_dependencies(u, &m->exec_context); + if (r < 0) + return r; + if (!UNIT(m)->description) { r = unit_set_description(u, m->where); if (r < 0) @@ -1459,6 +1459,14 @@ static int mount_add_one( delete = false; free(e); + if (!MOUNT(u)->where) { + MOUNT(u)->where = strdup(where); + if (!MOUNT(u)->where) { + r = -ENOMEM; + goto fail; + } + } + if (u->load_state == UNIT_ERROR) { u->load_state = UNIT_LOADED; u->load_error = 0; |