On Tue, Feb 18, 2014 at 12:56:29PM -0600, Serge Hallyn wrote: > Otherwise mount may return -EINVAL if in-kernel super-block parser > objects (as is the case with ext4). > > Changelog v2: > also drop 'optional' > specifically drop create=dir, not create=* > fix order of arguments for memmove > > Signed-off-by: Serge Hallyn <[email protected]>
Acked-by: Stéphane Graber <[email protected]> > --- > src/lxc/conf.c | 35 ++++++++++++++++++++++++++++++++--- > 1 file changed, 32 insertions(+), 3 deletions(-) > > diff --git a/src/lxc/conf.c b/src/lxc/conf.c > index d40e3e0..483dff4 100644 > --- a/src/lxc/conf.c > +++ b/src/lxc/conf.c > @@ -1881,7 +1881,32 @@ static int mount_entry(const char *fsname, const char > *target, > return 0; > } > > -static inline int mount_entry_on_systemfs(const struct mntent *mntent) > +/* > + * Remove 'optional', 'create=dir', and 'create=file' from mntopt > + */ > +static void cull_mntent_opt(struct mntent *mntent) > +{ > + int i; > + char *p, *p2; > + char *list[] = {"create=dir", > + "create=file", > + "optional", > + NULL }; > + > + for (i=0; list[i]; i++) { > + if (!(p = strstr(mntent->mnt_opts, list[i]))) > + continue; > + p2 = strchr(p, ','); > + if (!p2) { > + /* no more mntopts, so just chop it here */ > + *p = '\0'; > + continue; > + } > + memmove(p, p2+1, strlen(p2+1)+1); > + } > +} > + > +static inline int mount_entry_on_systemfs(struct mntent *mntent) > { > unsigned long mntflags; > char *mntdata; > @@ -1911,6 +1936,8 @@ static inline int mount_entry_on_systemfs(const struct > mntent *mntent) > fclose(pathfile); > } > > + cull_mntent_opt(mntent); > + > if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) { > free(mntdata); > return -1; > @@ -1928,7 +1955,7 @@ static inline int mount_entry_on_systemfs(const struct > mntent *mntent) > return ret; > } > > -static int mount_entry_on_absolute_rootfs(const struct mntent *mntent, > +static int mount_entry_on_absolute_rootfs(struct mntent *mntent, > const struct lxc_rootfs *rootfs, > const char *lxc_name) > { > @@ -1998,6 +2025,7 @@ skipabs: > else > fclose(pathfile); > } > + cull_mntent_opt(mntent); > > if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) { > free(mntdata); > @@ -2017,7 +2045,7 @@ out: > return ret; > } > > -static int mount_entry_on_relative_rootfs(const struct mntent *mntent, > +static int mount_entry_on_relative_rootfs(struct mntent *mntent, > const char *rootfs) > { > char path[MAXPATHLEN]; > @@ -2055,6 +2083,7 @@ static int mount_entry_on_relative_rootfs(const struct > mntent *mntent, > else > fclose(pathfile); > } > + cull_mntent_opt(mntent); > > if (parse_mntopts(mntent->mnt_opts, &mntflags, &mntdata) < 0) { > free(mntdata); > -- > 1.9.rc1 > > _______________________________________________ > lxc-devel mailing list > [email protected] > http://lists.linuxcontainers.org/listinfo/lxc-devel -- Stéphane Graber Ubuntu developer http://www.ubuntu.com
signature.asc
Description: Digital signature
_______________________________________________ lxc-devel mailing list [email protected] http://lists.linuxcontainers.org/listinfo/lxc-devel
