mirror of
https://xff.cz/git/u-boot/
synced 2025-09-26 21:11:18 +02:00
efi_loader: don't use unlimited stack as buffer
The length of a string printed to the console by the EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL is not limited by the UEFI spec. Hence should not allocate a buffer for it on the stack. Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de> Signed-off-by: Alexander Graf <agraf@suse.de>
This commit is contained in:
committed by
Alexander Graf
parent
dcdb64f7f5
commit
ba7bd5c2ba
@@ -111,16 +111,21 @@ static efi_status_t EFIAPI efi_cout_output_string(
|
|||||||
{
|
{
|
||||||
struct simple_text_output_mode *con = &efi_con_mode;
|
struct simple_text_output_mode *con = &efi_con_mode;
|
||||||
struct cout_mode *mode = &efi_cout_modes[con->mode];
|
struct cout_mode *mode = &efi_cout_modes[con->mode];
|
||||||
|
char *buf, *pos;
|
||||||
|
u16 *p;
|
||||||
|
efi_status_t ret = EFI_SUCCESS;
|
||||||
|
|
||||||
EFI_ENTRY("%p, %p", this, string);
|
EFI_ENTRY("%p, %p", this, string);
|
||||||
|
|
||||||
unsigned int n16 = u16_strlen(string);
|
buf = malloc(utf16_utf8_strlen(string) + 1);
|
||||||
char buf[MAX_UTF8_PER_UTF16 * n16 + 1];
|
if (!buf) {
|
||||||
u16 *p;
|
ret = EFI_OUT_OF_RESOURCES;
|
||||||
|
goto out;
|
||||||
*utf16_to_utf8((u8 *)buf, string, n16) = '\0';
|
}
|
||||||
|
pos = buf;
|
||||||
|
utf16_utf8_strcpy(&pos, string);
|
||||||
fputs(stdout, buf);
|
fputs(stdout, buf);
|
||||||
|
free(buf);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Update the cursor position.
|
* Update the cursor position.
|
||||||
@@ -158,7 +163,8 @@ static efi_status_t EFIAPI efi_cout_output_string(
|
|||||||
con->cursor_row = min(con->cursor_row, (s32)mode->rows - 1);
|
con->cursor_row = min(con->cursor_row, (s32)mode->rows - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
return EFI_EXIT(EFI_SUCCESS);
|
out:
|
||||||
|
return EFI_EXIT(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static efi_status_t EFIAPI efi_cout_test_string(
|
static efi_status_t EFIAPI efi_cout_test_string(
|
||||||
|
Reference in New Issue
Block a user