Use getmntent_r() for thread-safety

Signed-off-by: Andrey Mazo <mazo@telum.ru>
Signed-off-by: Serge Hallyn <serge.hallyn@ubuntu.com>
This commit is contained in:
Andrey Mazo 2013-12-24 14:44:54 +04:00 committed by Serge Hallyn
parent dd1d77f91b
commit aaf901be6b

View File

@ -1859,7 +1859,7 @@ static int mount_entry(const char *fsname, const char *target,
return 0; return 0;
} }
static inline int mount_entry_on_systemfs(struct mntent *mntent) static inline int mount_entry_on_systemfs(const struct mntent *mntent)
{ {
unsigned long mntflags; unsigned long mntflags;
char *mntdata; char *mntdata;
@ -1904,7 +1904,7 @@ static inline int mount_entry_on_systemfs(struct mntent *mntent)
return ret; return ret;
} }
static int mount_entry_on_absolute_rootfs(struct mntent *mntent, static int mount_entry_on_absolute_rootfs(const struct mntent *mntent,
const struct lxc_rootfs *rootfs, const struct lxc_rootfs *rootfs,
const char *lxc_name) const char *lxc_name)
{ {
@ -1990,7 +1990,7 @@ out:
return ret; return ret;
} }
static int mount_entry_on_relative_rootfs(struct mntent *mntent, static int mount_entry_on_relative_rootfs(const struct mntent *mntent,
const char *rootfs) const char *rootfs)
{ {
char path[MAXPATHLEN]; char path[MAXPATHLEN];
@ -2047,26 +2047,27 @@ static int mount_entry_on_relative_rootfs(struct mntent *mntent,
static int mount_file_entries(const struct lxc_rootfs *rootfs, FILE *file, static int mount_file_entries(const struct lxc_rootfs *rootfs, FILE *file,
const char *lxc_name) const char *lxc_name)
{ {
struct mntent *mntent; struct mntent mntent;
char buf[4096];
int ret = -1; int ret = -1;
while ((mntent = getmntent(file))) { while (getmntent_r(file, &mntent, buf, sizeof(buf))) {
if (!rootfs->path) { if (!rootfs->path) {
if (mount_entry_on_systemfs(mntent)) if (mount_entry_on_systemfs(&mntent))
goto out; goto out;
continue; continue;
} }
/* We have a separate root, mounts are relative to it */ /* We have a separate root, mounts are relative to it */
if (mntent->mnt_dir[0] != '/') { if (mntent.mnt_dir[0] != '/') {
if (mount_entry_on_relative_rootfs(mntent, if (mount_entry_on_relative_rootfs(&mntent,
rootfs->mount)) rootfs->mount))
goto out; goto out;
continue; continue;
} }
if (mount_entry_on_absolute_rootfs(mntent, rootfs, lxc_name)) if (mount_entry_on_absolute_rootfs(&mntent, rootfs, lxc_name))
goto out; goto out;
} }