[PATCH 2/2] efi_runtime: reuse the in-kernel guid structure

Colin Ian King colin.king at canonical.com
Wed Jul 6 08:11:27 UTC 2016


On 04/07/16 10:25, Ivan Hu wrote:
> reuse the in-kernel guid structure efi_guid_t instead of making our own one.
> 
> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
> ---
>  efi_runtime/efi_runtime.c | 49 ++++++++---------------------------------------
>  efi_runtime/efi_runtime.h | 17 ++++++----------
>  2 files changed, 14 insertions(+), 52 deletions(-)
> 
> diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
> index 9e1fb87..115b1b5 100644
> --- a/efi_runtime/efi_runtime.c
> +++ b/efi_runtime/efi_runtime.c
> @@ -74,32 +74,6 @@ static void convert_to_efi_time(efi_time_t *eft, EFI_TIME *time)
>  	eft->pad2 = time->Pad2;
>  }
>  
> -static void convert_from_guid(efi_guid_t *vendor, EFI_GUID *vendor_guid)
> -{
> -	int i;
> -	for (i = 0; i < 16; i++) {
> -		if (i < 4)
> -			vendor->b[i] = (vendor_guid->Data1 >> (8*i)) & 0xff;
> -		else if (i < 6)
> -			vendor->b[i] = (vendor_guid->Data2 >> (8*(i-4))) & 0xff;
> -		else if (i < 8)
> -			vendor->b[i] = (vendor_guid->Data3 >> (8*(i-6))) & 0xff;
> -		else
> -			vendor->b[i] = (vendor_guid->Data4[i-8]);
> -	}
> -}
> -
> -static void convert_to_guid(efi_guid_t *vendor, EFI_GUID *vendor_guid)
> -{
> -	int i;
> -	vendor_guid->Data1 = vendor->b[0] + (vendor->b[1] << 8) +
> -				(vendor->b[2] << 16) + (vendor->b[3] << 24);
> -	vendor_guid->Data2 = vendor->b[4] + (vendor->b[5] << 8);
> -	vendor_guid->Data3 = vendor->b[6] + (vendor->b[7] << 8);
> -	for (i = 0; i < 8; i++)
> -		vendor_guid->Data4[i] = vendor->b[i+8];
> -}
> -
>  /*
>   * Count the bytes in 'str', including the terminating NULL.
>   *
> @@ -238,7 +212,7 @@ static long efi_runtime_get_variable(unsigned long arg)
>  	struct efi_getvariable __user *getvariable;
>  	struct efi_getvariable getvariable_local;
>  	unsigned long datasize, prev_datasize, *dz;
> -	efi_guid_t vendor, *vd = NULL;
> +	efi_guid_t vendor_guid, *vd = NULL;
>  	efi_status_t status;
>  	uint16_t *name = NULL;
>  	uint32_t attr, *at;
> @@ -254,13 +228,11 @@ static long efi_runtime_get_variable(unsigned long arg)
>  	    get_user(datasize, getvariable_local.DataSize))
>  		return -EFAULT;
>  	if (getvariable_local.VendorGuid) {
> -		EFI_GUID vendor_guid;
>  
>  		if (copy_from_user(&vendor_guid, getvariable_local.VendorGuid,
>  			   sizeof(vendor_guid)))
>  			return -EFAULT;
> -		convert_from_guid(&vendor, &vendor_guid);
> -		vd = &vendor;
> +		vd = &vendor_guid;
>  	}
>  
>  	if (getvariable_local.VariableName) {
> @@ -312,8 +284,7 @@ static long efi_runtime_set_variable(unsigned long arg)
>  {
>  	struct efi_setvariable __user *setvariable;
>  	struct efi_setvariable setvariable_local;
> -	EFI_GUID vendor_guid;
> -	efi_guid_t vendor;
> +	efi_guid_t vendor_guid;
>  	efi_status_t status;
>  	uint16_t *name;
>  	void *data;
> @@ -328,8 +299,6 @@ static long efi_runtime_set_variable(unsigned long arg)
>  			   sizeof(vendor_guid)))
>  		return -EFAULT;
>  
> -	convert_from_guid(&vendor, &vendor_guid);
> -
>  	rv = copy_ucs2_from_user(&name, setvariable_local.VariableName);
>  	if (rv)
>  		return rv;
> @@ -346,7 +315,7 @@ static long efi_runtime_set_variable(unsigned long arg)
>  		return -EFAULT;
>  	}
>  
> -	status = efi.set_variable(name, &vendor, setvariable_local.Attributes,
> +	status = efi.set_variable(name, &vendor_guid, setvariable_local.Attributes,
>  				  setvariable_local.DataSize, data);
>  
>  	kfree(data);
> @@ -486,8 +455,8 @@ static long efi_runtime_get_nextvariablename(unsigned long arg)
>  	struct efi_getnextvariablename getnextvariablename_local;
>  	unsigned long name_size, prev_name_size = 0, *ns = NULL;
>  	efi_status_t status;
> -	efi_guid_t vendor, *vd = NULL;
> -	EFI_GUID vendor_guid;
> +	efi_guid_t *vd = NULL;
> +	efi_guid_t vendor_guid;
>  	uint16_t *name = NULL;
>  	int rv;
>  
> @@ -509,8 +478,7 @@ static long efi_runtime_get_nextvariablename(unsigned long arg)
>  		if (copy_from_user(&vendor_guid, getnextvariablename_local.VendorGuid,
>  			   sizeof(vendor_guid)))
>  			return -EFAULT;
> -		convert_from_guid(&vendor, &vendor_guid);
> -		vd = &vendor;
> +		vd = &vendor_guid;
>  	}
>  
>  	if (getnextvariablename_local.VariableName) {
> @@ -552,9 +520,8 @@ static long efi_runtime_get_nextvariablename(unsigned long arg)
>  	}
>  
>  	if (vd) {
> -		convert_to_guid(vd, &vendor_guid);
>  		if (copy_to_user(getnextvariablename_local.VendorGuid,
> -				 &vendor_guid, sizeof(EFI_GUID)))
> +				 vd, sizeof(efi_guid_t)))
>  			return -EFAULT;
>  	}
>  
> diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h
> index 149a179..092e842 100644
> --- a/efi_runtime/efi_runtime.h
> +++ b/efi_runtime/efi_runtime.h
> @@ -21,6 +21,8 @@
>  #ifndef _EFI_RUNTIME_H_
>  #define _EFI_RUNTIME_H_
>  
> +#include <linux/efi.h>
> +
>  typedef enum {
>  	EfiResetCold,
>  	EfiResetWarm,
> @@ -28,13 +30,6 @@ typedef enum {
>  } EFI_RESET_TYPE;
>  
>  typedef struct {
> -	uint32_t	Data1;
> -	uint16_t	Data2;
> -	uint16_t	Data3;
> -	uint8_t		Data4[8];
> -} __attribute__ ((packed)) EFI_GUID;
> -
> -typedef struct {
>  	uint16_t	Year;		/* 1900 – 9999 */
>  	uint8_t		Month;		/* 1 – 12 */
>  	uint8_t		Day;		/* 1 – 31 */
> @@ -55,7 +50,7 @@ typedef struct {
>  } __attribute__ ((packed)) EFI_TIME_CAPABILITIES;
>  
>  typedef struct {
> -	EFI_GUID CapsuleGuid;
> +	efi_guid_t CapsuleGuid;
>  	uint32_t HeaderSize;
>  	uint32_t Flags;
>  	uint32_t CapsuleImageSize;
> @@ -63,7 +58,7 @@ typedef struct {
>  
>  struct efi_getvariable {
>  	uint16_t	*VariableName;
> -	EFI_GUID	*VendorGuid;
> +	efi_guid_t	*VendorGuid;
>  	uint32_t	*Attributes;
>  	uint64_t	*DataSize;
>  	void		*Data;
> @@ -72,7 +67,7 @@ struct efi_getvariable {
>  
>  struct efi_setvariable {
>  	uint16_t	*VariableName;
> -	EFI_GUID	*VendorGuid;
> +	efi_guid_t	*VendorGuid;
>  	uint32_t	Attributes;
>  	uint64_t	DataSize;
>  	void		*Data;
> @@ -82,7 +77,7 @@ struct efi_setvariable {
>  struct efi_getnextvariablename {
>  	uint64_t	*VariableNameSize;
>  	uint16_t	*VariableName;
> -	EFI_GUID	*VendorGuid;
> +	efi_guid_t	*VendorGuid;
>  	uint64_t	*status;
>  } __attribute__ ((packed));
>  
> 
> 
> 
Acked-by: Colin Ian King <colin.king at canonical.com>



More information about the fwts-devel mailing list