[U-Boot] [PATCH 0/3] efi_loader: GOP parameter checks

Correct parameter checks of the graphical output protocol
Heinrich Schuchardt (3): efi_loader: Blt() with incorrect BltOperation efi_loader: QueryMode() check parameters efi_loader: SetMode() parameters check
lib/efi_loader/efi_gop.c | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-)
-- 2.20.1

If EFI_GRAPHICS_OUTPUT_PROTOCOL.Blt() is called with an invalid value of BltOperation return EFI_INVALID_PARAMETER.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- lib/efi_loader/efi_gop.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c index e003823b60..9428c3b83c 100644 --- a/lib/efi_loader/efi_gop.c +++ b/lib/efi_loader/efi_gop.c @@ -367,7 +367,7 @@ efi_status_t EFIAPI gop_blt(struct efi_gop *this, struct efi_gop_pixel *buffer, dy, width, height, delta, vid_bpp); break; default: - ret = EFI_UNSUPPORTED; + ret = EFI_INVALID_PARAMETER; }
if (ret != EFI_SUCCESS) -- 2.20.1

Check the parameters of EFI_GRAPHICS_OUTPUT_PROTOCOL.QueryMode().
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- lib/efi_loader/efi_gop.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c index 9428c3b83c..c44a1cfc47 100644 --- a/lib/efi_loader/efi_gop.c +++ b/lib/efi_loader/efi_gop.c @@ -41,14 +41,21 @@ static efi_status_t EFIAPI gop_query_mode(struct efi_gop *this, u32 mode_number, struct efi_gop_mode_info **info) { struct efi_gop_obj *gopobj; + efi_status_t ret = EFI_SUCCESS;
EFI_ENTRY("%p, %x, %p, %p", this, mode_number, size_of_info, info);
+ if (!this || !size_of_info || !info || mode_number) { + ret = EFI_INVALID_PARAMETER; + goto out; + } + gopobj = container_of(this, struct efi_gop_obj, ops); *size_of_info = sizeof(gopobj->info); *info = &gopobj->info;
- return EFI_EXIT(EFI_SUCCESS); +out: + return EFI_EXIT(ret); }
static efi_status_t EFIAPI gop_set_mode(struct efi_gop *this, u32 mode_number) -- 2.20.1

If EFI_GRAPHICS_OUTPUT_PROTOCOL.SetMode() is called with an invalid mode, return EFI_UNSUPPORTED.
Signed-off-by: Heinrich Schuchardt xypron.glpk@gmx.de --- lib/efi_loader/efi_gop.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/lib/efi_loader/efi_gop.c b/lib/efi_loader/efi_gop.c index c44a1cfc47..676463f2de 100644 --- a/lib/efi_loader/efi_gop.c +++ b/lib/efi_loader/efi_gop.c @@ -60,12 +60,14 @@ out:
static efi_status_t EFIAPI gop_set_mode(struct efi_gop *this, u32 mode_number) { + efi_status_t ret = EFI_SUCCESS; + EFI_ENTRY("%p, %x", this, mode_number);
- if (mode_number != 0) - return EFI_EXIT(EFI_INVALID_PARAMETER); + if (mode_number) + ret = EFI_UNSUPPORTED;
- return EFI_EXIT(EFI_SUCCESS); + return EFI_EXIT(ret); }
static __always_inline struct efi_gop_pixel efi_vid16_to_blt_col(u16 vid) -- 2.20.1
participants (1)
-
Heinrich Schuchardt