Ack, with notes: [PATCH 2/3][Resend] uefi: uefidump: add support for Driver#### (LP:#1237263)
Colin Ian King
colin.king at canonical.com
Mon Oct 14 11:40:19 UTC 2013
On 14/10/13 11:11, Ivan Hu wrote:
> Add support for Driver#### - Each Driver#### variable contains
> an EFI_LOAD_OPTION. Each load option variable is appended with
> a unique number, for example Driver0001, Driver0002, etc.
>
> This patch also modify the defination of FWTS_UEFI_LOAD_ACTIVE
> correspond to the UEFI spec.
>
> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
> ---
> src/lib/include/fwts_uefi.h | 3 ++-
> src/uefi/uefidump/uefidump.c | 42 +++++++++++++++++++++++++++++++++++++++++-
> 2 files changed, 43 insertions(+), 2 deletions(-)
>
> diff --git a/src/lib/include/fwts_uefi.h b/src/lib/include/fwts_uefi.h
> index ecac84d..d38903e 100644
> --- a/src/lib/include/fwts_uefi.h
> +++ b/src/lib/include/fwts_uefi.h
> @@ -20,7 +20,8 @@
> #ifndef __FWTS_UEFI_H__
> #define __FWTS_UEFI_H__
>
> -#define FWTS_UEFI_LOAD_ACTIVE 0x00000001
> +#define FWTS_UEFI_LOAD_OPTION_ACTIVE 0x00000001
> +#define FWTS_UEFI_LOAD_OPTION_FORCE_RECONNECT 0x00000002
>
> typedef struct {
> uint16_t *varname;
> diff --git a/src/uefi/uefidump/uefidump.c b/src/uefi/uefidump/uefidump.c
> index 04519d7..b414ca9 100644
> --- a/src/uefi/uefidump/uefidump.c
> +++ b/src/uefi/uefidump/uefidump.c
> @@ -508,7 +508,7 @@ static void uefidump_info_bootdev(fwts_framework *fw, fwts_uefi_var *var)
> int len;
>
> fwts_log_info_verbatum(fw, " Active: %s\n",
> - (load_option->attributes & FWTS_UEFI_LOAD_ACTIVE) ? "Yes" : "No");
> + (load_option->attributes & FWTS_UEFI_LOAD_OPTION_ACTIVE) ? "Yes" : "No");
> fwts_uefi_str16_to_str(tmp, sizeof(tmp), load_option->description);
> len = fwts_uefi_str16len(load_option->description);
> fwts_log_info_verbatum(fw, " Info: %s\n", tmp);
> @@ -745,6 +745,38 @@ static void uefidump_info_driverorder(fwts_framework *fw, fwts_uefi_var *var)
> free(str);
> }
>
> +static void uefidump_info_driverdev(fwts_framework *fw, fwts_uefi_var *var)
> +{
> + fwts_uefi_load_option *load_option = (fwts_uefi_load_option *)var->data;
> + char *path;
> + char *tmp;
> + size_t len;
> +
> + fwts_log_info_verbatum(fw, " Force Reconnect: %s\n",
> + (load_option->attributes & FWTS_UEFI_LOAD_OPTION_FORCE_RECONNECT) ? "Yes" : "No");
> +
> + len = fwts_uefi_str16len(load_option->description);
> +
> + if (len != 0) {
> + tmp = malloc(len + 1);
> + if (tmp) {
> + fwts_uefi_str16_to_str(tmp, len + 1, load_option->description);
> + fwts_log_info_verbatum(fw, " Info: %s\n", tmp);
> + free(tmp);
> + }
> + }
> +
> + if (load_option->file_path_list_length != 0) {
> + /* Skip over description to get to packed path, unpack path and print */
> + path = (char *)var->data + sizeof(load_option->attributes) +
> + sizeof(load_option->file_path_list_length) +
> + (sizeof(uint16_t) * (len + 1));
> + path = uefidump_build_dev_path(NULL, (fwts_uefi_dev_path *)path);
> + fwts_log_info_verbatum(fw, " Path: %s.", path);
> + free(path);
> + }
> +}
I still think this is problematic with issue with the deferences to
load_option->description, attributes, file_path_list_length, etc.
However, this is identical issue to some more of the code in uefidump.
I'll accept this and file a bug against uefidump as it needs fixing in
several other places and we can do that in one go once these patched are
pulled in.
This patch also has a white space issue:
Applying: uefi: uefidump: add support for Driver#### (LP:#1237263)
/home/king/ivan/fwts/.git/rebase-apply/patch:48: trailing whitespace.
Keng-Yu, can you fix that up before applying?
> +
> static uefidump_info uefidump_info_table[] = {
> { "PlatformLangCodes", uefidump_info_platform_langcodes },
> { "PlatformLang", uefidump_info_platform_lang },
> @@ -804,6 +836,14 @@ static void uefidump_var(fwts_framework *fw, fwts_uefi_var *var)
> return;
> }
>
> + /* Check the driver load option Driver####. #### is a printed hex value */
> + if ((strlen(varname) == 10) && (strncmp(varname, "Driver", 6) == 0)
> + && isxdigit(varname[6]) && isxdigit(varname[7])
> + && isxdigit(varname[8]) && isxdigit(varname[9])) {
> + uefidump_info_driverdev(fw, var);
> + return;
> + }
> +
> /* otherwise just do a plain old hex dump */
> uefidump_var_hexdump(fw, var);
> }
>
More information about the fwts-devel
mailing list