X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=src%2Fshared%2Fefivars.c;h=4fb77428f22a2b94d79f1ca349a225b40d898582;hb=a4783bd17ad96f55b0fe83a50959da13555292bf;hp=8494f37729504d747d186dacca1c7137bdb84c5f;hpb=b872e9a05939bc3e0ac95a042592506a7488dd6f;p=elogind.git diff --git a/src/shared/efivars.c b/src/shared/efivars.c index 8494f3772..4fb77428f 100644 --- a/src/shared/efivars.c +++ b/src/shared/efivars.c @@ -34,6 +34,36 @@ bool is_efi_boot(void) { return access("/sys/firmware/efi", F_OK) >= 0; } +static int read_flag(const char *varname) { + int r; + void *v; + size_t s; + uint8_t b; + + r = efi_get_variable(EFI_VENDOR_GLOBAL, varname, NULL, &v, &s); + if (r < 0) + return r; + + if (s != 1) { + r = -EINVAL; + goto finish; + } + + b = *(uint8_t *)v; + r = b > 0; +finish: + free(v); + return r; +} + +int is_efi_secure_boot(void) { + return read_flag("SecureBoot"); +} + +int is_efi_secure_boot_setup_mode(void) { + return read_flag("SetupMode"); +} + int efi_get_variable( sd_id128_t vendor, const char *name, @@ -308,12 +338,7 @@ static int boot_id_hex(const char s[4]) { static int cmp_uint16(const void *_a, const void *_b) { const uint16_t *a = _a, *b = _b; - if (*a < *b) - return -1; - if (*a > *b) - return 1; - - return 0; + return (int)*a - (int)*b; } int efi_get_boot_options(uint16_t **options) {