From: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> To: linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org, linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, leif.lindholm-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org, mark.rutland-5wv7dgnIgG8@public.gmane.org, catalin.marinas-5wv7dgnIgG8@public.gmane.org, will.deacon-5wv7dgnIgG8@public.gmane.org, matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org, bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org, dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, msalter-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org, grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org Cc: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> Subject: [PATCH 2/8] arm64/efi: register UEFI reserved regions as iomem resources Date: Mon, 22 Dec 2014 19:08:36 +0000 [thread overview] Message-ID: <1419275322-29811-3-git-send-email-ard.biesheuvel@linaro.org> (raw) In-Reply-To: <1419275322-29811-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> To prevent device drivers from attaching to device or memory regions owned by the firmware, register all UEFI reserved regions in the iomem resource table at init time. Signed-off-by: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> --- arch/arm64/kernel/efi.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index d2f483a7cffe..ba5fe66c3634 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -305,6 +305,50 @@ void efi_virtmap_unload(void) efi_set_pgd(current->active_mm); } +static __init void efi_reserve_iomem_resource(efi_memory_desc_t *md) +{ + struct resource *res; + + res = alloc_bootmem_low(sizeof(*res)); + res->start = md->phys_addr; + res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1; + res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; + + if (!is_reserve_region(md)) { + /* + * Non-RAM regions with the EFI_MEMORY_RUNTIME attribute + * are owned by the UEFI firmware, so make sure they are + * tagged as exclusive: this will prevent device drivers + * from binding to the memory region, and will also prevent + * access via /dev/mem if CONFIG_STRICT_DEVMEM is in effect. + */ + res->name = "UEFI Runtime [MMIO]"; + res->flags |= IORESOURCE_EXCLUSIVE; + } else if (md->type == EFI_RUNTIME_SERVICES_DATA) { + /* + * UEFI Runtime Services Data regions may be used to store + * configuration tables such as SMBIOS, which are often + * accessed using userland tools such as 'dmidecode', that + * are /dev/mem based. So don't set the exclusive flag in + * this case. + */ + res->name = "UEFI Runtime [Data]"; + } else { + /* + * Register all remaining reserved RAM regions as both busy + * and exclusive in the iomem resource table. This prevents + * drivers from claiming the region, and also disallows + * /dev/mem access. + */ + if (md->type == EFI_RUNTIME_SERVICES_CODE) + res->name = "UEFI Runtime [Code]"; + else + res->name = "UEFI Reserved"; + res->flags |= IORESOURCE_EXCLUSIVE; + } + request_resource(&iomem_resource, res); +} + void __init efi_virtmap_init(void) { efi_memory_desc_t *md; @@ -316,6 +360,8 @@ void __init efi_virtmap_init(void) u64 paddr, npages, size; pgprot_t prot; + if (is_reserve_region(md) || md->attribute & EFI_MEMORY_RUNTIME) + efi_reserve_iomem_resource(md); if (!(md->attribute & EFI_MEMORY_RUNTIME)) continue; if (WARN(md->virt_addr == 0, -- 1.8.3.2
WARNING: multiple messages have this Message-ID (diff)
From: ard.biesheuvel@linaro.org (Ard Biesheuvel) To: linux-arm-kernel@lists.infradead.org Subject: [PATCH 2/8] arm64/efi: register UEFI reserved regions as iomem resources Date: Mon, 22 Dec 2014 19:08:36 +0000 [thread overview] Message-ID: <1419275322-29811-3-git-send-email-ard.biesheuvel@linaro.org> (raw) In-Reply-To: <1419275322-29811-1-git-send-email-ard.biesheuvel@linaro.org> To prevent device drivers from attaching to device or memory regions owned by the firmware, register all UEFI reserved regions in the iomem resource table at init time. Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> --- arch/arm64/kernel/efi.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c index d2f483a7cffe..ba5fe66c3634 100644 --- a/arch/arm64/kernel/efi.c +++ b/arch/arm64/kernel/efi.c @@ -305,6 +305,50 @@ void efi_virtmap_unload(void) efi_set_pgd(current->active_mm); } +static __init void efi_reserve_iomem_resource(efi_memory_desc_t *md) +{ + struct resource *res; + + res = alloc_bootmem_low(sizeof(*res)); + res->start = md->phys_addr; + res->end = md->phys_addr + (md->num_pages << EFI_PAGE_SHIFT) - 1; + res->flags = IORESOURCE_MEM | IORESOURCE_BUSY; + + if (!is_reserve_region(md)) { + /* + * Non-RAM regions with the EFI_MEMORY_RUNTIME attribute + * are owned by the UEFI firmware, so make sure they are + * tagged as exclusive: this will prevent device drivers + * from binding to the memory region, and will also prevent + * access via /dev/mem if CONFIG_STRICT_DEVMEM is in effect. + */ + res->name = "UEFI Runtime [MMIO]"; + res->flags |= IORESOURCE_EXCLUSIVE; + } else if (md->type == EFI_RUNTIME_SERVICES_DATA) { + /* + * UEFI Runtime Services Data regions may be used to store + * configuration tables such as SMBIOS, which are often + * accessed using userland tools such as 'dmidecode', that + * are /dev/mem based. So don't set the exclusive flag in + * this case. + */ + res->name = "UEFI Runtime [Data]"; + } else { + /* + * Register all remaining reserved RAM regions as both busy + * and exclusive in the iomem resource table. This prevents + * drivers from claiming the region, and also disallows + * /dev/mem access. + */ + if (md->type == EFI_RUNTIME_SERVICES_CODE) + res->name = "UEFI Runtime [Code]"; + else + res->name = "UEFI Reserved"; + res->flags |= IORESOURCE_EXCLUSIVE; + } + request_resource(&iomem_resource, res); +} + void __init efi_virtmap_init(void) { efi_memory_desc_t *md; @@ -316,6 +360,8 @@ void __init efi_virtmap_init(void) u64 paddr, npages, size; pgprot_t prot; + if (is_reserve_region(md) || md->attribute & EFI_MEMORY_RUNTIME) + efi_reserve_iomem_resource(md); if (!(md->attribute & EFI_MEMORY_RUNTIME)) continue; if (WARN(md->virt_addr == 0, -- 1.8.3.2
next prev parent reply other threads:[~2014-12-22 19:08 UTC|newest] Thread overview: 56+ messages / expand[flat|nested] mbox.gz Atom feed top 2014-12-22 19:08 [PATCH 0/8] arm64: improved memory map handling for /dev/mem, ACPI etc Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel [not found] ` <1419275322-29811-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2014-12-22 19:08 ` [PATCH 1/8] arm64/efi: use UEFI memory map unconditionally if available Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel [not found] ` <1419275322-29811-2-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2015-01-06 9:04 ` Matt Fleming 2015-01-06 9:04 ` Matt Fleming [not found] ` <20150106090407.GF3163-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org> 2015-01-07 11:48 ` Ard Biesheuvel 2015-01-07 11:48 ` Ard Biesheuvel [not found] ` <CAKv+Gu_q5wFhjb8M7VptVtHfm5vfp6_YiqN_XoTs9qV5=8OOdg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-01-12 10:46 ` Matt Fleming 2015-01-12 10:46 ` Matt Fleming 2015-01-09 15:41 ` Will Deacon 2015-01-09 15:41 ` Will Deacon 2014-12-22 19:08 ` Ard Biesheuvel [this message] 2014-12-22 19:08 ` [PATCH 2/8] arm64/efi: register UEFI reserved regions as iomem resources Ard Biesheuvel [not found] ` <1419275322-29811-3-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2015-01-06 9:13 ` Matt Fleming 2015-01-06 9:13 ` Matt Fleming [not found] ` <20150106091322.GG3163-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy@public.gmane.org> 2015-01-07 11:53 ` Ard Biesheuvel 2015-01-07 11:53 ` Ard Biesheuvel 2014-12-22 19:08 ` [PATCH 3/8] memblock: add physmem to memblock_dump_all() output Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel 2015-01-06 9:15 ` Matt Fleming 2015-01-06 9:15 ` Matt Fleming 2015-01-06 9:15 ` Matt Fleming 2014-12-22 19:08 ` [PATCH 4/8] memblock: introduce memblock_add_phys() and memblock_is_physmem() Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel 2015-01-06 9:19 ` Matt Fleming 2015-01-06 9:19 ` Matt Fleming 2015-01-06 9:19 ` Matt Fleming 2014-12-22 19:08 ` [PATCH 5/8] of: fdt: register physmem in early_init_dt_scan_memory() Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel 2014-12-22 19:08 ` [PATCH 6/8] arm64/efi: register physmem in reserve_regions() Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel 2014-12-22 19:08 ` [PATCH 7/8] arm64: use 'physmem' memblock to improve CONFIG_STRICT_DEVMEM handling Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel [not found] ` <1419275322-29811-8-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org> 2015-01-09 15:38 ` Will Deacon 2015-01-09 15:38 ` Will Deacon 2014-12-22 19:08 ` [PATCH 8/8] arm64/efi: memblock_remove rather than _reserve UEFI reserved RAM Ard Biesheuvel 2014-12-22 19:08 ` Ard Biesheuvel 2014-12-26 9:35 ` [PATCH 0/8] arm64: improved memory map handling for /dev/mem, ACPI etc Dave Young 2014-12-26 9:35 ` Dave Young [not found] ` <20141226093528.GA26133-4/PLUo9XfK/1wF9wiOj0lkEOCMrvLtNR@public.gmane.org> 2014-12-29 9:22 ` Ard Biesheuvel 2014-12-29 9:22 ` Ard Biesheuvel [not found] ` <CAKv+Gu_1VCJK7y5U9H-mhjjN6AFW8+SGvbKUZfuzx6qGEpVg0A-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2014-12-30 9:25 ` Dave Young 2014-12-30 9:25 ` Dave Young [not found] ` <20141230092514.GF2457-4/PLUo9XfK/1wF9wiOj0lkEOCMrvLtNR@public.gmane.org> 2014-12-30 13:21 ` Ard Biesheuvel 2014-12-30 13:21 ` Ard Biesheuvel [not found] ` <CAKv+Gu_Ou6Fv7-AUcpbUJAijwEJ8=PCB1mQU3mCfctLFAMhu_w-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-01-04 8:19 ` Dave Young 2015-01-04 8:19 ` Dave Young [not found] ` <20150104081905.GA6231-4/PLUo9XfK/1wF9wiOj0lkEOCMrvLtNR@public.gmane.org> 2015-01-05 9:18 ` Ard Biesheuvel 2015-01-05 9:18 ` Ard Biesheuvel [not found] ` <CAKv+Gu-P7AeMNveZMe814FgrEr_z26vaYKWa=borKoPSc76Y6g-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-01-06 8:16 ` Dave Young 2015-01-06 8:16 ` Dave Young [not found] ` <20150106081635.GE2113-4/PLUo9XfK/1wF9wiOj0lkEOCMrvLtNR@public.gmane.org> 2015-01-07 11:41 ` Ard Biesheuvel 2015-01-07 11:41 ` Ard Biesheuvel [not found] ` <CAKv+Gu9DQLZnvNyF0qdk5jSH6=NvdsKYTX+E46U=kGRzCEfwHg-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org> 2015-01-08 1:29 ` Dave Young 2015-01-08 1:29 ` Dave Young
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1419275322-29811-3-git-send-email-ard.biesheuvel@linaro.org \ --to=ard.biesheuvel-qsej5fyqhm4dnm+yrofe0a@public.gmane.org \ --cc=bp-Gina5bIWoIWzQB+pC5nmwQ@public.gmane.org \ --cc=catalin.marinas-5wv7dgnIgG8@public.gmane.org \ --cc=dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=grant.likely-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \ --cc=leif.lindholm-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \ --cc=linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org \ --cc=linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \ --cc=mark.rutland-5wv7dgnIgG8@public.gmane.org \ --cc=matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \ --cc=msalter-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \ --cc=roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \ --cc=will.deacon-5wv7dgnIgG8@public.gmane.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.