core: Fix use after free case in load_from_path()
authorKhem Raj <raj.khem@gmail.com>
Mon, 17 Dec 2018 04:58:35 +0000 (20:58 -0800)
committerKhem Raj <raj.khem@gmail.com>
Mon, 17 Dec 2018 06:02:00 +0000 (22:02 -0800)
ensure that mfree() on filename is called after the logging function
which uses the string pointed by filename

Signed-off-by: Khem Raj <raj.khem@gmail.com>
src/core/load-fragment.c

index fc5644f..4ebe92f 100644 (file)
@@ -4531,7 +4531,6 @@ static int load_from_path(Unit *u, const char *path) {
                                 r = open_follow(&filename, &f, symlink_names, &id);
                         if (r >= 0)
                                 break;
-                        filename = mfree(filename);
 
                         /* ENOENT means that the file is missing or is a dangling symlink.
                          * ENOTDIR means that one of paths we expect to be is a directory
@@ -4543,6 +4542,7 @@ static int load_from_path(Unit *u, const char *path) {
                         else if (!IN_SET(r, -ENOENT, -ENOTDIR))
                                 return r;
 
+                        filename = mfree(filename);
                         /* Empty the symlink names for the next run */
                         set_clear_free(symlink_names);
                 }