Commit 69aa6655 by Dwight Engen Committed by Stéphane Graber

create fd, stdin, stdout, stderr symlinks in /dev

The kernel's Documentation/devices.txt says that these symlinks should exist in /dev (they are listed in the "Compulsory" section). I'm not currently adding nfsd and X0R since they are required for iBCS, but they can be easily added to the array later if need be. Signed-off-by: 's avatarDwight Engen <dwight.engen@oracle.com> Acked-by: 's avatarMichael H. Warfield <mhw@WittsEnd.com> Acked-by: 's avatarStéphane Graber <stgraber@ubuntu.com>
parent cd063f45
...@@ -812,6 +812,38 @@ static int setup_utsname(struct utsname *utsname) ...@@ -812,6 +812,38 @@ static int setup_utsname(struct utsname *utsname)
return 0; return 0;
} }
struct dev_symlinks {
const char *oldpath;
const char *name;
};
static const struct dev_symlinks dev_symlinks[] = {
{"/proc/self/fd", "fd"},
{"/proc/self/fd/0", "stdin"},
{"/proc/self/fd/1", "stdout"},
{"/proc/self/fd/2", "stderr"},
};
static int setup_dev_symlinks(const struct lxc_rootfs *rootfs)
{
char path[MAXPATHLEN];
int ret,i;
for (i = 0; i < sizeof(dev_symlinks) / sizeof(dev_symlinks[0]); i++) {
const struct dev_symlinks *d = &dev_symlinks[i];
ret = snprintf(path, sizeof(path), "%s/dev/%s", rootfs->mount, d->name);
if (ret < 0 || ret >= MAXPATHLEN)
return -1;
ret = symlink(d->oldpath, path);
if (ret && errno != EEXIST) {
SYSERROR("Error creating %s", path);
return -1;
}
}
return 0;
}
static int setup_tty(const struct lxc_rootfs *rootfs, static int setup_tty(const struct lxc_rootfs *rootfs,
const struct lxc_tty_info *tty_info, char *ttydir) const struct lxc_tty_info *tty_info, char *ttydir)
{ {
...@@ -3616,6 +3648,11 @@ int lxc_setup(struct lxc_handler *handler) ...@@ -3616,6 +3648,11 @@ int lxc_setup(struct lxc_handler *handler)
return -1; return -1;
} }
if (!lxc_conf->is_execute && setup_dev_symlinks(&lxc_conf->rootfs)) {
ERROR("failed to setup /dev symlinks for '%s'", name);
return -1;
}
/* mount /proc if needed for LSM transition */ /* mount /proc if needed for LSM transition */
if (lsm_proc_mount(lxc_conf) < 0) { if (lsm_proc_mount(lxc_conf) < 0) {
ERROR("failed to LSM mount proc for '%s'", name); ERROR("failed to LSM mount proc for '%s'", name);
......
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