Unverified Commit 8348e424 by Maximilian Blenk Committed by Christian Brauner

config: Fix parsing of mount options

When parsing mount options e.g. from lxc.mount.entry the specified options are mapped to the flags constants. To do so, the strings are compared to the options contained in mount_opt. However, when comparing the strings, the length of the string is not checked. That entails that the option "rootcontext=selinux-context" is mapped to the mount option read-only (ro). This commit fixes this issue by checking if a '=' is contained in the specified option and additionally comparing the length of the strings. Signed-off-by: 's avatarMaximilian Blenk <Maximilian.Blenk@bmw.de>
parent df5f3618
...@@ -1825,16 +1825,21 @@ static void parse_mntopt(char *opt, unsigned long *flags, char **data, size_t si ...@@ -1825,16 +1825,21 @@ static void parse_mntopt(char *opt, unsigned long *flags, char **data, size_t si
{ {
struct mount_opt *mo; struct mount_opt *mo;
/* If opt is found in mount_opt, set or clear flags. /* If '=' is contained in opt, the option must go into data. */
* Otherwise append it to data. */ if (!strchr(opt, '=')) {
for (mo = &mount_opt[0]; mo->name != NULL; mo++) { /* If opt is found in mount_opt, set or clear flags.
if (strncmp(opt, mo->name, strlen(mo->name)) == 0) { * Otherwise append it to data. */
if (mo->clear) size_t opt_len = strlen(opt);
*flags &= ~mo->flag; for (mo = &mount_opt[0]; mo->name != NULL; mo++) {
else size_t mo_name_len = strlen(mo->name);
*flags |= mo->flag; if (opt_len == mo_name_len && strncmp(opt, mo->name, mo_name_len) == 0) {
return; if (mo->clear)
*flags &= ~mo->flag;
else
*flags |= mo->flag;
return;
}
} }
} }
......
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