On Wed, 8 Apr 2020 at 10:18, Gary Lin <glin@xxxxxxxx> wrote: > > efi_thunk_set_variable() treated the NULL "data" pointer as an invalid > parameter, and this broke the deletion of variables in mixed mode. > This commit fixes the check of data so that the userspace program can > delete a variable in mixed mode. > > Fixes: 8319e9d5ad98ffcc ("efi/x86: Handle by-ref arguments covering multiple pages in mixed mode") > Cc: linux-efi@xxxxxxxxxxxxxxx > Cc: Ard Biesheuvel <ardb@xxxxxxxxxx> > Cc: Ingo Molnar <mingo@xxxxxxxxxx> > Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Signed-off-by: Gary Lin <glin@xxxxxxxx> Thanks Gary. I'll queue this in efi/urgent. > --- > arch/x86/platform/efi/efi_64.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/x86/platform/efi/efi_64.c b/arch/x86/platform/efi/efi_64.c > index 211bb9358b73..e0e2e8136cf5 100644 > --- a/arch/x86/platform/efi/efi_64.c > +++ b/arch/x86/platform/efi/efi_64.c > @@ -638,7 +638,7 @@ efi_thunk_set_variable(efi_char16_t *name, efi_guid_t *vendor, > phys_vendor = virt_to_phys_or_null(vnd); > phys_data = virt_to_phys_or_null_size(data, data_size); > > - if (!phys_name || !phys_data) > + if (!phys_name || (data && !phys_data)) > status = EFI_INVALID_PARAMETER; > else > status = efi_thunk(set_variable, phys_name, phys_vendor, > @@ -669,7 +669,7 @@ efi_thunk_set_variable_nonblocking(efi_char16_t *name, efi_guid_t *vendor, > phys_vendor = virt_to_phys_or_null(vnd); > phys_data = virt_to_phys_or_null_size(data, data_size); > > - if (!phys_name || !phys_data) > + if (!phys_name || (data && !phys_data)) > status = EFI_INVALID_PARAMETER; > else > status = efi_thunk(set_variable, phys_name, phys_vendor, > -- > 2.25.1 >