From mboxrd@z Thu Jan 1 00:00:00 1970 From: AKASHI Takahiro Date: Tue, 18 Jun 2019 09:44:58 +0900 Subject: [U-Boot] [PATCH 1/1] efi_loader: ListPackageLists() return EFI_NOT_FOUND In-Reply-To: <20190617190246.32188-1-xypron.glpk@gmx.de> References: <20190617190246.32188-1-xypron.glpk@gmx.de> Message-ID: <20190618004457.GE6610@linaro.org> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Mon, Jun 17, 2019 at 09:02:46PM +0200, Heinrich Schuchardt wrote: > If no matching package list is found in ListPackageLists(), return > EFI_NOT_FOUND. > > If we do not support a package type, we can immediately leave the function. This won't happen because add_packages() eliminates all unsupported packages. > Signed-off-by: Heinrich Schuchardt > --- > lib/efi_loader/efi_hii.c | 34 ++++++++++++++++++++-------------- > 1 file changed, 20 insertions(+), 14 deletions(-) > > diff --git a/lib/efi_loader/efi_hii.c b/lib/efi_loader/efi_hii.c > index 61b71dec62..8ce526e1c8 100644 > --- a/lib/efi_loader/efi_hii.c > +++ b/lib/efi_loader/efi_hii.c > @@ -581,18 +581,22 @@ list_package_lists(const struct efi_hii_database_protocol *this, > struct efi_hii_packagelist *hii = > (struct efi_hii_packagelist *)handle; > int package_cnt, package_max; > - efi_status_t ret = EFI_SUCCESS; > + efi_status_t ret = EFI_NOT_FOUND; > > EFI_ENTRY("%p, %u, %pUl, %p, %p", this, package_type, package_guid, > handle_buffer_length, handle); > > if (!handle_buffer_length || > - (*handle_buffer_length && !handle)) > - return EFI_EXIT(EFI_INVALID_PARAMETER); > + (*handle_buffer_length && !handle)) { > + ret = EFI_INVALID_PARAMETER; > + goto out; > + } > > if ((package_type != EFI_HII_PACKAGE_TYPE_GUID && package_guid) || > - (package_type == EFI_HII_PACKAGE_TYPE_GUID && !package_guid)) > - return EFI_EXIT(EFI_INVALID_PARAMETER); > + (package_type == EFI_HII_PACKAGE_TYPE_GUID && !package_guid)) { > + ret = EFI_INVALID_PARAMETER; > + goto out; > + } > > EFI_PRINT("package type=%x, guid=%pUl, length=%zu\n", (int)package_type, > package_guid, *handle_buffer_length); > @@ -610,7 +614,7 @@ list_package_lists(const struct efi_hii_database_protocol *this, > case EFI_HII_PACKAGE_FORMS: > EFI_PRINT("Form package not supported\n"); > ret = EFI_INVALID_PARAMETER; > - continue; > + goto out; > case EFI_HII_PACKAGE_STRINGS: > if (!list_empty(&hii->string_tables)) > break; > @@ -618,19 +622,19 @@ list_package_lists(const struct efi_hii_database_protocol *this, > case EFI_HII_PACKAGE_FONTS: > EFI_PRINT("Font package not supported\n"); > ret = EFI_INVALID_PARAMETER; > - continue; > + goto out; > case EFI_HII_PACKAGE_IMAGES: > EFI_PRINT("Image package not supported\n"); > ret = EFI_INVALID_PARAMETER; > - continue; > + goto out; > case EFI_HII_PACKAGE_SIMPLE_FONTS: > EFI_PRINT("Simple font package not supported\n"); > ret = EFI_INVALID_PARAMETER; > - continue; > + goto out; > case EFI_HII_PACKAGE_DEVICE_PATH: > EFI_PRINT("Device path package not supported\n"); > ret = EFI_INVALID_PARAMETER; > - continue; > + goto out; > case EFI_HII_PACKAGE_KEYBOARD_LAYOUT: > if (!list_empty(&hii->keyboard_packages)) > break; > @@ -638,7 +642,7 @@ list_package_lists(const struct efi_hii_database_protocol *this, > case EFI_HII_PACKAGE_ANIMATIONS: > EFI_PRINT("Animation package not supported\n"); > ret = EFI_INVALID_PARAMETER; > - continue; > + goto out; > case EFI_HII_PACKAGE_END: > case EFI_HII_PACKAGE_TYPE_SYSTEM_BEGIN: > case EFI_HII_PACKAGE_TYPE_SYSTEM_END: > @@ -647,13 +651,15 @@ list_package_lists(const struct efi_hii_database_protocol *this, > } > > package_cnt++; > - if (package_cnt <= package_max) > + if (package_cnt <= package_max) { > *handle++ = hii; > - else > + ret = EFI_SUCCESS; > + } else { > ret = EFI_BUFFER_TOO_SMALL; > + } It will be enough that this check be done only once at the end of this function. > } > *handle_buffer_length = package_cnt * sizeof(*handle); here, if (package_cnt > package_max) ret = EFI_BUFFER_TOO_SMALL; - Takahiro Akashi > - > +out: > return EFI_EXIT(ret); > } > > -- > 2.20.1 >