Skip to content

Commit 91c7794

Browse files
author
Miklos Szeredi
committed
ovl: allow filenames with comma
Allow option separator (comma) to be escaped with backslash. Signed-off-by: Miklos Szeredi <[email protected]>
1 parent 5214846 commit 91c7794

File tree

1 file changed

+45
-3
lines changed

1 file changed

+45
-3
lines changed

fs/overlayfs/super.c

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -462,11 +462,34 @@ static const match_table_t ovl_tokens = {
462462
{OPT_ERR, NULL}
463463
};
464464

465+
static char *ovl_next_opt(char **s)
466+
{
467+
char *sbegin = *s;
468+
char *p;
469+
470+
if (sbegin == NULL)
471+
return NULL;
472+
473+
for (p = sbegin; *p; p++) {
474+
if (*p == '\\') {
475+
p++;
476+
if (!*p)
477+
break;
478+
} else if (*p == ',') {
479+
*p = '\0';
480+
*s = p + 1;
481+
return sbegin;
482+
}
483+
}
484+
*s = NULL;
485+
return sbegin;
486+
}
487+
465488
static int ovl_parse_opt(char *opt, struct ovl_config *config)
466489
{
467490
char *p;
468491

469-
while ((p = strsep(&opt, ",")) != NULL) {
492+
while ((p = ovl_next_opt(&opt)) != NULL) {
470493
int token;
471494
substring_t args[MAX_OPT_ARGS];
472495

@@ -554,15 +577,34 @@ static struct dentry *ovl_workdir_create(struct vfsmount *mnt,
554577
goto out_unlock;
555578
}
556579

580+
static void ovl_unescape(char *s)
581+
{
582+
char *d = s;
583+
584+
for (;; s++, d++) {
585+
if (*s == '\\')
586+
s++;
587+
*d = *s;
588+
if (!*s)
589+
break;
590+
}
591+
}
592+
557593
static int ovl_mount_dir(const char *name, struct path *path)
558594
{
559595
int err;
596+
char *tmp = kstrdup(name, GFP_KERNEL);
597+
598+
if (!tmp)
599+
return -ENOMEM;
560600

561-
err = kern_path(name, LOOKUP_FOLLOW, path);
601+
ovl_unescape(tmp);
602+
err = kern_path(tmp, LOOKUP_FOLLOW, path);
562603
if (err) {
563-
pr_err("overlayfs: failed to resolve '%s': %i\n", name, err);
604+
pr_err("overlayfs: failed to resolve '%s': %i\n", tmp, err);
564605
err = -EINVAL;
565606
}
607+
kfree(tmp);
566608
return err;
567609
}
568610

0 commit comments

Comments
 (0)