diff options
author | Heinrich Schuchardt | 2019-06-15 14:07:40 +0200 |
---|---|---|
committer | Heinrich Schuchardt | 2019-06-20 22:26:15 +0000 |
commit | 97cf20861ac2a359bcde930d4ab17cec70da81f7 (patch) | |
tree | 37ec4765c805b3cda76c3fa383545efeaa146a31 /lib | |
parent | 1f7a8b3389d66f279bf75fcfdd10c1c7d2561d6e (diff) |
efi_loader: QueryMode() must allocate buffer
EFI_GRAPHICS_OUTPUT_PROTOCOL.QueryMode() must allocate a buffer for the
mode information structure.
Adjust the unit test to free the buffer.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/efi_loader/efi_gop.c | 6 | ||||
-rw-r--r-- | lib/efi_selftest/efi_selftest_gop.c | 5 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c index 676463f2de0..2385c0f3b13 100644 --- a/lib/efi_loader/efi_gop.c +++ b/lib/efi_loader/efi_gop.c @@ -51,8 +51,12 @@ static efi_status_t EFIAPI gop_query_mode(struct efi_gop *this, u32 mode_number, } gopobj = container_of(this, struct efi_gop_obj, ops); + ret = efi_allocate_pool(EFI_BOOT_SERVICES_DATA, sizeof(gopobj->info), + (void **)info); + if (ret != EFI_SUCCESS) + goto out; *size_of_info = sizeof(gopobj->info); - *info = &gopobj->info; + memcpy(*info, &gopobj->info, sizeof(gopobj->info)); out: return EFI_EXIT(ret); diff --git a/lib/efi_selftest/efi_selftest_gop.c b/lib/efi_selftest/efi_selftest_gop.c index 4ad043c5974..d64294ac79d 100644 --- a/lib/efi_selftest/efi_selftest_gop.c +++ b/lib/efi_selftest/efi_selftest_gop.c @@ -80,6 +80,11 @@ static int execute(void) } efi_st_printf("Mode %u: %u x %u\n", i, info->width, info->height); + ret = boottime->free_pool(info); + if (ret != EFI_SUCCESS) { + efi_st_printf("FreePool failed"); + return EFI_ST_FAILURE; + } } return EFI_ST_SUCCESS; |