summaryrefslogtreecommitdiff
path: root/src/shared/bootspec.c
diff options
context:
space:
mode:
authorLennart Poettering <lennart@poettering.net>2019-02-05 19:11:31 +0100
committerLennart Poettering <lennart@poettering.net>2019-03-01 12:41:32 +0100
commit4a4994b68dd1e61696b122c74111ed40e329027e (patch)
treefe24762c2c80bf4b204356dfe1121890afa63e74 /src/shared/bootspec.c
parent85d021023fcd491ceedc004bc28fc8d5c90b0c69 (diff)
downloadsystemd-4a4994b68dd1e61696b122c74111ed40e329027e.tar.gz
bootspec: use verify_fsroot_dir() in verify_xbootldr() too
Let's share some code between verify_xbootldr() and verify_esp().
Diffstat (limited to 'src/shared/bootspec.c')
-rw-r--r--src/shared/bootspec.c28
1 files changed, 5 insertions, 23 deletions
diff --git a/src/shared/bootspec.c b/src/shared/bootspec.c
index 0d0b09a77c..b20af117b3 100644
--- a/src/shared/bootspec.c
+++ b/src/shared/bootspec.c
@@ -964,43 +964,25 @@ static int verify_xbootldr(
bool unprivileged_mode,
sd_id128_t *ret_uuid) {
- struct stat st, st2;
bool relax_checks;
- const char *t2;
+ dev_t devid;
int r;
assert(p);
relax_checks = getenv_bool("SYSTEMD_RELAX_XBOOTLDR_CHECKS") > 0;
- if (stat(p, &st) < 0)
- return log_full_errno((searching && errno == ENOENT) ||
- (unprivileged_mode && errno == EACCES) ? LOG_DEBUG : LOG_ERR, errno,
- "Failed to determine block device node of \"%s\": %m", p);
-
- if (major(st.st_dev) == 0)
- return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
- SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
- "Block device node of \"%s\" is invalid.", p);
-
- t2 = strjoina(p, "/..");
- r = stat(t2, &st2);
+ r = verify_fsroot_dir(p, searching, unprivileged_mode, &devid);
if (r < 0)
- return log_full_errno(unprivileged_mode && errno == EACCES ? LOG_DEBUG : LOG_ERR, errno,
- "Failed to determine block device node of parent of \"%s\": %m", p);
-
- if (st.st_dev == st2.st_dev)
- return log_full_errno(searching ? LOG_DEBUG : LOG_ERR,
- SYNTHETIC_ERRNO(searching ? EADDRNOTAVAIL : ENODEV),
- "Directory \"%s\" is not the root of the XBOOTLDR file system.", p);
+ return r;
if (detect_container() > 0 || relax_checks)
goto finish;
if (unprivileged_mode)
- return verify_xbootldr_udev(st.st_dev, searching, ret_uuid);
+ return verify_xbootldr_udev(devid, searching, ret_uuid);
else
- return verify_xbootldr_blkid(st.st_dev, searching, ret_uuid);
+ return verify_xbootldr_blkid(devid, searching, ret_uuid);
finish:
if (ret_uuid)