Add flag to lxcBasicMounts to control use in user namespaces

Some mounts must be skipped if running inside a user namespace,
since the kernel forbids their use. Instead of strcmp'ing the
filesystem type in the body of the loop, set an explicit flag
in the lxcBasicMounts table.

Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrange 2013-10-07 13:03:51 +01:00
parent 6d5fdde3dd
commit bf8874025e

View File

@ -755,15 +755,16 @@ typedef struct {
const char *dst; const char *dst;
const char *type; const char *type;
int mflags; int mflags;
bool skipUserNS;
} virLXCBasicMountInfo; } virLXCBasicMountInfo;
static const virLXCBasicMountInfo lxcBasicMounts[] = { static const virLXCBasicMountInfo lxcBasicMounts[] = {
{ "proc", "/proc", "proc", MS_NOSUID|MS_NOEXEC|MS_NODEV }, { "proc", "/proc", "proc", MS_NOSUID|MS_NOEXEC|MS_NODEV, false },
{ "/proc/sys", "/proc/sys", NULL, MS_BIND|MS_RDONLY }, { "/proc/sys", "/proc/sys", NULL, MS_BIND|MS_RDONLY, false },
{ "sysfs", "/sys", "sysfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY }, { "sysfs", "/sys", "sysfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, false },
{ "securityfs", "/sys/kernel/security", "securityfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY }, { "securityfs", "/sys/kernel/security", "securityfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, true },
#if WITH_SELINUX #if WITH_SELINUX
{ SELINUX_MOUNT, SELINUX_MOUNT, "selinuxfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY }, { SELINUX_MOUNT, SELINUX_MOUNT, "selinuxfs", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, true },
#endif #endif
}; };
@ -857,12 +858,14 @@ static int lxcContainerMountBasicFS(bool userns_enabled)
#if WITH_SELINUX #if WITH_SELINUX
if (STREQ(mnt->src, SELINUX_MOUNT) && if (STREQ(mnt->src, SELINUX_MOUNT) &&
(!is_selinux_enabled() || userns_enabled)) !is_selinux_enabled())
continue; continue;
#endif #endif
if (STREQ(mnt->src, "securityfs") && userns_enabled) if (mnt->skipUserNS && userns_enabled) {
VIR_DEBUG("Skipping due to user ns enablement");
continue; continue;
}
if (virFileMakePath(mnt->dst) < 0) { if (virFileMakePath(mnt->dst) < 0) {
virReportSystemError(errno, virReportSystemError(errno,