From 86e339c8846cdf614a41653384c0b4e84b233696 Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Fri, 26 Dec 2014 16:44:15 +0100 Subject: machined: be more thorough when checking whether an image is writable or not --- src/machine/image.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) (limited to 'src/machine/image.c') diff --git a/src/machine/image.c b/src/machine/image.c index 9f88b0551f..f72a5c3960 100644 --- a/src/machine/image.c +++ b/src/machine/image.c @@ -86,6 +86,7 @@ static int image_new( static int image_make(int dfd, const char *name, const char *path, Image **ret) { struct stat st; + bool writable; int r; assert(dfd >= 0); @@ -98,6 +99,8 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret) if (fstatat(dfd, name, &st, 0) < 0) return -errno; + writable = faccessat(dfd, name, W_OK, AT_EACCESS) >= 0; + if (S_ISDIR(st.st_mode)) { if (!ret) @@ -127,7 +130,7 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret) r = image_new(IMAGE_SUBVOLUME, name, path, - info.read_only, + info.read_only || !writable, info.otime, 0, ret); @@ -143,7 +146,7 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret) r = image_new(IMAGE_DIRECTORY, name, path, - false, + !writable, 0, 0, ret); @@ -168,7 +171,7 @@ static int image_make(int dfd, const char *name, const char *path, Image **ret) r = image_new(IMAGE_GPT, truncated, path, - !(st.st_mode & 0222), + !(st.st_mode & 0222) || !writable, crtime, timespec_load(&st.st_mtim), ret); -- cgit v1.2.3-54-g00ecf