boot: gracefully handle LoadFile() implementations that return EFI_SUCCESS with a NULL buffer

LoadFile() with a NULL buffer is supposed to return the file size
without acquiring the data and return EFI_BUFFER_TOO_SMALL.

However it appears some firmware returns EFI_SUCCESS in case the file is
empty, i.e. the file size returned is zero. And I guess that's even
fine.

Let's handle this gracefully hence.
This commit is contained in:
Lennart Poettering
2026-04-17 18:23:51 +02:00
committed by Lennart Poettering
parent a93fa2c6b4
commit c40f254cca
+6 -1
View File
@@ -2719,7 +2719,12 @@ static EFI_STATUS expand_path(
if (IN_SET(err, EFI_NOT_FOUND, EFI_INVALID_PARAMETER))
continue; /* Skip over LoadFile() handles that after all don't consider themselves
* appropriate for this kind of path */
if (err != EFI_BUFFER_TOO_SMALL) {
if (!IN_SET(err, EFI_SUCCESS, EFI_BUFFER_TOO_SMALL)) {
/* NB: firmwares are supposed to return EFI_BUFFER_TOO_SMALL whenever we pass a NULL
* buffer. But for compatibility with quirky firmwares let's be lenient for the
* special case of a zero sized file: the firmware might return EFI_SUCCESS here and
* initialize the size to zero, as a buffer is not actually necessary for that
* case. */
log_warning_status(err, "Failed to get file via LoadFile() protocol, ignoring: %m");
continue;
}