From: Lennart Poettering Date: Thu, 25 Jul 2019 09:17:23 +0000 (+0200) Subject: nspawn: always take exclusive locks of ephemeral OS tree copies X-Git-Tag: v243-rc1~19^2~2 X-Git-Url: http://git.ipfire.org/?p=thirdparty%2Fsystemd.git;a=commitdiff_plain;h=6992459c1294e9f444105a1d4a3ee37b83de558e nspawn: always take exclusive locks of ephemeral OS tree copies --- diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c index de748b9de33..2289a0a97fb 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c @@ -4774,7 +4774,9 @@ static int run(int argc, char *argv[]) { goto finish; } - r = image_path_lock(np, (arg_read_only ? LOCK_SH : LOCK_EX) | LOCK_NB, &tree_global_lock, &tree_local_lock); + /* We take an exclusive lock on this image, since it's our private, ephemeral copy + * only owned by us and noone else. */ + r = image_path_lock(np, LOCK_EX|LOCK_NB, &tree_global_lock, &tree_local_lock); if (r < 0) { log_error_errno(r, "Failed to lock %s: %m", np); goto finish; @@ -4894,7 +4896,8 @@ static int run(int argc, char *argv[]) { goto finish; } - r = image_path_lock(np, (arg_read_only ? LOCK_SH : LOCK_EX) | LOCK_NB, &tree_global_lock, &tree_local_lock); + /* Always take an exclusive lock on our own ephemeral copy. */ + r = image_path_lock(np, LOCK_EX|LOCK_NB, &tree_global_lock, &tree_local_lock); if (r < 0) { r = log_error_errno(r, "Failed to create image lock: %m"); goto finish;