On Thu, 22 Aug, at 07:01:50PM, Lee, Chun-Yi wrote:
> +static int efi_status_to_err(efi_status_t status)
> +{
> +     int err;
> +
> +     switch (status) {
> +     case EFI_INVALID_PARAMETER:
> +             err = -EINVAL;
> +             break;
> +     case EFI_OUT_OF_RESOURCES:
> +             err = -ENOSPC;
> +             break;
> +     case EFI_DEVICE_ERROR:
> +             err = -EIO;
> +             break;
> +     case EFI_WRITE_PROTECTED:
> +             err = -EROFS;
> +             break;
> +     case EFI_SECURITY_VIOLATION:
> +             err = -EACCES;
> +             break;
> +     case EFI_NOT_FOUND:
> +             err = -ENODATA;
> +             break;
> +     default:
> +             err = -EINVAL;
> +     }
> +
> +     return err;
> +}

Please don't reimplement this. Instead make the existing function
global.

[...]

> +static void *load_wake_key_data(unsigned long *datasize)
> +{
> +     u32 attr;
> +     void *wkey_data;
> +     efi_status_t status;
> +
> +     if (!efi_enabled(EFI_RUNTIME_SERVICES))
> +             return ERR_PTR(-EPERM);
> +
> +     /* obtain the size */
> +     *datasize = 0;
> +     status = efi.get_variable(EFI_S4_WAKE_KEY_NAME, &EFI_HIBERNATE_GUID,
> +                               NULL, datasize, NULL);
> +     if (status != EFI_BUFFER_TOO_SMALL) {
> +             wkey_data = ERR_PTR(efi_status_to_err(status));
> +             pr_err("PM: Couldn't get wake key data size: 0x%lx\n", status);
> +             goto error;
> +     }

Is it safe to completely bypass the efivars interface and access
efi.get_variable() directly? I wouldn't have thought so, unless you can
guarantee that the kernel isn't going to access any of the EFI runtime
services while you execute this function.

-- 
Matt Fleming, Intel Open Source Technology Center
--
To unsubscribe from this list: send the line "unsubscribe linux-crypto" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to