Unverified Commit a489983a by Christian Brauner Committed by Stéphane Graber

conf: non-functional changes lxc_fill_autodev()

parent 2e6347d6
...@@ -1113,25 +1113,24 @@ static const struct lxc_devs lxc_devs[] = { ...@@ -1113,25 +1113,24 @@ static const struct lxc_devs lxc_devs[] = {
{ "console", S_IFCHR | S_IRUSR | S_IWUSR, 5, 1 }, { "console", S_IFCHR | S_IRUSR | S_IWUSR, 5, 1 },
}; };
static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console) static int lxc_fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console)
{ {
int ret; int ret;
char path[MAXPATHLEN]; char path[MAXPATHLEN];
int i; int i;
mode_t cmask; mode_t cmask;
INFO("Creating initial consoles under container /dev");
ret = snprintf(path, MAXPATHLEN, "%s/dev", rootfs->path ? rootfs->mount : ""); ret = snprintf(path, MAXPATHLEN, "%s/dev", rootfs->path ? rootfs->mount : "");
if (ret < 0 || ret >= MAXPATHLEN) { if (ret < 0 || ret >= MAXPATHLEN) {
ERROR("Error calculating container /dev location"); ERROR("Error calculating container /dev location");
return -1; return -1;
} }
if (!dir_exists(path)) // ignore, just don't try to fill in /* ignore, just don't try to fill in */
if (!dir_exists(path))
return 0; return 0;
INFO("Populating container /dev"); INFO("populating container /dev");
cmask = umask(S_IXUSR | S_IXGRP | S_IXOTH); cmask = umask(S_IXUSR | S_IXGRP | S_IXOTH);
for (i = 0; i < sizeof(lxc_devs) / sizeof(lxc_devs[0]); i++) { for (i = 0; i < sizeof(lxc_devs) / sizeof(lxc_devs[0]); i++) {
const struct lxc_devs *d = &lxc_devs[i]; const struct lxc_devs *d = &lxc_devs[i];
...@@ -1142,13 +1141,20 @@ static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console) ...@@ -1142,13 +1141,20 @@ static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console)
ret = snprintf(path, MAXPATHLEN, "%s/dev/%s", rootfs->path ? rootfs->mount : "", d->name); ret = snprintf(path, MAXPATHLEN, "%s/dev/%s", rootfs->path ? rootfs->mount : "", d->name);
if (ret < 0 || ret >= MAXPATHLEN) if (ret < 0 || ret >= MAXPATHLEN)
return -1; return -1;
ret = mknod(path, d->mode, makedev(d->maj, d->min)); ret = mknod(path, d->mode, makedev(d->maj, d->min));
if (ret && errno != EEXIST) { if (ret < 0) {
char hostpath[MAXPATHLEN]; char hostpath[MAXPATHLEN];
FILE *pathfile; FILE *pathfile;
// Unprivileged containers cannot create devices, so if (errno == EEXIST) {
// bind mount the device from the host DEBUG("\"%s\" device already existed", path);
continue;
}
/* Unprivileged containers cannot create devices, so
* bind mount the device from the host.
*/
ret = snprintf(hostpath, MAXPATHLEN, "/dev/%s", d->name); ret = snprintf(hostpath, MAXPATHLEN, "/dev/%s", d->name);
if (ret < 0 || ret >= MAXPATHLEN) if (ret < 0 || ret >= MAXPATHLEN)
return -1; return -1;
...@@ -1158,17 +1164,18 @@ static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console) ...@@ -1158,17 +1164,18 @@ static int fill_autodev(const struct lxc_rootfs *rootfs, bool mount_console)
return -1; return -1;
} }
fclose(pathfile); fclose(pathfile);
if (safe_mount(hostpath, path, 0, MS_BIND, NULL, if (safe_mount(hostpath, path, 0, MS_BIND, NULL, rootfs->path ? rootfs->mount : NULL) != 0) {
rootfs->path ? rootfs->mount : NULL) != 0) { SYSERROR("Failed bind mounting device %s from host into container", d->name);
SYSERROR("Failed bind mounting device %s from host into container",
d->name);
return -1; return -1;
} }
DEBUG("bind mounted \"%s\" onto \"%s\"", hostpath, path);
} else {
DEBUG("created device node \"%s\"", path);
} }
} }
umask(cmask); umask(cmask);
INFO("Populated container /dev"); INFO("populated container /dev");
return 0; return 0;
} }
...@@ -3948,7 +3955,7 @@ int lxc_setup(struct lxc_handler *handler) ...@@ -3948,7 +3955,7 @@ int lxc_setup(struct lxc_handler *handler)
ERROR("failed to run autodev hooks for container '%s'.", name); ERROR("failed to run autodev hooks for container '%s'.", name);
return -1; return -1;
} }
if (fill_autodev(&lxc_conf->rootfs, mount_console)) { if (lxc_fill_autodev(&lxc_conf->rootfs, mount_console)) {
ERROR("failed to populate /dev in the container"); ERROR("failed to populate /dev in the container");
return -1; return -1;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment