1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-11 05:17:44 +03:00

namespace: make ro bind mounts work

This commit is contained in:
Lennart Poettering 2010-04-23 18:48:07 +02:00
parent eced69b301
commit 5dcfe57bb1
2 changed files with 7 additions and 9 deletions

View File

@ -123,7 +123,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 +136,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 +159,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;

View File

@ -34,7 +34,9 @@ int main(int argc, char *argv[]) {
};
const char * const readable[] = {
"/var",
"/",
"/usr",
"/boot",
NULL
};