1
1
mirror of https://github.com/systemd/systemd-stable.git synced 2025-01-31 01:47:15 +03:00

boot: Fix readdir_harder() on VirtualBox

Fixes: #22073
(cherry picked from commit ed3abbfbde674bd163cb1c64d9e31dd24e352f85)
This commit is contained in:
Jan Janssen 2022-01-10 11:16:26 +01:00 committed by Zbigniew Jędrzejewski-Szmek
parent 617c67a039
commit e9a0404b76
2 changed files with 8 additions and 3 deletions

View File

@ -1572,7 +1572,7 @@ static void config_load_entries(
_cleanup_freepool_ CHAR8 *content = NULL;
err = readdir_harder(entries_dir, &f, &f_size);
if (f_size == 0 || EFI_ERROR(err))
if (EFI_ERROR(err) || !f)
break;
if (f->FileName[0] == '.')
@ -2007,7 +2007,7 @@ static void config_entry_add_linux(
CHAR8 *key, *value;
err = readdir_harder(linux_dir, &f, &f_size);
if (f_size == 0 || EFI_ERROR(err))
if (EFI_ERROR(err) || !f)
break;
if (f->FileName[0] == '.')

View File

@ -596,7 +596,12 @@ EFI_STATUS readdir_harder(
* the specified buffer needs to be freed by caller, after final use. */
if (!*buffer) {
sz = offsetof(EFI_FILE_INFO, FileName) /* + 256 */;
/* Some broken firmware violates the EFI spec by still advancing the readdir
* position when returning EFI_BUFFER_TOO_SMALL, effectively skipping over any files when
* the buffer was too small. Therefore, start with a buffer that should handle FAT32 max
* file name length.
* As a side effect, most readdir_harder() calls will now be slightly faster. */
sz = sizeof(EFI_FILE_INFO) + 256 * sizeof(CHAR16);
*buffer = xallocate_pool(sz);
*buffer_size = sz;
} else