From: Anssi Hannula Date: Thu, 23 Sep 2021 09:08:05 +0000 (+0300) Subject: bootctl: Fix update not adding EFI entry if Boot IDs are non-consecutive X-Git-Tag: v250-rc1~633 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=26d54e1263dcb58daa6578595cc6ab1037315593;p=thirdparty%2Fsystemd.git bootctl: Fix update not adding EFI entry if Boot IDs are non-consecutive "bootctl update" tries to add sd-boot to the EFI boot loader list if it is not already there. To do so, it uses find_slot() which finds the proper BootXXXX slot ID to use and also returns 1 if an existing sd-boot entry was found at this ID or 0 if it is a new unused ID. In "update" case install_variables() only writes the entry in case 0 (no existing entry). However, find_slot() erroneously returns 1 if it finds a gap in the Boot IDs (i.e. when not resorting to max(ids) + 1). This causes "bootctl update" to not add a missing systemd-boot boot entry if the existing BootXXXX entry IDs are not consecutive. Fix that by returning 0 in find_slot() when an empty gap ID is selected to make it match the behavior when selecting an empty non-gap ID. --- diff --git a/src/boot/bootctl.c b/src/boot/bootctl.c index d8a66616b0f..65e5262a099 100644 --- a/src/boot/bootctl.c +++ b/src/boot/bootctl.c @@ -722,7 +722,7 @@ static int find_slot(sd_id128_t uuid, const char *path, uint16_t *id) { for (i = 0; i < n; i++) if (i != options[i]) { *id = i; - return 1; + return 0; } /* use the next one */