namespace: don't fail on masked mounts (#3794)
Before this patch, a service file with ReadWriteDirectories=/file... could fail if the file exists but is not a mountpoint, despite being listed in /proc/self/mountinfo. It could happen with masked mounts. Fixes https://github.com/systemd/systemd/issues/3793
This commit is contained in:
committed by
Lennart Poettering
parent
3324079741
commit
98df8089be
+11
-11
@@ -448,21 +448,21 @@ int bind_remount_recursive(const char *prefix, bool ro) {
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Try to reuse the original flag set, but
|
||||
* don't care for errors, in case of
|
||||
* obstructed mounts */
|
||||
/* Deal with mount points that are obstructed by a
|
||||
* later mount */
|
||||
r = path_is_mount_point(x, 0);
|
||||
if (r == -ENOENT || r == 0)
|
||||
continue;
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
/* Try to reuse the original flag set */
|
||||
orig_flags = 0;
|
||||
(void) get_mount_flags(x, &orig_flags);
|
||||
orig_flags &= ~MS_RDONLY;
|
||||
|
||||
if (mount(NULL, x, NULL, orig_flags|MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0) {
|
||||
|
||||
/* Deal with mount points that are
|
||||
* obstructed by a later mount */
|
||||
|
||||
if (errno != ENOENT)
|
||||
return -errno;
|
||||
}
|
||||
if (mount(NULL, x, NULL, orig_flags|MS_BIND|MS_REMOUNT|(ro ? MS_RDONLY : 0), NULL) < 0)
|
||||
return -errno;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user