Re: [PATCH] mm, kasan: don't poison boot memory

From: Mike Rapoport
Date: Tue Feb 23 2021 - 10:50:42 EST


Hi George,

On Tue, Feb 23, 2021 at 09:35:32AM -0500, George Kennedy wrote:
>
> On 2/23/2021 5:33 AM, Mike Rapoport wrote:
> > (re-added CC)
> >
> > On Mon, Feb 22, 2021 at 08:24:59PM -0500, George Kennedy wrote:
> > > On 2/22/2021 4:55 PM, Mike Rapoport wrote:
> > > > On Mon, Feb 22, 2021 at 01:42:56PM -0500, George Kennedy wrote:
> > > > > On 2/22/2021 11:13 AM, David Hildenbrand wrote:
> > > > > > On 22.02.21 16:13, George Kennedy wrote:
> > > > > >
> > > > > > The PFN 0xbe453 looks a little strange, though. Do we expect ACPI tables
> > > > > > close to 3 GiB ? No idea. Could it be that you are trying to map a wrong
> > > > > > table? Just a guess.
> > > > > >
> > > > > > > What would be  the correct way to reserve the page so that the above
> > > > > > > would not be hit?
> > > > > > I would have assumed that if this is a binary blob, that someone (which
> > > > > > I think would be acpi code) reserved via memblock_reserve() early during
> > > > > > boot.
> > > > > >
> > > > > > E.g., see drivers/acpi/tables.c:acpi_table_upgrade()->memblock_reserve().
> > > > > acpi_table_upgrade() gets called, but bails out before memblock_reserve() is
> > > > > called. Thus, it appears no pages are getting reserved.
> > > > acpi_table_upgrade() does not actually reserve memory but rather open
> > > > codes memblock allocation with memblock_find_in_range() +
> > > > memblock_reserve(), so it does not seem related anyway.
> > > >
> > > > Do you have by chance a full boot log handy?
> > > Hello Mike,
> > >
> > > Are you after the console output? See attached.
> > >
> > > It includes my patch to set PG_Reserved along with the dump_page() debug
> > > that David asked for - see: "page:"
> > So, iBFT is indeed at pfn 0xbe453:
> >
> > [ 0.077698] ACPI: iBFT 0x00000000BE453000 000800 (v01 BOCHS BXPCFACP 00000000 00000000)
> > and it's in E820_TYPE_RAM region rather than in ACPI data:
> >
> > [ 0.000000] BIOS-e820: [mem 0x0000000000810000-0x00000000008fffff] ACPI NVS
> > [ 0.000000] BIOS-e820: [mem 0x0000000000900000-0x00000000be49afff] usable
> > [ 0.000000] BIOS-e820: [mem 0x00000000be49b000-0x00000000be49bfff] ACPI data
> >
> > I could not find anywhere in x86 setup or in ACPI tables parsing the code
> > that reserves this memory or any other ACPI data for that matter. It could
> > be that I've missed some copying of the data to statically allocated
> > initial_tables, but AFAICS any ACPI data that was not marked as such in
> > e820 tables by BIOS resides in memory that is considered as free.
> >
>
> Close...
>
> Applied the patch, see "[   30.136157] iBFT detected.", but now hit the
> following (missing iounmap()? see full console output attached):
>
> diff --git a/drivers/firmware/iscsi_ibft_find.c
> b/drivers/firmware/iscsi_ibft_find.c
> index 64bb945..2e5e040 100644
> --- a/drivers/firmware/iscsi_ibft_find.c
> +++ b/drivers/firmware/iscsi_ibft_find.c
> @@ -80,6 +80,21 @@ static int __init find_ibft_in_mem(void)
>  done:
>         return len;
>  }
> +
> +static void __init acpi_find_ibft_region(void)
> +{
> +       int i;
> +       struct acpi_table_header *table = NULL;
> +
> +       if (acpi_disabled)
> +               return;
> +
> +       for (i = 0; i < ARRAY_SIZE(ibft_signs) && !ibft_addr; i++) {
> +               acpi_get_table(ibft_signs[i].sign, 0, &table);
> +               ibft_addr = (struct acpi_table_ibft *)table;

Can you try adding

acpi_put_table(table);

here?

> +       }
> +}
> +

--
Sincerely yours,
Mike.