Bug#925309: Wrong prefix directory hardcoded in signed GRUB image

Pascal Hambourg pascal at plouf.fr.eu.org
Tue Dec 13 15:00:30 GMT 2022


(CC'in Steve McIntyre and debian-efi)

On 24/03/2019 at 01:10, Colin Watson wrote:
> On Fri, Mar 22, 2019 at 08:47:37PM +0100, Pascal Hambourg wrote:
>>
>> grub-install installs this initial grub.cfg in the same location as the
>> signed image, i.e.
>> - /EFI/BOOT if the option --removable is present
>> - the directory derived from the --bootloader-id option if present
>> - the directory derived from $GRUB_DISTRIBUTOR defined in /etc/default/grub
>>
>> The default value of $GRUB_DISTRIBUTOR is "Debian", so the default install
>> location is (EFI_PARTITION)/EFI/debian.
>>
>> However when the signed image is installed in a different location, it still
>> looks for grub.cfg in (EFI_PARTITION)/EFI/debian instead of $cmdpath and
>> spawns the grub> shell unless grub.cfg is present in this location. In the
>> shell, $prefix is set to (EFI_PARTITION)/EFI/debian.
>>
>> Shouldn't the prefix be initialized with $cmdpath instead of the hardcoded
>> path /EFI/debian ?
> 
> Possibly.  The prefix parameter given to grub-mkimage's -p option has to
> be an actual path, not a variable reference.  In order to make it use
> $cmdpath, we'd need another one of the arrangements we use for some of
> the other pre-built images to use a config file embedded in a memdisk.

Upcoming grub2 2.06-3~deb11u5 brought an unexpected side-effect 
regarding bugs #925309 and #1017887.
An initial config file (memdisk)/grub.cfg is now embedded in the signed 
core image along with the font file.
The relevant part is:

	elif [ -e $prefix/grub.cfg ]; then
		source $prefix/grub.cfg
	else
		source $cmdpath/grub.cfg

So if /EFI/debian/grub.cfg does not exist, then /EFI/<id>/grub.cfg can 
now be used instead. This is a significant improvement.

However, two issues remain.

1) If /EFI/debian/grub.cfg exists, it is still used even if 
/EFI/<id>/grub.cfg also exists. This is an issue when installing 
multiple instances of GRUB for different Debian systems if one has the 
default <id>="debian". Is it conceivable to reverse the order and use 
$cmdpath/grub.cfg first ?

2) The file /EFI/<id>/BOOT${ARCH}.CSV always contains the name "debian" 
regardless of the identifier <id> specified by --bootloader-id on the 
grub-install command line or $GRUB_DISTRIBUTOR in /etc/default/grub. The 
name in this file is used by fb${ARCH}.efi run by shim when invoked as 
/EFI/BOOT/BOOT${ARCH}.efi (removable media path) to recreate an EFI boot 
variable for the instance, so the variable will be labelled "debian" 
instead of <id>. Is it conceivable to replace "debian" with <id> in this 
file ?



More information about the Pkg-grub-devel mailing list