All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org>
To: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Cc: "leif.lindholm-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
	<leif.lindholm-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	"roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
	<roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>,
	"msalter-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org"
	<msalter-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	Will Deacon <Will.Deacon-5wv7dgnIgG8@public.gmane.org>,
	Catalin Marinas <Catalin.Marinas-5wv7dgnIgG8@public.gmane.org>,
	"matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org"
	<matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org>,
	"linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org"
	<linux-efi-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	"linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org"
	<linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r@public.gmane.org>,
	"dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org"
	<dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	"yi.li-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org"
	<yi.li-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
Subject: Re: [PATCH v2 04/10] arm64/efi: invert UEFI memory region reservation logic
Date: Tue, 28 Oct 2014 17:28:21 +0000	[thread overview]
Message-ID: <20141028172821.GO9796@leverpostej> (raw)
In-Reply-To: <CAKv+Gu_czjghaF9WzjRv5t4VstCT9x+RqRmhB61jQr3FM5BWvQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>

On Tue, Oct 28, 2014 at 05:08:29PM +0000, Ard Biesheuvel wrote:
> On 28 October 2014 17:47, Mark Rutland <mark.rutland-5wv7dgnIgG8@public.gmane.org> wrote:
> > On Tue, Oct 28, 2014 at 04:18:37PM +0000, Ard Biesheuvel wrote:
> >> Instead of reserving the memory regions based on which types we know
> >> need to be reserved, consider only regions of the following types as
> >> free for general use by the OS:
> >>
> >> EFI_LOADER_CODE
> >> EFI_LOADER_DATA
> >> EFI_BOOT_SERVICES_CODE
> >> EFI_BOOT_SERVICES_DATA
> >> EFI_CONVENTIONAL_MEMORY
> >>
> >> Note that this also fixes a problem with the original code, which would
> >> misidentify a EFI_RUNTIME_SERVICES_DATA region as not reserved if it
> >> does not have the EFI_MEMORY_RUNTIME attribute set. However, it is
> >> perfectly legal for the firmware not to request a virtual mapping for
> >> EFI_RUNTIME_SERVICES_DATA regions that contain configuration tables, in
> >> which case the EFI_MEMORY_RUNTIME attribute would not be set.
> >>
> >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
> >> ---
> >>  arch/arm64/kernel/efi.c | 20 ++++++++++----------
> >>  1 file changed, 10 insertions(+), 10 deletions(-)
> >>
> >> diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
> >> index 95c49ebc660d..2e829148fb36 100644
> >> --- a/arch/arm64/kernel/efi.c
> >> +++ b/arch/arm64/kernel/efi.c
> >> @@ -125,17 +125,17 @@ out:
> >>   */
> >>  static __init int is_reserve_region(efi_memory_desc_t *md)
> >>  {
> >> -     if (!is_normal_ram(md))
> >> +     switch (md->type) {
> >> +     case EFI_LOADER_CODE:
> >> +     case EFI_LOADER_DATA:
> >> +     case EFI_BOOT_SERVICES_CODE:
> >> +     case EFI_BOOT_SERVICES_DATA:
> >> +     case EFI_CONVENTIONAL_MEMORY:
> >>               return 0;
> >> -
> >> -     if (md->attribute & EFI_MEMORY_RUNTIME)
> >> -             return 1;
> >> -
> >> -     if (md->type == EFI_ACPI_RECLAIM_MEMORY ||
> >> -         md->type == EFI_RESERVED_TYPE)
> >> -             return 1;
> >> -
> >> -     return 0;
> >> +     default:
> >> +             break;
> >> +     }
> >> +     return is_normal_ram(md);
> >
> > Just to check: did we figure out if UnusableMemory was allowed to have
> > EFI_MEMORY_WB attributes? If it isn't, this looks fine to me.
> >
> > If it is, then we will need to remove that memory (rather than reserving
> > it) to prevent speculative accesses.
> >
> 
> The spec does not mention at all how EfiUnusableMemory should be used,
> and I would assume any such regions to have the EFI_MEMORY_WB
> attribute set, as it is carved out of the normal system RAM, and the
> way Tianocore/EDK2 implements it at least, all those attributes
> (including the write-protect/execute-protect ones) are copied straight
> from the underlying regions and never set to reflect the nature of the
> actual contents.

Ok. That's precisely the case I was concerned about.

> However, for 3.20 I intend to propose another change to this code, so
> that only non-reserved, usable memory gets memblock_add()'ed in the
> first place, and I suppose this should cover your concern as well. The
> reason for doing that is to allow tools like dmidecode and lshw access
> to the SMBIOS and other tables through /dev/mem, which is currently
> disallowed when STRICT_DEVMEM is set.

So long as said memory is not later passed to memblock_reserve, that
should be ok for the EfiUnusableMemory case. I guess we haven't actually
seen such memory yet anyhow?

I not all that keen on the usage of /dev/mem for those given the
availability of other interfaces.

Mark.

WARNING: multiple messages have this Message-ID (diff)
From: mark.rutland@arm.com (Mark Rutland)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v2 04/10] arm64/efi: invert UEFI memory region reservation logic
Date: Tue, 28 Oct 2014 17:28:21 +0000	[thread overview]
Message-ID: <20141028172821.GO9796@leverpostej> (raw)
In-Reply-To: <CAKv+Gu_czjghaF9WzjRv5t4VstCT9x+RqRmhB61jQr3FM5BWvQ@mail.gmail.com>

On Tue, Oct 28, 2014 at 05:08:29PM +0000, Ard Biesheuvel wrote:
> On 28 October 2014 17:47, Mark Rutland <mark.rutland@arm.com> wrote:
> > On Tue, Oct 28, 2014 at 04:18:37PM +0000, Ard Biesheuvel wrote:
> >> Instead of reserving the memory regions based on which types we know
> >> need to be reserved, consider only regions of the following types as
> >> free for general use by the OS:
> >>
> >> EFI_LOADER_CODE
> >> EFI_LOADER_DATA
> >> EFI_BOOT_SERVICES_CODE
> >> EFI_BOOT_SERVICES_DATA
> >> EFI_CONVENTIONAL_MEMORY
> >>
> >> Note that this also fixes a problem with the original code, which would
> >> misidentify a EFI_RUNTIME_SERVICES_DATA region as not reserved if it
> >> does not have the EFI_MEMORY_RUNTIME attribute set. However, it is
> >> perfectly legal for the firmware not to request a virtual mapping for
> >> EFI_RUNTIME_SERVICES_DATA regions that contain configuration tables, in
> >> which case the EFI_MEMORY_RUNTIME attribute would not be set.
> >>
> >> Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>
> >> ---
> >>  arch/arm64/kernel/efi.c | 20 ++++++++++----------
> >>  1 file changed, 10 insertions(+), 10 deletions(-)
> >>
> >> diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
> >> index 95c49ebc660d..2e829148fb36 100644
> >> --- a/arch/arm64/kernel/efi.c
> >> +++ b/arch/arm64/kernel/efi.c
> >> @@ -125,17 +125,17 @@ out:
> >>   */
> >>  static __init int is_reserve_region(efi_memory_desc_t *md)
> >>  {
> >> -     if (!is_normal_ram(md))
> >> +     switch (md->type) {
> >> +     case EFI_LOADER_CODE:
> >> +     case EFI_LOADER_DATA:
> >> +     case EFI_BOOT_SERVICES_CODE:
> >> +     case EFI_BOOT_SERVICES_DATA:
> >> +     case EFI_CONVENTIONAL_MEMORY:
> >>               return 0;
> >> -
> >> -     if (md->attribute & EFI_MEMORY_RUNTIME)
> >> -             return 1;
> >> -
> >> -     if (md->type == EFI_ACPI_RECLAIM_MEMORY ||
> >> -         md->type == EFI_RESERVED_TYPE)
> >> -             return 1;
> >> -
> >> -     return 0;
> >> +     default:
> >> +             break;
> >> +     }
> >> +     return is_normal_ram(md);
> >
> > Just to check: did we figure out if UnusableMemory was allowed to have
> > EFI_MEMORY_WB attributes? If it isn't, this looks fine to me.
> >
> > If it is, then we will need to remove that memory (rather than reserving
> > it) to prevent speculative accesses.
> >
> 
> The spec does not mention at all how EfiUnusableMemory should be used,
> and I would assume any such regions to have the EFI_MEMORY_WB
> attribute set, as it is carved out of the normal system RAM, and the
> way Tianocore/EDK2 implements it at least, all those attributes
> (including the write-protect/execute-protect ones) are copied straight
> from the underlying regions and never set to reflect the nature of the
> actual contents.

Ok. That's precisely the case I was concerned about.

> However, for 3.20 I intend to propose another change to this code, so
> that only non-reserved, usable memory gets memblock_add()'ed in the
> first place, and I suppose this should cover your concern as well. The
> reason for doing that is to allow tools like dmidecode and lshw access
> to the SMBIOS and other tables through /dev/mem, which is currently
> disallowed when STRICT_DEVMEM is set.

So long as said memory is not later passed to memblock_reserve, that
should be ok for the EfiUnusableMemory case. I guess we haven't actually
seen such memory yet anyhow?

I not all that keen on the usage of /dev/mem for those given the
availability of other interfaces.

Mark.

  parent reply	other threads:[~2014-10-28 17:28 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-10-28 16:18 [PATCH v2 00/10] arm64 EFI patches for 3.19 Ard Biesheuvel
2014-10-28 16:18 ` Ard Biesheuvel
     [not found] ` <1414513123-20400-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-28 16:18   ` [PATCH v2 01/10] arm64/efi: efistub: jump to 'stext' directly, not through the header Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
2014-10-28 16:18   ` [PATCH v2 02/10] arm64/efi: set PE/COFF section alignment to 4 KB Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
2014-10-28 16:18   ` [PATCH v2 03/10] arm64/efi: set PE/COFF file alignment to 512 bytes Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
2014-10-28 16:18   ` [PATCH v2 04/10] arm64/efi: invert UEFI memory region reservation logic Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
     [not found]     ` <1414513123-20400-5-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-28 16:47       ` Mark Rutland
2014-10-28 16:47         ` Mark Rutland
2014-10-28 17:08         ` Ard Biesheuvel
2014-10-28 17:08           ` Ard Biesheuvel
     [not found]           ` <CAKv+Gu_czjghaF9WzjRv5t4VstCT9x+RqRmhB61jQr3FM5BWvQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-10-28 17:28             ` Mark Rutland [this message]
2014-10-28 17:28               ` Mark Rutland
2014-10-30  0:28       ` Roy Franz
2014-10-30  0:28         ` Roy Franz
2014-10-28 16:18   ` [PATCH v2 05/10] arm64/efi: drop redundant set_bit(EFI_CONFIG_TABLES) Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
2014-10-28 16:18   ` [PATCH v2 06/10] efi: dmi: add support for SMBIOS 3.0 UEFI configuration table Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
     [not found]     ` <1414513123-20400-7-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-04 17:20       ` Matt Fleming
2014-11-04 17:20         ` Matt Fleming
2014-10-28 16:18   ` [PATCH v2 07/10] dmi: add support for SMBIOS 3.0 64-bit entry point Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
     [not found]     ` <1414513123-20400-8-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-29 15:11       ` [PATCH v2] " Ard Biesheuvel
2014-10-29 15:11         ` Ard Biesheuvel
     [not found]         ` <1414595485-5723-1-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-29 16:19           ` Leif Lindholm
2014-10-29 16:19             ` Leif Lindholm
2014-11-04 17:39       ` [PATCH v2 07/10] " Matt Fleming
2014-11-04 17:39         ` Matt Fleming
2014-10-28 16:18   ` [PATCH v2 08/10] arm64: dmi: Add SMBIOS/DMI support Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
     [not found]     ` <1414513123-20400-9-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-29 16:23       ` Leif Lindholm
2014-10-29 16:23         ` Leif Lindholm
2014-10-28 16:18   ` [PATCH v2 09/10] arm64: dmi: set DMI string as dump stack arch description Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
     [not found]     ` <1414513123-20400-10-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-10-29 14:58       ` Leif Lindholm
2014-10-29 14:58         ` Leif Lindholm
2014-10-28 16:18   ` [PATCH v2 10/10] efi: efi-stub: notify on DTB absence Ard Biesheuvel
2014-10-28 16:18     ` Ard Biesheuvel
     [not found]     ` <1414513123-20400-11-git-send-email-ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2014-11-04 17:42       ` Matt Fleming
2014-11-04 17:42         ` Matt Fleming
2014-11-05  7:53   ` [PATCH v2 00/10] arm64 EFI patches for 3.19 Ard Biesheuvel
2014-11-05  7:53     ` Ard Biesheuvel
     [not found]     ` <CAKv+Gu-05Tf+BFxSGfibgs00WAA+wZTSrgzpTK46QZD8SV62jw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2014-11-05  9:52       ` Will Deacon
2014-11-05  9:52         ` Will Deacon

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=20141028172821.GO9796@leverpostej \
    --to=mark.rutland-5wv7dgnigg8@public.gmane.org \
    --cc=Catalin.Marinas-5wv7dgnIgG8@public.gmane.org \
    --cc=Will.Deacon-5wv7dgnIgG8@public.gmane.org \
    --cc=ard.biesheuvel-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=dyoung-H+wXaHxf7aLQT0dZR+AlfA@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=matt.fleming-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
    --cc=msalter-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=roy.franz-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org \
    --cc=yi.li-QSEj5FYQhm4dnm+yROfE0A@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: link
Be 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.