diff mbox series

[2/2] uefirtvariable: add test for EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS attribute

Message ID 1517823358-943-2-git-send-email-ivan.hu@canonical.com
State Accepted
Headers show
Series [1/2] uefirtvariable: modify both authenticated attributes setting test | expand

Commit Message

Ivan Hu Feb. 5, 2018, 9:35 a.m. UTC
EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is is deprecated on UEFI 2.7
and should not be used. Platforms should return EFI_UNSUPPORTED if a
caller to SetVariable() specifies this attribute.

Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
---
 src/uefi/uefirtvariable/uefirtvariable.c | 36 ++++++++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

Comments

Colin Ian King Feb. 5, 2018, 5:31 p.m. UTC | #1
On 05/02/18 09:35, Ivan Hu wrote:
> EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is is deprecated on UEFI 2.7
> and should not be used. Platforms should return EFI_UNSUPPORTED if a
> caller to SetVariable() specifies this attribute.
> 
> Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
> ---
>  src/uefi/uefirtvariable/uefirtvariable.c | 36 ++++++++++++++++++++++++++++++++
>  1 file changed, 36 insertions(+)
> 
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index b038216..b42240e 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -1367,6 +1367,36 @@ static int setvariable_test7(fwts_framework *fw)
>  	return FWTS_OK;
>  }
>  
> +static int setvariable_test8(fwts_framework *fw)
> +{
> +	long ioret;
> +	struct efi_setvariable setvariable;
> +	uint32_t attr = attributes | FWTS_UEFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS;
> +	uint64_t datasize = 1;
> +	uint8_t data = 1;
> +	uint64_t status;
> +
> +	setvariable.VariableName = variablenametest;
> +	setvariable.VendorGuid = &gtestguid1;
> +	setvariable.Attributes = attr;
> +	setvariable.DataSize = datasize;
> +	setvariable.Data = &data;
> +	setvariable.status = &status;
> +
> +	ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable);
> +
> +	if (status == EFI_UNSUPPORTED && ioret == -1)
> +		return FWTS_OK;
> +
> +	fwts_warning(fw,
> +		"EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated (UEFI 2.7) "
> +		"and should not be used. Platforms should return EFI_UNSUPPORTED "
> +		"if a caller to SetVariable() specifies this attribute.");
> +	fwts_uefi_print_status_info(fw, status);
> +
> +	return FWTS_ERROR;
> +}
> +
>  static int do_queryvariableinfo(
>  	uint64_t *status,
>  	uint64_t *remvarstoragesize,
> @@ -1577,6 +1607,12 @@ static int uefirtvariable_test3(fwts_framework *fw)
>  		return ret;
>  	fwts_passed(fw, "Testing SetVariable with both Authenticated Attributes set passed.");
>  
> +	fwts_log_info(fw, "Testing SetVariable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes.");
> +	ret = setvariable_test8(fw);
> +	if (ret != FWTS_OK)
> +		return ret;
> +	fwts_passed(fw, "Testing SetVariable with with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes passed.");
> +
>  	return FWTS_OK;
>  }
>  
> 
Acked-by: Colin Ian King <colin.king@canonical.com>
Alex Hung Feb. 6, 2018, 12:30 a.m. UTC | #2
On 2018-02-05 01:35 AM, Ivan Hu wrote:
> EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is is deprecated on UEFI 2.7
> and should not be used. Platforms should return EFI_UNSUPPORTED if a
> caller to SetVariable() specifies this attribute.
> 
> Signed-off-by: Ivan Hu <ivan.hu@canonical.com>
> ---
>   src/uefi/uefirtvariable/uefirtvariable.c | 36 ++++++++++++++++++++++++++++++++
>   1 file changed, 36 insertions(+)
> 
> diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
> index b038216..b42240e 100644
> --- a/src/uefi/uefirtvariable/uefirtvariable.c
> +++ b/src/uefi/uefirtvariable/uefirtvariable.c
> @@ -1367,6 +1367,36 @@ static int setvariable_test7(fwts_framework *fw)
>   	return FWTS_OK;
>   }
>   
> +static int setvariable_test8(fwts_framework *fw)
> +{
> +	long ioret;
> +	struct efi_setvariable setvariable;
> +	uint32_t attr = attributes | FWTS_UEFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS;
> +	uint64_t datasize = 1;
> +	uint8_t data = 1;
> +	uint64_t status;
> +
> +	setvariable.VariableName = variablenametest;
> +	setvariable.VendorGuid = &gtestguid1;
> +	setvariable.Attributes = attr;
> +	setvariable.DataSize = datasize;
> +	setvariable.Data = &data;
> +	setvariable.status = &status;
> +
> +	ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable);
> +
> +	if (status == EFI_UNSUPPORTED && ioret == -1)
> +		return FWTS_OK;
> +
> +	fwts_warning(fw,
> +		"EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated (UEFI 2.7) "
> +		"and should not be used. Platforms should return EFI_UNSUPPORTED "
> +		"if a caller to SetVariable() specifies this attribute.");
> +	fwts_uefi_print_status_info(fw, status);
> +
> +	return FWTS_ERROR;
> +}
> +
>   static int do_queryvariableinfo(
>   	uint64_t *status,
>   	uint64_t *remvarstoragesize,
> @@ -1577,6 +1607,12 @@ static int uefirtvariable_test3(fwts_framework *fw)
>   		return ret;
>   	fwts_passed(fw, "Testing SetVariable with both Authenticated Attributes set passed.");
>   
> +	fwts_log_info(fw, "Testing SetVariable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes.");
> +	ret = setvariable_test8(fw);
> +	if (ret != FWTS_OK)
> +		return ret;
> +	fwts_passed(fw, "Testing SetVariable with with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes passed.");
> +
>   	return FWTS_OK;
>   }
>   
> 

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

Patch

diff --git a/src/uefi/uefirtvariable/uefirtvariable.c b/src/uefi/uefirtvariable/uefirtvariable.c
index b038216..b42240e 100644
--- a/src/uefi/uefirtvariable/uefirtvariable.c
+++ b/src/uefi/uefirtvariable/uefirtvariable.c
@@ -1367,6 +1367,36 @@  static int setvariable_test7(fwts_framework *fw)
 	return FWTS_OK;
 }
 
+static int setvariable_test8(fwts_framework *fw)
+{
+	long ioret;
+	struct efi_setvariable setvariable;
+	uint32_t attr = attributes | FWTS_UEFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS;
+	uint64_t datasize = 1;
+	uint8_t data = 1;
+	uint64_t status;
+
+	setvariable.VariableName = variablenametest;
+	setvariable.VendorGuid = &gtestguid1;
+	setvariable.Attributes = attr;
+	setvariable.DataSize = datasize;
+	setvariable.Data = &data;
+	setvariable.status = &status;
+
+	ioret = ioctl(fd, EFI_RUNTIME_SET_VARIABLE, &setvariable);
+
+	if (status == EFI_UNSUPPORTED && ioret == -1)
+		return FWTS_OK;
+
+	fwts_warning(fw,
+		"EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS is deprecated (UEFI 2.7) "
+		"and should not be used. Platforms should return EFI_UNSUPPORTED "
+		"if a caller to SetVariable() specifies this attribute.");
+	fwts_uefi_print_status_info(fw, status);
+
+	return FWTS_ERROR;
+}
+
 static int do_queryvariableinfo(
 	uint64_t *status,
 	uint64_t *remvarstoragesize,
@@ -1577,6 +1607,12 @@  static int uefirtvariable_test3(fwts_framework *fw)
 		return ret;
 	fwts_passed(fw, "Testing SetVariable with both Authenticated Attributes set passed.");
 
+	fwts_log_info(fw, "Testing SetVariable with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes.");
+	ret = setvariable_test8(fw);
+	if (ret != FWTS_OK)
+		return ret;
+	fwts_passed(fw, "Testing SetVariable with with EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS Attributes passed.");
+
 	return FWTS_OK;
 }