diff mbox series

uefi: add helper function for efi test module init

Message ID 20200326083956.28493-1-ivan.hu@canonical.com
State Accepted
Headers show
Series uefi: add helper function for efi test module init | expand

Commit Message

Ivan Hu March 26, 2020, 8:39 a.m. UTC
Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
---
 src/lib/include/fwts_efi_module.h        |  1 +
 src/lib/src/fwts_efi_module.c            | 31 ++++++++++++++++++++++++
 src/uefi/securebootcert/securebootcert.c | 22 +++--------------
 src/uefi/uefirtauthvar/uefirtauthvar.c   | 19 +--------------
 src/uefi/uefirtmisc/uefirtmisc.c         | 19 +--------------
 src/uefi/uefirttime/uefirttime.c         | 19 +--------------
 src/uefi/uefirtvariable/uefirtvariable.c | 19 +--------------
 src/uefi/uefivarinfo/uefivarinfo.c       | 20 +--------------
 8 files changed, 40 insertions(+), 110 deletions(-)

Comments

Colin Ian King March 26, 2020, 9:10 a.m. UTC | #1
On 26/03/2020 08:39, Ivan Hu wrote:
> Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
> ---
>  src/lib/include/fwts_efi_module.h        |  1 +
>  src/lib/src/fwts_efi_module.c            | 31 ++++++++++++++++++++++++
>  src/uefi/securebootcert/securebootcert.c | 22 +++--------------
>  src/uefi/uefirtauthvar/uefirtauthvar.c   | 19 +--------------
>  src/uefi/uefirtmisc/uefirtmisc.c         | 19 +--------------
>  src/uefi/uefirttime/uefirttime.c         | 19 +--------------
>  src/uefi/uefirtvariable/uefirtvariable.c | 19 +--------------
>  src/uefi/uefivarinfo/uefivarinfo.c       | 20 +--------------
>  8 files changed, 40 insertions(+), 110 deletions(-)
> 
> diff --git a/src/lib/include/fwts_efi_module.h b/src/lib/include/fwts_efi_module.h
> index 7b40332a..824699a3 100644
> --- a/src/lib/include/fwts_efi_module.h
> +++ b/src/lib/include/fwts_efi_module.h
> @@ -25,5 +25,6 @@ int fwts_lib_efi_runtime_unload_module(fwts_framework *fw);
>  int fwts_lib_efi_runtime_open(void);
>  int fwts_lib_efi_runtime_close(int fd);
>  int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw);
> +int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd);
>  
>  #endif
> diff --git a/src/lib/src/fwts_efi_module.c b/src/lib/src/fwts_efi_module.c
> index 3c21b6d3..0767787b 100644
> --- a/src/lib/src/fwts_efi_module.c
> +++ b/src/lib/src/fwts_efi_module.c
> @@ -205,3 +205,34 @@ int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw)
>  	free(data);
>  	return FWTS_OK;
>  }
> +
> +/*
> + *  fwts_lib_efi_runtime_module_init()
> + *  check the EFI firmware support and load efi_test driver
> + *  also check if the kernel is in lockdown mode.
> + */
> +int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd)
> +{
> +
> +	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> +		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +		return FWTS_ABORTED;
> +	}
> +
> +	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> +		return FWTS_ABORTED;
> +	}
> +
> +	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> +		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> +		return FWTS_ABORTED;
> +	}
> +
> +	*fd = fwts_lib_efi_runtime_open();
> +	if (*fd == -1) {
> +		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> +		return FWTS_ABORTED;
> +	}
> +
> +	return FWTS_OK;
> +}
> diff --git a/src/uefi/securebootcert/securebootcert.c b/src/uefi/securebootcert/securebootcert.c
> index 87ace3e5..fdf5e482 100644
> --- a/src/uefi/securebootcert/securebootcert.c
> +++ b/src/uefi/securebootcert/securebootcert.c
> @@ -417,28 +417,12 @@ static void securebootcert_var(fwts_framework *fw, fwts_uefi_var *var)
>  
>  static int securebootcert_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> -		return FWTS_SKIP;
> -	}
>  
> -	if (!fwts_uefi_efivars_iface_exist()) {
> -		fwts_log_info(fw, "Cannot detect efivars interface. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
>  
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> +	if (!fwts_uefi_efivars_iface_exist()) {
> +		fwts_log_info(fw, "Cannot detect efivars interface. Aborted.");
>  		return FWTS_ABORTED;
>  	}
>  
> diff --git a/src/uefi/uefirtauthvar/uefirtauthvar.c b/src/uefi/uefirtauthvar/uefirtauthvar.c
> index a2a88d77..ca72fa24 100644
> --- a/src/uefi/uefirtauthvar/uefirtauthvar.c
> +++ b/src/uefi/uefirtauthvar/uefirtauthvar.c
> @@ -115,25 +115,8 @@ static void uefirtvariable_env_cleanup(void)
>  
>  static int uefirtauthvar_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	uefirtvariable_env_cleanup();
>  
> diff --git a/src/uefi/uefirtmisc/uefirtmisc.c b/src/uefi/uefirtmisc/uefirtmisc.c
> index c4176992..a2dc6967 100644
> --- a/src/uefi/uefirtmisc/uefirtmisc.c
> +++ b/src/uefi/uefirtmisc/uefirtmisc.c
> @@ -45,25 +45,8 @@ static EFI_GUID gEfiCapsuleHeaderGuid = EFI_CAPSULE_GUID;
>  
>  static int uefirtmisc_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	return FWTS_OK;
>  }
> diff --git a/src/uefi/uefirttime/uefirttime.c b/src/uefi/uefirttime/uefirttime.c
> index ea8c3577..e0aa7071 100644
> --- a/src/uefi/uefirttime/uefirttime.c
> +++ b/src/uefi/uefirttime/uefirttime.c
> @@ -169,25 +169,8 @@ static void addonehour(EFI_TIME *time)
>  
>  static int uefirttime_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	return FWTS_OK;
>  }
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index 3986d1d3..5a25e3ca 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -95,25 +95,8 @@ static void uefirtvariable_env_cleanup(void)
>  
>  static int uefirtvariable_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	uefirtvariable_env_cleanup();
>  
> diff --git a/src/uefi/uefivarinfo/uefivarinfo.c b/src/uefi/uefivarinfo/uefivarinfo.c
> index b407f5c6..6a26b425 100644
> --- a/src/uefi/uefivarinfo/uefivarinfo.c
> +++ b/src/uefi/uefivarinfo/uefivarinfo.c
> @@ -36,26 +36,8 @@ static int fd;
>  
>  static int uefivarinfo_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
>  	return FWTS_OK;
>  }
>  
> 

Good idea to refactor this code.

Acked-by: Colin Ian King <colin.king@canonical.com>
Alex Hung March 26, 2020, 11:38 p.m. UTC | #2
On 2020-03-26 2:39 a.m., Ivan Hu wrote:
> Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
> ---
>  src/lib/include/fwts_efi_module.h        |  1 +
>  src/lib/src/fwts_efi_module.c            | 31 ++++++++++++++++++++++++
>  src/uefi/securebootcert/securebootcert.c | 22 +++--------------
>  src/uefi/uefirtauthvar/uefirtauthvar.c   | 19 +--------------
>  src/uefi/uefirtmisc/uefirtmisc.c         | 19 +--------------
>  src/uefi/uefirttime/uefirttime.c         | 19 +--------------
>  src/uefi/uefirtvariable/uefirtvariable.c | 19 +--------------
>  src/uefi/uefivarinfo/uefivarinfo.c       | 20 +--------------
>  8 files changed, 40 insertions(+), 110 deletions(-)
> 
> diff --git a/src/lib/include/fwts_efi_module.h b/src/lib/include/fwts_efi_module.h
> index 7b40332a..824699a3 100644
> --- a/src/lib/include/fwts_efi_module.h
> +++ b/src/lib/include/fwts_efi_module.h
> @@ -25,5 +25,6 @@ int fwts_lib_efi_runtime_unload_module(fwts_framework *fw);
>  int fwts_lib_efi_runtime_open(void);
>  int fwts_lib_efi_runtime_close(int fd);
>  int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw);
> +int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd);
>  
>  #endif
> diff --git a/src/lib/src/fwts_efi_module.c b/src/lib/src/fwts_efi_module.c
> index 3c21b6d3..0767787b 100644
> --- a/src/lib/src/fwts_efi_module.c
> +++ b/src/lib/src/fwts_efi_module.c
> @@ -205,3 +205,34 @@ int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw)
>  	free(data);
>  	return FWTS_OK;
>  }
> +
> +/*
> + *  fwts_lib_efi_runtime_module_init()
> + *  check the EFI firmware support and load efi_test driver
> + *  also check if the kernel is in lockdown mode.
> + */
> +int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd)
> +{
> +
> +	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> +		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +		return FWTS_ABORTED;
> +	}
> +
> +	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> +		return FWTS_ABORTED;
> +	}
> +
> +	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> +		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> +		return FWTS_ABORTED;
> +	}
> +
> +	*fd = fwts_lib_efi_runtime_open();
> +	if (*fd == -1) {
> +		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> +		return FWTS_ABORTED;
> +	}
> +
> +	return FWTS_OK;
> +}
> diff --git a/src/uefi/securebootcert/securebootcert.c b/src/uefi/securebootcert/securebootcert.c
> index 87ace3e5..fdf5e482 100644
> --- a/src/uefi/securebootcert/securebootcert.c
> +++ b/src/uefi/securebootcert/securebootcert.c
> @@ -417,28 +417,12 @@ static void securebootcert_var(fwts_framework *fw, fwts_uefi_var *var)
>  
>  static int securebootcert_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> -		return FWTS_SKIP;
> -	}
>  
> -	if (!fwts_uefi_efivars_iface_exist()) {
> -		fwts_log_info(fw, "Cannot detect efivars interface. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
>  
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> +	if (!fwts_uefi_efivars_iface_exist()) {
> +		fwts_log_info(fw, "Cannot detect efivars interface. Aborted.");
>  		return FWTS_ABORTED;
>  	}
>  
> diff --git a/src/uefi/uefirtauthvar/uefirtauthvar.c b/src/uefi/uefirtauthvar/uefirtauthvar.c
> index a2a88d77..ca72fa24 100644
> --- a/src/uefi/uefirtauthvar/uefirtauthvar.c
> +++ b/src/uefi/uefirtauthvar/uefirtauthvar.c
> @@ -115,25 +115,8 @@ static void uefirtvariable_env_cleanup(void)
>  
>  static int uefirtauthvar_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	uefirtvariable_env_cleanup();
>  
> diff --git a/src/uefi/uefirtmisc/uefirtmisc.c b/src/uefi/uefirtmisc/uefirtmisc.c
> index c4176992..a2dc6967 100644
> --- a/src/uefi/uefirtmisc/uefirtmisc.c
> +++ b/src/uefi/uefirtmisc/uefirtmisc.c
> @@ -45,25 +45,8 @@ static EFI_GUID gEfiCapsuleHeaderGuid = EFI_CAPSULE_GUID;
>  
>  static int uefirtmisc_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	return FWTS_OK;
>  }
> diff --git a/src/uefi/uefirttime/uefirttime.c b/src/uefi/uefirttime/uefirttime.c
> index ea8c3577..e0aa7071 100644
> --- a/src/uefi/uefirttime/uefirttime.c
> +++ b/src/uefi/uefirttime/uefirttime.c
> @@ -169,25 +169,8 @@ static void addonehour(EFI_TIME *time)
>  
>  static int uefirttime_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	return FWTS_OK;
>  }
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index 3986d1d3..5a25e3ca 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -95,25 +95,8 @@ static void uefirtvariable_env_cleanup(void)
>  
>  static int uefirtvariable_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
>  
>  	uefirtvariable_env_cleanup();
>  
> diff --git a/src/uefi/uefivarinfo/uefivarinfo.c b/src/uefi/uefivarinfo/uefivarinfo.c
> index b407f5c6..6a26b425 100644
> --- a/src/uefi/uefivarinfo/uefivarinfo.c
> +++ b/src/uefi/uefivarinfo/uefivarinfo.c
> @@ -36,26 +36,8 @@ static int fd;
>  
>  static int uefivarinfo_init(fwts_framework *fw)
>  {
> -	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
> -		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
> +	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
>  		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
> -		return FWTS_ABORTED;
> -	}
> -
> -	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
> -		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
> -	fd = fwts_lib_efi_runtime_open();
> -	if (fd == -1) {
> -		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
> -		return FWTS_ABORTED;
> -	}
> -
>  	return FWTS_OK;
>  }
>  
> 

Acked-by: Alex Hung <alex.hung@canonical.com>
diff mbox series

Patch

diff --git a/src/lib/include/fwts_efi_module.h b/src/lib/include/fwts_efi_module.h
index 7b40332a..824699a3 100644
--- a/src/lib/include/fwts_efi_module.h
+++ b/src/lib/include/fwts_efi_module.h
@@ -25,5 +25,6 @@  int fwts_lib_efi_runtime_unload_module(fwts_framework *fw);
 int fwts_lib_efi_runtime_open(void);
 int fwts_lib_efi_runtime_close(int fd);
 int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw);
+int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd);
 
 #endif
diff --git a/src/lib/src/fwts_efi_module.c b/src/lib/src/fwts_efi_module.c
index 3c21b6d3..0767787b 100644
--- a/src/lib/src/fwts_efi_module.c
+++ b/src/lib/src/fwts_efi_module.c
@@ -205,3 +205,34 @@  int fwts_lib_efi_runtime_kernel_lockdown(fwts_framework *fw)
 	free(data);
 	return FWTS_OK;
 }
+
+/*
+ *  fwts_lib_efi_runtime_module_init()
+ *  check the EFI firmware support and load efi_test driver
+ *  also check if the kernel is in lockdown mode.
+ */
+int fwts_lib_efi_runtime_module_init(fwts_framework *fw, int *fd)
+{
+
+	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
+		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
+		return FWTS_ABORTED;
+	}
+
+	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
+		return FWTS_ABORTED;
+	}
+
+	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
+		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
+		return FWTS_ABORTED;
+	}
+
+	*fd = fwts_lib_efi_runtime_open();
+	if (*fd == -1) {
+		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
+		return FWTS_ABORTED;
+	}
+
+	return FWTS_OK;
+}
diff --git a/src/uefi/securebootcert/securebootcert.c b/src/uefi/securebootcert/securebootcert.c
index 87ace3e5..fdf5e482 100644
--- a/src/uefi/securebootcert/securebootcert.c
+++ b/src/uefi/securebootcert/securebootcert.c
@@ -417,28 +417,12 @@  static void securebootcert_var(fwts_framework *fw, fwts_uefi_var *var)
 
 static int securebootcert_init(fwts_framework *fw)
 {
-	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
-		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
-		return FWTS_SKIP;
-	}
 
-	if (!fwts_uefi_efivars_iface_exist()) {
-		fwts_log_info(fw, "Cannot detect efivars interface. Aborted.");
+	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
 		return FWTS_ABORTED;
-	}
 
-	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
-		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
-		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
-		return FWTS_ABORTED;
-	}
-
-	fd = fwts_lib_efi_runtime_open();
-	if (fd == -1) {
-		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
+	if (!fwts_uefi_efivars_iface_exist()) {
+		fwts_log_info(fw, "Cannot detect efivars interface. Aborted.");
 		return FWTS_ABORTED;
 	}
 
diff --git a/src/uefi/uefirtauthvar/uefirtauthvar.c b/src/uefi/uefirtauthvar/uefirtauthvar.c
index a2a88d77..ca72fa24 100644
--- a/src/uefi/uefirtauthvar/uefirtauthvar.c
+++ b/src/uefi/uefirtauthvar/uefirtauthvar.c
@@ -115,25 +115,8 @@  static void uefirtvariable_env_cleanup(void)
 
 static int uefirtauthvar_init(fwts_framework *fw)
 {
-	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
-		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
+	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
 		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
-		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
-		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
-		return FWTS_ABORTED;
-	}
-
-	fd = fwts_lib_efi_runtime_open();
-	if (fd == -1) {
-		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
-		return FWTS_ABORTED;
-	}
 
 	uefirtvariable_env_cleanup();
 
diff --git a/src/uefi/uefirtmisc/uefirtmisc.c b/src/uefi/uefirtmisc/uefirtmisc.c
index c4176992..a2dc6967 100644
--- a/src/uefi/uefirtmisc/uefirtmisc.c
+++ b/src/uefi/uefirtmisc/uefirtmisc.c
@@ -45,25 +45,8 @@  static EFI_GUID gEfiCapsuleHeaderGuid = EFI_CAPSULE_GUID;
 
 static int uefirtmisc_init(fwts_framework *fw)
 {
-	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
-		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
+	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
 		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
-		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
-		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
-		return FWTS_ABORTED;
-	}
-
-	fd = fwts_lib_efi_runtime_open();
-	if (fd == -1) {
-		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
-		return FWTS_ABORTED;
-	}
 
 	return FWTS_OK;
 }
diff --git a/src/uefi/uefirttime/uefirttime.c b/src/uefi/uefirttime/uefirttime.c
index ea8c3577..e0aa7071 100644
--- a/src/uefi/uefirttime/uefirttime.c
+++ b/src/uefi/uefirttime/uefirttime.c
@@ -169,25 +169,8 @@  static void addonehour(EFI_TIME *time)
 
 static int uefirttime_init(fwts_framework *fw)
 {
-	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
-		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
+	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
 		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
-		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
-		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
-		return FWTS_ABORTED;
-	}
-
-	fd = fwts_lib_efi_runtime_open();
-	if (fd == -1) {
-		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
-		return FWTS_ABORTED;
-	}
 
 	return FWTS_OK;
 }
diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
index 3986d1d3..5a25e3ca 100644
--- a/src/uefi/uefirtvariable/uefirtvariable.c
+++ b/src/uefi/uefirtvariable/uefirtvariable.c
@@ -95,25 +95,8 @@  static void uefirtvariable_env_cleanup(void)
 
 static int uefirtvariable_init(fwts_framework *fw)
 {
-	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
-		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
+	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
 		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
-		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
-		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
-		return FWTS_ABORTED;
-	}
-
-	fd = fwts_lib_efi_runtime_open();
-	if (fd == -1) {
-		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
-		return FWTS_ABORTED;
-	}
 
 	uefirtvariable_env_cleanup();
 
diff --git a/src/uefi/uefivarinfo/uefivarinfo.c b/src/uefi/uefivarinfo/uefivarinfo.c
index b407f5c6..6a26b425 100644
--- a/src/uefi/uefivarinfo/uefivarinfo.c
+++ b/src/uefi/uefivarinfo/uefivarinfo.c
@@ -36,26 +36,8 @@  static int fd;
 
 static int uefivarinfo_init(fwts_framework *fw)
 {
-	if (fwts_firmware_detect() != FWTS_FIRMWARE_UEFI) {
-		fwts_log_info(fw, "Cannot detect any UEFI firmware. Aborted.");
+	if (fwts_lib_efi_runtime_module_init(fw, &fd) == FWTS_ABORTED)
 		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_kernel_lockdown(fw) == FWTS_ABORTED) {
-		return FWTS_ABORTED;
-	}
-
-	if (fwts_lib_efi_runtime_load_module(fw) != FWTS_OK) {
-		fwts_log_info(fw, "Cannot load efi_runtime module. Aborted.");
-		return FWTS_ABORTED;
-	}
-
-	fd = fwts_lib_efi_runtime_open();
-	if (fd == -1) {
-		fwts_log_info(fw, "Cannot open EFI test driver. Aborted.");
-		return FWTS_ABORTED;
-	}
-
 	return FWTS_OK;
 }