[Devel] [PATCH rh7 2/2] ve/fs/devmnt: allow more than one mount option inside a CT
Konstantin Khorenko
khorenko at virtuozzo.com
Mon Jun 26 14:51:32 MSK 2017
strsep() changes provided string: puts '\0' instead of separators,
thus after successful call to ve_devmnt_check() we insert
only first provided mount options, ignoring others.
Fixes: bc4143b ("ve/fs/devmnt: process mount options")
Found during implementation of
https://jira.sw.ru/browse/PSBM-40075
Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
---
fs/namespace.c | 13 +++++++++++--
1 file changed, 11 insertions(+), 2 deletions(-)
diff --git a/fs/namespace.c b/fs/namespace.c
index 7aed8f5..f2d1f84 100644
--- a/fs/namespace.c
+++ b/fs/namespace.c
@@ -1899,6 +1899,7 @@ static char *strstr_separated(char *haystack, char *needle, char sep)
static int ve_devmnt_check(char *options, char *allowed)
{
char *p;
+ char *tmp_options;
if (!options || !*options)
return 0;
@@ -1906,14 +1907,22 @@ static int ve_devmnt_check(char *options, char *allowed)
if (!allowed)
return -EPERM;
- while ((p = strsep(&options, ",")) != NULL) {
+ /* strsep() changes provided string: puts '\0' instead of separators */
+ tmp_options = kstrdup(options, GFP_KERNEL);
+ if (!tmp_options)
+ return -ENOMEM;
+
+ while ((p = strsep(&tmp_options, ",")) != NULL) {
if (!*p)
continue;
- if (!strstr_separated(allowed, p, ','))
+ if (!strstr_separated(allowed, p, ',')) {
+ kfree(tmp_options);
return -EPERM;
+ }
}
+ kfree(tmp_options);
return 0;
}
--
1.8.3.1
More information about the Devel
mailing list