From: Lennart Poettering Date: Sat, 11 Jul 2015 20:29:48 +0000 (-0300) Subject: logind: some firmware implementations remove OsIndications if it is unset X-Git-Tag: v223~118^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=6b62bbbc7b53bee11778d27d18e9506d9b42d4ba;p=thirdparty%2Fsystemd.git logind: some firmware implementations remove OsIndications if it is unset We shouldn't fall over that, and just assume it is 0 in this case. Fixes #499. --- diff --git a/src/shared/efivars.c b/src/shared/efivars.c index 0d6ecf52cfe..347cd30b09d 100644 --- a/src/shared/efivars.c +++ b/src/shared/efivars.c @@ -125,7 +125,19 @@ static int get_os_indications(uint64_t *os_indication) { return r; r = efi_get_variable(EFI_VENDOR_GLOBAL, "OsIndications", NULL, &v, &s); - if (r < 0) + if (r == -ENOENT) { + /* Some firmware implementations that do support + * OsIndications and report that with + * OsIndicationsSupported will remove the + * OsIndications variable when it is unset. Let's + * pretend it's 0 then, to hide this implementation + * detail. Note that this call will return -ENOENT + * then only if the support for OsIndications is + * missing entirely, as determined by + * efi_reboot_to_firmware_supported() above. */ + *os_indication = 0; + return 0; + } else if (r < 0) return r; else if (s != sizeof(uint64_t)) return -EINVAL;