<itemizedlist>
<listitem><para>For a kernel binary called <filename><replaceable>foo</replaceable>.efi</filename>, it
will look for files with the <filename>.cred</filename> suffix in a directory named
- <filename><replaceable>foo</replaceable>.efi.extra.d/</filename> next to it. A <command>cpio</command>
+ <filename><replaceable>foo</replaceable>.efi.extra.d/</filename> next to it. If the kernel binary
+ uses a counter for the purpose of
+ <ulink url="https://systemd.io/AUTOMATIC_BOOT_ASSESSMENT">Automatic Boot Assessment</ulink>, this
+ counter will be ignored. For example, <filename><replaceable>foo</replaceable>+3-0.efi</filename>
+ will look in directory <filename><replaceable>foo</replaceable>.efi.extra.d/</filename>.
+ A <command>cpio</command>
archive is generated from all files found that way, placing them in the
<filename>/.extra/credentials/</filename> directory of the initrd file hierarchy. The main initrd may
then access them in this directory. This is supposed to be used to store auxiliary, encrypted,
return NULL;
}
+static void remove_boot_count(char16_t *path) {
+ char16_t *prefix_end;
+ const char16_t *tail;
+ uint64_t ignored;
+
+ assert(path);
+
+ prefix_end = strchr16(path, '+');
+ if (!prefix_end)
+ return;
+
+ tail = prefix_end + 1;
+
+ if (!parse_number16(tail, &ignored, &tail))
+ return;
+
+ if (*tail == '-') {
+ ++tail;
+ if (!parse_number16(tail, &ignored, &tail))
+ return;
+ }
+
+ if (!IN_SET(*tail, '\0', '.'))
+ return;
+
+ strcpy16(prefix_end, tail);
+}
+
char16_t *get_extra_dir(const EFI_DEVICE_PATH *file_path) {
if (!file_path)
return NULL;
return NULL;
convert_efi_path(file_path_str);
+ remove_boot_count(file_path_str);
return xasprintf("%ls.extra.d", file_path_str);
}