* [U-Boot] [PATCH 1/1] efi_loader: ListPackageLists() return EFI_NOT_FOUND
@ 2019-06-17 19:02 Heinrich Schuchardt
2019-06-18 0:44 ` AKASHI Takahiro
0 siblings, 1 reply; 4+ messages in thread
From: Heinrich Schuchardt @ 2019-06-17 19:02 UTC (permalink / raw)
To: u-boot
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.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
---
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;
+ }
}
*handle_buffer_length = package_cnt * sizeof(*handle);
-
+out:
return EFI_EXIT(ret);
}
--
2.20.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* [U-Boot] [PATCH 1/1] efi_loader: ListPackageLists() return EFI_NOT_FOUND
2019-06-17 19:02 [U-Boot] [PATCH 1/1] efi_loader: ListPackageLists() return EFI_NOT_FOUND Heinrich Schuchardt
@ 2019-06-18 0:44 ` AKASHI Takahiro
2019-06-18 5:41 ` Heinrich Schuchardt
2019-06-18 5:58 ` Heinrich Schuchardt
0 siblings, 2 replies; 4+ messages in thread
From: AKASHI Takahiro @ 2019-06-18 0:44 UTC (permalink / raw)
To: u-boot
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 <xypron.glpk@gmx.de>
> ---
> 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
>
^ permalink raw reply [flat|nested] 4+ messages in thread* [U-Boot] [PATCH 1/1] efi_loader: ListPackageLists() return EFI_NOT_FOUND
2019-06-18 0:44 ` AKASHI Takahiro
@ 2019-06-18 5:41 ` Heinrich Schuchardt
2019-06-18 5:58 ` Heinrich Schuchardt
1 sibling, 0 replies; 4+ messages in thread
From: Heinrich Schuchardt @ 2019-06-18 5:41 UTC (permalink / raw)
To: u-boot
On 6/18/19 2:44 AM, AKASHI Takahiro wrote:
> 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.
The caller still can pass an unsupported package type.
Regards
Heinrich
>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>> 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
>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread* [U-Boot] [PATCH 1/1] efi_loader: ListPackageLists() return EFI_NOT_FOUND
2019-06-18 0:44 ` AKASHI Takahiro
2019-06-18 5:41 ` Heinrich Schuchardt
@ 2019-06-18 5:58 ` Heinrich Schuchardt
1 sibling, 0 replies; 4+ messages in thread
From: Heinrich Schuchardt @ 2019-06-18 5:58 UTC (permalink / raw)
To: u-boot
On 6/18/19 2:44 AM, AKASHI Takahiro wrote:
> 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.
So we should remove all those EFI_PRINT() statements.
>
>> Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
>> ---
>> 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.
For copying to *handle we need the `if'. The code will remain shorter if
we do not introduce a second `if' after the loop.
Regards
Heinrich
>
>> }
>> *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
>>
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2019-06-18 5:58 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-06-17 19:02 [U-Boot] [PATCH 1/1] efi_loader: ListPackageLists() return EFI_NOT_FOUND Heinrich Schuchardt
2019-06-18 0:44 ` AKASHI Takahiro
2019-06-18 5:41 ` Heinrich Schuchardt
2019-06-18 5:58 ` Heinrich Schuchardt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox