From: Lennart Poettering Date: Tue, 23 Feb 2021 14:02:33 +0000 (+0100) Subject: bootspec: assume that the root dir is at the top of its file system X-Git-Tag: v248-rc2^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=eceb61112c8ece03adfb4fcbc83e357875ca0ceb;p=thirdparty%2Fsystemd.git bootspec: assume that the root dir is at the top of its file system Fixes: #17746 --- 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)