From eceb61112c8ece03adfb4fcbc83e357875ca0ceb Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Tue, 23 Feb 2021 15:02:33 +0100 Subject: [PATCH] bootspec: assume that the root dir is at the top of its file system Fixes: #17746 --- src/shared/bootspec.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c index 98b380476b4..17c28c6e018 100644 --- a/src/shared/bootspec.c +++ b/src/shared/bootspec.c @@ -1033,6 +1033,16 @@ static int verify_fsroot_dir( SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV), "Block device node of \"%s\" is invalid.", path); + if (path_equal(path, "/")) { + /* Let's assume that the root directory of the OS is always the root of its file system + * (which technically doesn't have to be the case, but it's close enough, and it's not easy + * to be fully correct for it, since we can't look further up than the root dir easily.) */ + if (ret_dev) + *ret_dev = st.st_dev; + + return 0; + } + t2 = strjoina(path, "/.."); if (stat(t2, &st2) < 0) { if (errno != EACCES) @@ -1048,10 +1058,7 @@ static int verify_fsroot_dir( if (!parent) return log_oom(); - if (stat(parent, &st2) < 0) - r = -errno; - else - r = 0; + r = stat(parent, &st2) < 0 ? -errno : 0; } if (r < 0) -- 2.39.2