Re: [[efi boot control]] efibc: Replace variable set function in notifier call

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, 12 Jun 2019 at 10:20, <baofeng.tian@xxxxxxxxx> wrote:
>
> From: Tian Baofeng <baofeng.tian@xxxxxxxxx>
>
> Replace the variable set function from "efivar_entry_set" to
> "efivar_entry_set_safe" in efibc panic notifier.
> In safe function parameter "block" will set to false
> and will call "efivar_entry_set_nonblocking"to set efi variables.
> efivar_entry_set_nonblocking is guaranteed to
> not block and is suitable for calling from crash/panic handlers.
> In UEFI android platform, when warm reset happens,
> with this change, efibc will not block the reboot process.
> Otherwise, set variable will call queue work and send to other offlined
> cpus then cause another panic, finally will cause reboot failure.
>
> Signed-off-by: Tian Baofeng <baofeng.tian@xxxxxxxxx>
> Signed-off-by: Luo XinanX <xinanx.luo@xxxxxxxxx>

Queued as a fix in efi/urgent

Thanks

> ---
>  drivers/firmware/efi/efibc.c | 12 +++++++-----
>  1 file changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/firmware/efi/efibc.c b/drivers/firmware/efi/efibc.c
> index 61e099826cbb..35dccc88ac0a 100644
> --- a/drivers/firmware/efi/efibc.c
> +++ b/drivers/firmware/efi/efibc.c
> @@ -43,11 +43,13 @@ static int efibc_set_variable(const char *name, const char *value)
>         efibc_str_to_str16(value, (efi_char16_t *)entry->var.Data);
>         memcpy(&entry->var.VendorGuid, &guid, sizeof(guid));
>
> -       ret = efivar_entry_set(entry,
> -                              EFI_VARIABLE_NON_VOLATILE
> -                              | EFI_VARIABLE_BOOTSERVICE_ACCESS
> -                              | EFI_VARIABLE_RUNTIME_ACCESS,
> -                              size, entry->var.Data, NULL);
> +       ret = efivar_entry_set_safe(entry->var.VariableName,
> +                                   entry->var.VendorGuid,
> +                                   EFI_VARIABLE_NON_VOLATILE
> +                                   | EFI_VARIABLE_BOOTSERVICE_ACCESS
> +                                   | EFI_VARIABLE_RUNTIME_ACCESS,
> +                                   false, size, entry->var.Data);
> +
>         if (ret)
>                 pr_err("failed to set %s EFI variable: 0x%x\n",
>                        name, ret);
> --
> 2.21.0
>



[Index of Archives]     [Linux ARM Kernel]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux