X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=namespace.c;h=09bcaff9684845ee121544f3ebd7151a503100e5;hb=afb757b1a8a416b3c692728330a266b3915eef41;hp=570b4ce387df6f84ad9c11b7a38b79f7c7fac291;hpb=15ae422b7471cf6f41ccf450243d8afd8ea0a054;p=elogind.git diff --git a/namespace.c b/namespace.c index 570b4ce38..09bcaff96 100644 --- a/namespace.c +++ b/namespace.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "strv.h" #include "util.h" @@ -123,7 +124,6 @@ static int apply_mount(Path *p, const char *root_dir, const char *inaccessible_d const char *what; char *where; int r; - bool read_only = false; assert(p); assert(root_dir); @@ -137,11 +137,11 @@ static int apply_mount(Path *p, const char *root_dir, const char *inaccessible_d case INACCESSIBLE: what = inaccessible_dir; - read_only = true; + flags |= MS_RDONLY; break; case READONLY: - read_only = true; + flags |= MS_RDONLY; /* Fall through */ case READWRITE: @@ -160,14 +160,11 @@ static int apply_mount(Path *p, const char *root_dir, const char *inaccessible_d * flags. If we want to set any flag we need * to do so in a second indepdant step. */ if (flags) - r = mount(NULL, where, NULL, MS_REMOUNT|MS_REC|flags, NULL); + r = mount(NULL, where, NULL, MS_REMOUNT|MS_BIND|MS_REC|flags, NULL); /* Avoid expontial growth of trees */ if (r >= 0 && path_equal(p->path, "/")) - r = mount(NULL, where, NULL, MS_REMOUNT|MS_UNBINDABLE, NULL); - - if (r >= 0 && read_only) - r = mount(NULL, where, NULL, MS_REMOUNT|MS_RDONLY, NULL); + r = mount(NULL, where, NULL, MS_REMOUNT|MS_BIND|MS_UNBINDABLE|flags, NULL); if (r < 0) { r = -errno;