]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
fs-util: refuse taking a relative path to chase if "root" is specified and CHASE_PREF... 7911/head
authorLennart Poettering <lennart@poettering.net>
Wed, 17 Jan 2018 11:00:40 +0000 (12:00 +0100)
committerLennart Poettering <lennart@poettering.net>
Wed, 17 Jan 2018 11:04:15 +0000 (12:04 +0100)
If we take a relative path we first make it absolute, based on the
current working directory. But if CHASE_PREFIX_ROOT is passe we are
supposed to make the path absolute taking the specified root path into
account, but that makes no sense if we talk about the current working
directory as that is relative to the host's root in any case. Hence,
let's refuse this politely.

src/basic/fs-util.c

index f0df79d8ff9756559fc07d9d44f98c085d572a34..cb56e03d15555210dd5fd72f32f57209ec7d34d1 100644 (file)
@@ -673,8 +673,14 @@ int chase_symlinks(const char *path, const char *original_root, unsigned flags,
                 if (r < 0)
                         return r;
 
-                if (flags & CHASE_PREFIX_ROOT)
+                if (flags & CHASE_PREFIX_ROOT) {
+
+                        /* We don't support relative paths in combination with a root directory */
+                        if (!path_is_absolute(path))
+                                return -EINVAL;
+
                         path = prefix_roota(root, path);
+                }
         }
 
         r = path_make_absolute_cwd(path, &buffer);