ACK: [PATCH] efi_runtime: add resetsystem runtime service

Alex Hung alex.hung at canonical.com
Fri Sep 22 18:42:48 UTC 2017


On 2017-09-22 01:26 AM, Ivan Hu wrote:
> Reset system by UEFI runtime service will not be tested on fwts. Still add this
> patch to efi_runtime driver to make it more complete on UEFI runtime interfaces.
> 
> Signed-off-by: Ivan Hu <ivan.hu at canonical.com>
> ---
>   efi_runtime/efi_runtime.c | 23 +++++++++++++++++++++++
>   efi_runtime/efi_runtime.h | 10 ++++++++++
>   2 files changed, 33 insertions(+)
> 
> diff --git a/efi_runtime/efi_runtime.c b/efi_runtime/efi_runtime.c
> index 6570a54..e29430c 100644
> --- a/efi_runtime/efi_runtime.c
> +++ b/efi_runtime/efi_runtime.c
> @@ -561,6 +561,29 @@ static long efi_runtime_get_nexthighmonocount(unsigned long arg)
>   	return 0;
>   }
>   
> +static long efi_runtime_reset_system(unsigned long arg)
> +{
> +	struct efi_resetsystem __user *resetsystem_user;
> +	struct efi_resetsystem resetsystem;
> +	void *data = NULL;
> +
> +	resetsystem_user = (struct efi_resetsystem __user *)arg;
> +	if (copy_from_user(&resetsystem, resetsystem_user,
> +						sizeof(resetsystem)))
> +		return -EFAULT;
> +	if (resetsystem.data_size != 0) {
> +		data = memdup_user((void *)resetsystem.data,
> +						resetsystem.data_size);
> +		if (IS_ERR(data))
> +			return PTR_ERR(data);
> +	}
> +
> +	efi.reset_system(resetsystem.reset_type, resetsystem.status,
> +				resetsystem.data_size, (efi_char16_t *)data);
> +
> +	kfree(data);
> +	return 0;
> +}
>   
>   #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 1, 0)
>   static long efi_runtime_query_variableinfo(unsigned long arg)
> diff --git a/efi_runtime/efi_runtime.h b/efi_runtime/efi_runtime.h
> index fa67a80..4cf8e51 100644
> --- a/efi_runtime/efi_runtime.h
> +++ b/efi_runtime/efi_runtime.h
> @@ -94,6 +94,13 @@ struct efi_querycapsulecapabilities {
>   	efi_status_t		*status;
>   } __packed;
>   
> +struct efi_resetsystem {
> +	int			reset_type;
> +	efi_status_t		status;
> +	unsigned long		data_size;
> +	efi_char16_t		*data;
> +} __packed;
> +
>   /* ioctl calls that are permitted to the /dev/efi_runtime interface. */
>   #define EFI_RUNTIME_GET_VARIABLE \
>   	_IOWR('p', 0x01, struct efi_getvariable)
> @@ -122,4 +129,7 @@ struct efi_querycapsulecapabilities {
>   #define EFI_RUNTIME_QUERY_CAPSULECAPABILITIES \
>   	_IOR('p', 0x0A, struct efi_querycapsulecapabilities)
>   
> +#define EFI_RUNTIME_RESET_SYSTEM \
> +	_IOW('p', 0x0B, struct efi_resetsystem)
> +
>   #endif /* _EFI_RUNTIME_H_ */
> 


Acked-by: Alex Hung <alex.hung at canonical.com>



More information about the fwts-devel mailing list