lkml.org 
[lkml]   [2022]   [Jul]   [26]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCHv7 06/14] efi/x86: Implement support for unaccepted memory
    On Tue, Jun 14, 2022 at 03:02:23PM +0300, Kirill A. Shutemov wrote:
    > diff --git a/drivers/firmware/efi/Kconfig b/drivers/firmware/efi/Kconfig
    > index 7aa4717cdcac..e1270beff4dc 100644
    > --- a/drivers/firmware/efi/Kconfig
    > +++ b/drivers/firmware/efi/Kconfig
    > @@ -305,6 +305,20 @@ config EFI_COCO_SECRET
    > virt/coco/efi_secret module to access the secrets, which in turn
    > allows userspace programs to access the injected secrets.
    >
    > +config UNACCEPTED_MEMORY
    > + bool
    > + depends on EFI_STUB
    > + help
    > + Some Virtual Machine platforms, such as Intel TDX, require
    > + some memory to be "accepted" by the guest before it can be used.
    > + This mechanism helps prevent malicious hosts from making changes
    > + to guest memory.
    > +
    > + UEFI specification v2.9 introduced EFI_UNACCEPTED_MEMORY memory type.
    > +
    > + This option adds support for unaccepted memory and makes such memory
    > + usable by the kernel.
    > +

    This looks weird:

    $ grep EFI_STUB .config
    CONFIG_EFI_STUB=y
    $ grep UNACCEPTED_MEMORY .config
    $

    So the bool needs to have a text string after it so that it is
    selectable or how is UNACCEPTED_MEMORY supposed to be enabled otherwise?

    If I add the string and select UNACCEPTED_MEMORY, it won't build:

    mm/page_alloc.c: In function ‘accept_page’:
    mm/page_alloc.c:1013:9: error: implicit declaration of function ‘accept_memory’ [-Werror=implicit-function-declaration]
    1013 | accept_memory(start, start + (PAGE_SIZE << order));
    | ^~~~~~~~~~~~~
    mm/page_alloc.c: In function ‘page_contains_unaccepted’:
    mm/page_alloc.c:1029:16: error: implicit declaration of function ‘range_contains_unaccepted_memory’; did you mean ‘page_contains_unaccepted’? [-Werror=implicit-function-declaration]
    1029 | return range_contains_unaccepted_memory(start, end);
    | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    | page_contains_unaccepted
    mm/memblock.c: In function ‘memblock_alloc_range_nid’:
    mm/memblock.c:1415:9: error: implicit declaration of function ‘accept_memory’ [-Werror=implicit-function-declaration]
    1415 | accept_memory(found, found + size);
    | ^~~~~~~~~~~~~
    cc1: some warnings being treated as errors
    make[1]: *** [scripts/Makefile.build:249: mm/memblock.o] Error 1
    make[1]: *** Waiting for unfinished jobs....
    cc1: some warnings being treated as errors
    make[1]: *** [scripts/Makefile.build:249: mm/page_alloc.o] Error 1
    make: *** [Makefile:1843: mm] Error 2
    make: *** Waiting for unfinished jobs....

    so this is weird.

    > diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
    > index 504955368934..b91c89100b2d 100644
    > --- a/drivers/firmware/efi/libstub/x86-stub.c
    > +++ b/drivers/firmware/efi/libstub/x86-stub.c
    > @@ -15,6 +15,7 @@
    > #include <asm/setup.h>
    > #include <asm/desc.h>
    > #include <asm/boot.h>
    > +#include <asm/unaccepted_memory.h>
    >
    > #include "efistub.h"
    >
    > @@ -607,6 +608,17 @@ setup_e820(struct boot_params *params, struct setup_data *e820ext, u32 e820ext_s
    > e820_type = E820_TYPE_PMEM;
    > break;
    >
    > + case EFI_UNACCEPTED_MEMORY:
    > + if (!IS_ENABLED(CONFIG_UNACCEPTED_MEMORY)) {
    > + efi_warn_once("The system has unaccepted memory,"
    > + " but kernel does not support it\n");
    > + efi_warn_once("Consider enabling CONFIG_UNACCEPTED_MEMORY\n");
    > + continue;
    > + }

    So that it can be grepped for:

    diff --git a/drivers/firmware/efi/libstub/x86-stub.c b/drivers/firmware/efi/libstub/x86-stub.c
    index b91c89100b2d..8be6b675e08e 100644
    --- a/drivers/firmware/efi/libstub/x86-stub.c
    +++ b/drivers/firmware/efi/libstub/x86-stub.c
    @@ -610,9 +610,8 @@ setup_e820(struct boot_params *params, struct setup_data *e820ext, u32 e820ext_s

    case EFI_UNACCEPTED_MEMORY:
    if (!IS_ENABLED(CONFIG_UNACCEPTED_MEMORY)) {
    - efi_warn_once("The system has unaccepted memory,"
    - " but kernel does not support it\n");
    - efi_warn_once("Consider enabling CONFIG_UNACCEPTED_MEMORY\n");
    + efi_warn_once(
    +"The system has unaccepted memory, but kernel does not support it.\nConsider enabling CONFIG_UNACCEPTED_MEMORY\n");
    continue;
    }
    e820_type = E820_TYPE_RAM;

    Thx.

    --
    Regards/Gruss,
    Boris.

    https://people.kernel.org/tglx/notes-about-netiquette

    \
     
     \ /
      Last update: 2022-07-26 10:36    [W:3.027 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site