The parsing of the "mount -l" was wrong. No break was on finding the proper line. Only works if the "efivarfs" line was last.
diff -ur efitools-1.4.2/lib/kernel_efivars.c efitools-1.4.2/lib/kernel_efivars.c--- efitools-1.4.2/lib/kernel_efivars.c+++ efitools-1.4.2/lib/kernel_efivars.c@@ -44,7 +44,6 @@ /* hopefully stderr said what was wrong */ exit(1); fd = open(fname, O_RDONLY);- unlink(fname); if (fd < 0) { fprintf(stderr, "Failed to open output of %s\n", cmdline); exit(1);@@ -60,6 +59,7 @@ buf = malloc(st.st_size); read(fd, buf, st.st_size); close(fd);+ unlink(fname); char *ptr = buf; char path[512], type[512];@@ -68,15 +68,14 @@ sscanf(ptr, "%*s on %s type %s %*s\n%n", path, type, &count); ptr += count;- if (strcmp(type, "efivarfs") != 0)- continue;- }- if (strcmp(type, "efivarfs") != 0) {- fprintf(stderr, "No efivarfs filesystem is mounted\n");- exit(1);+ if (strcmp(type, "efivarfs") == 0)+ {+ kernel_efi_path = strdup(path);+ return;+ } }- kernel_efi_path = malloc(strlen(path) + 1);- strcpy(kernel_efi_path, path);+ fprintf(stderr, "No efivarfs filesystem is mounted\n");+ exit(1); } int