efi/x86: Fix the deletion of variables in mixed mode
PATCH 1/1 efi/x86: Fix the deletion of variables in mixed mode
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.
--- arch/x86/platform/efi/efi_64.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/x86/platform/efi/efi_64.c +2 -2
@@ -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,
Signature · 1 line
2.25.1
Ard Biesheuvel
maintainerQuoted 6 lines · Gary Lin
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.
Quoted 6 lines
Fixes 8319e9d5ad98ffcc ("efi/x86: Handle by-ref arguments covering multiple pages in mixed mode")Cc Ard Biesheuvel <[email protected]>Cc Ingo Molnar <[email protected]>Cc Thomas Gleixner <[email protected]>Signed-off-by Gary Lin <[email protected]>
Thanks Gary.
I'll queue this in efi/urgent.
Quoted 29 lines
--- arch/x86/platform/efi/efi_64.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)arch/x86/platform/efi/efi_64.c +2
-3@@ -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
The following commit has been merged into the efi/urgent branch of tip:
The following commit has been merged into the efi/urgent branch of tip:
Commit-ID: a4b81ccfd4caba017d2b84720b6de4edd16911a0 Gitweb: https://git.kernel.org/tip/a4b81ccfd4caba017d2b84720b6de4edd16911a0 Author: Gary Lin <[email protected]> AuthorDate: Thu, 09 Apr 2020 15:04:33 +02:00 Committer: Ingo Molnar <[email protected]> CommitterDate: Tue, 14 Apr 2020 08:32:16 +02:00
efi/x86: Fix the deletion of variables in mixed mode
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.
--- arch/x86/platform/efi/efi_64.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-)
arch/x86/platform/efi/efi_64.c +2 -2
@@ -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,