diff --git a/src/basic/efivars.c b/src/basic/efivars.c index 16982e4784..7cff804544 100644 --- a/src/basic/efivars.c +++ b/src/basic/efivars.c @@ -69,19 +69,21 @@ int efi_get_variable( return 0; } - if (DEBUG_LOGGING) + if (DEBUG_LOGGING) { + log_debug("Reading EFI variable %s.", p); begin = now(CLOCK_MONOTONIC); + } fd = open(p, O_RDONLY|O_NOCTTY|O_CLOEXEC); if (fd < 0) return log_debug_errno(errno, "open(\"%s\") failed: %m", p); if (fstat(fd, &st) < 0) - return -errno; + return log_debug_errno(errno, "fstat(\"%s\") failed: %m", p); if (st.st_size < 4) - return -ENODATA; + return log_debug_errno(SYNTHETIC_ERRNO(ENODATA), "EFI variable %s is shorter than 4 bytes, refusing.", p); if (st.st_size > 4*1024*1024 + 4) - return -E2BIG; + return log_debug_errno(SYNTHETIC_ERRNO(E2BIG), "EFI variable %s is ridiculously large, refusing.", p); if (ret_value || ret_attribute) { /* The kernel ratelimits reads from the efivarfs because EFI is inefficient, and we'll @@ -96,7 +98,7 @@ int efi_get_variable( n = read(fd, &a, sizeof(a)); if (n >= 0) break; - log_debug_errno(errno, "read from \"%s\" failed: %m", p); + log_debug_errno(errno, "Reading from \"%s\" failed: %m", p); if (errno != EINTR) return -errno; if (try >= EFI_N_RETRIES) @@ -106,7 +108,8 @@ int efi_get_variable( } if (n != sizeof(a)) - return -EIO; + return log_debug_errno(SYNTHETIC_ERRNO(EIO), + "Read %zi bytes from EFI variable %s, expected %zu.", n, p, sizeof(a)); } if (ret_value) { @@ -116,7 +119,7 @@ int efi_get_variable( n = read(fd, buf, (size_t) st.st_size - 4); if (n < 0) - return -errno; + return log_debug_errno(errno, "Failed to read value of EFI variable %s: %m", p); assert(n <= st.st_size - 4); /* Always NUL terminate (3 bytes, to properly protect UTF-16, even if truncated in the middle of a character) */