Commit-ID:  2eec5dedf770dc85c1fdf6b86873165e61bb1fff
Gitweb:     http://git.kernel.org/tip/2eec5dedf770dc85c1fdf6b86873165e61bb1fff
Author:     Ard Biesheuvel <ard.biesheu...@linaro.org>
AuthorDate: Wed, 17 Feb 2016 12:36:00 +0000
Committer:  Ingo Molnar <mi...@kernel.org>
CommitDate: Mon, 22 Feb 2016 08:26:27 +0100

efi/arm-init: Use read-only early mappings

The early mappings of the EFI system table contents and the UEFI memory
map are read-only from the OS point of view. So map them read-only to
protect them from inadvertent modification.

Tested-by: Mark Rutland <mark.rutl...@arm.com>
Signed-off-by: Ard Biesheuvel <ard.biesheu...@linaro.org>
Signed-off-by: Matt Fleming <m...@codeblueprint.co.uk>
Acked-by: Mark Rutland <mark.rutl...@arm.com>
Cc: Linus Torvalds <torva...@linux-foundation.org>
Cc: Peter Zijlstra <pet...@infradead.org>
Cc: Thomas Gleixner <t...@linutronix.de>
Cc: linux-...@vger.kernel.org
Link: 
http://lkml.kernel.org/r/1455712566-16727-8-git-send-email-m...@codeblueprint.co.uk
Signed-off-by: Ingo Molnar <mi...@kernel.org>
---
 drivers/firmware/efi/arm-init.c | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/drivers/firmware/efi/arm-init.c b/drivers/firmware/efi/arm-init.c
index 9e15d57..aa1f743 100644
--- a/drivers/firmware/efi/arm-init.c
+++ b/drivers/firmware/efi/arm-init.c
@@ -61,8 +61,8 @@ static int __init uefi_init(void)
        char vendor[100] = "unknown";
        int i, retval;
 
-       efi.systab = early_memremap(efi_system_table,
-                                   sizeof(efi_system_table_t));
+       efi.systab = early_memremap_ro(efi_system_table,
+                                      sizeof(efi_system_table_t));
        if (efi.systab == NULL) {
                pr_warn("Unable to map EFI system table.\n");
                return -ENOMEM;
@@ -86,8 +86,8 @@ static int __init uefi_init(void)
                        efi.systab->hdr.revision & 0xffff);
 
        /* Show what we know for posterity */
-       c16 = early_memremap(efi_to_phys(efi.systab->fw_vendor),
-                            sizeof(vendor) * sizeof(efi_char16_t));
+       c16 = early_memremap_ro(efi_to_phys(efi.systab->fw_vendor),
+                               sizeof(vendor) * sizeof(efi_char16_t));
        if (c16) {
                for (i = 0; i < (int) sizeof(vendor) - 1 && *c16; ++i)
                        vendor[i] = c16[i];
@@ -100,8 +100,8 @@ static int __init uefi_init(void)
                efi.systab->hdr.revision & 0xffff, vendor);
 
        table_size = sizeof(efi_config_table_64_t) * efi.systab->nr_tables;
-       config_tables = early_memremap(efi_to_phys(efi.systab->tables),
-                                      table_size);
+       config_tables = early_memremap_ro(efi_to_phys(efi.systab->tables),
+                                         table_size);
        if (config_tables == NULL) {
                pr_warn("Unable to map EFI config table array.\n");
                retval = -ENOMEM;
@@ -185,7 +185,7 @@ void __init efi_init(void)
        efi_system_table = params.system_table;
 
        memmap.phys_map = params.mmap;
-       memmap.map = early_memremap(params.mmap, params.mmap_size);
+       memmap.map = early_memremap_ro(params.mmap, params.mmap_size);
        if (memmap.map == NULL) {
                /*
                * If we are booting via UEFI, the UEFI memory map is the only

Reply via email to