diff options
Diffstat (limited to 'src/binfmt')
-rw-r--r-- | src/binfmt/binfmt.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c index 55f700c089..0e5ca1a7e8 100644 --- a/src/binfmt/binfmt.c +++ b/src/binfmt/binfmt.c @@ -15,6 +15,7 @@ #include "fileio.h" #include "log.h" #include "pager.h" +#include "path-util.h" #include "string-util.h" #include "strv.h" #include "terminal-util.h" @@ -27,6 +28,7 @@ static int delete_rule(const char *rule) { _cleanup_free_ char *x = NULL, *fn = NULL; char *e; + assert(rule); assert(rule[0]); x = strdup(rule); @@ -36,6 +38,11 @@ static int delete_rule(const char *rule) { e = strchrnul(x+1, x[0]); *e = 0; + if (!filename_is_valid(x + 1)) { + log_error("Rule file name '%s' is not valid, refusing.", x+1); + return -EINVAL; + } + fn = strappend("/proc/sys/fs/binfmt_misc/", x+1); if (!fn) return log_oom(); @@ -46,7 +53,7 @@ static int delete_rule(const char *rule) { static int apply_rule(const char *rule) { int r; - delete_rule(rule); + (void) delete_rule(rule); r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, 0); if (r < 0) |