]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
binfmt: modernize code a bit
authorLennart Poettering <lennart@poettering.net>
Thu, 23 Apr 2020 14:27:46 +0000 (16:27 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 23 Apr 2020 15:14:41 +0000 (17:14 +0200)
Let's just copy out the bit of the string we need, and let's make sure
we refuse rules called "status" and "register", since those are special
files in binfmt_misc's file system.

src/binfmt/binfmt.c

index 7ff844c78c3a87253935b5ff93dcbff944658da3..5e812e89a5e69fb5f22318c80e8acd06c5530468 100644 (file)
@@ -32,18 +32,17 @@ static int delete_rule(const char *rule) {
         assert(rule);
         assert(rule[0]);
 
-        x = strdup(rule);
+        e = strchrnul(rule + 1, rule[0]);
+        x = strndup(rule + 1, e - rule - 1);
         if (!x)
                 return log_oom();
 
-        e = strchrnul(x+1, x[0]);
-        *e = 0;
-
-        if (!filename_is_valid(x + 1))
+        if (!filename_is_valid(x) ||
+            STR_IN_SET(x, "register", "status"))
                 return log_error_errno(SYNTHETIC_ERRNO(EINVAL),
-                                       "Rule file name '%s' is not valid, refusing.", x + 1);
+                                       "Rule file name '%s' is not valid, refusing.", x);
 
-        fn = path_join("/proc/sys/fs/binfmt_misc", x+1);
+        fn = path_join("/proc/sys/fs/binfmt_misc", x);
         if (!fn)
                 return log_oom();