|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2 5/7] xen/arm: acpi: add BAD_MADT_GICC_ENTRY() macro
On Fri, 23 Oct 2020, Julien Grall wrote:
> From: Julien Grall <julien.grall@xxxxxxx>
>
> Imported from Linux commit b6cfb277378ef831c0fa84bcff5049307294adc6:
>
> The BAD_MADT_ENTRY() macro is designed to work for all of the subtables
> of the MADT. In the ACPI 5.1 version of the spec, the struct for the
> GICC subtable (struct acpi_madt_generic_interrupt) is 76 bytes long; in
> ACPI 6.0, the struct is 80 bytes long. But, there is only one definition
> in ACPICA for this struct -- and that is the 6.0 version. Hence, when
> BAD_MADT_ENTRY() compares the struct size to the length in the GICC
> subtable, it fails if 5.1 structs are in use, and there are systems in
> the wild that have them.
>
> This patch adds the BAD_MADT_GICC_ENTRY() that checks the GICC subtable
> only, accounting for the difference in specification versions that are
> possible. The BAD_MADT_ENTRY() will continue to work as is for all other
> MADT subtables.
>
> This code is being added to an arm64 header file since that is currently
> the only architecture using the GICC subtable of the MADT. As a GIC is
> specific to ARM, it is also unlikely the subtable will be used elsewhere.
>
> Fixes: aeb823bbacc2 ("ACPICA: ACPI 6.0: Add changes for FADT table.")
> Signed-off-by: Al Stone <al.stone@xxxxxxxxxx>
> Acked-by: Will Deacon <will.deacon@xxxxxxx>
> Acked-by: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
> [catalin.marinas@xxxxxxx: extra brackets around macro arguments]
> Signed-off-by: Catalin Marinas <catalin.marinas@xxxxxxx>
>
> Signed-off-by: Julien Grall <julien.grall@xxxxxxx>
> Signed-off-by: Andre Przywara <andre.przywara@xxxxxxx>
> Signed-off-by: Julien Grall <jgrall@xxxxxxxxxx>
Acked-by: Stefano Stabellini <sstabellini@xxxxxxxxxx>
> ---
>
> Changes in v2:
> - Patch added
>
> We may want to consider to also import:
>
> commit 9eb1c92b47c73249465d388eaa394fe436a3b489
> Author: Jeremy Linton <jeremy.linton@xxxxxxx>
> Date: Tue Nov 27 17:59:12 2018 +0000
Sure
> arm64: acpi: Prepare for longer MADTs
>
> The BAD_MADT_GICC_ENTRY check is a little too strict because
> it rejects MADT entries that don't match the currently known
> lengths. We should remove this restriction to avoid problems
> if the table length changes. Future code which might depend on
> additional fields should be written to validate those fields
> before using them, rather than trying to globally check
> known MADT version lengths.
>
> Link:
> https://lkml.kernel.org/r/20181012192937.3819951-1-jeremy.linton@xxxxxxx
> Signed-off-by: Jeremy Linton <jeremy.linton@xxxxxxx>
> [lorenzo.pieralisi@xxxxxxx: added MADT macro comments]
> Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@xxxxxxx>
> Acked-by: Sudeep Holla <sudeep.holla@xxxxxxx>
> Cc: Will Deacon <will.deacon@xxxxxxx>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: Al Stone <ahs3@xxxxxxxxxx>
> Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx>
> Signed-off-by: Will Deacon <will.deacon@xxxxxxx>
> ---
> xen/include/asm-arm/acpi.h | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/xen/include/asm-arm/acpi.h b/xen/include/asm-arm/acpi.h
> index 50340281a917..b52ae2d6ef72 100644
> --- a/xen/include/asm-arm/acpi.h
> +++ b/xen/include/asm-arm/acpi.h
> @@ -54,6 +54,14 @@ void acpi_smp_init_cpus(void);
> */
> paddr_t acpi_get_table_offset(struct membank tbl_add[], EFI_MEM_RES index);
>
> +/* Macros for consistency checks of the GICC subtable of MADT */
> +#define ACPI_MADT_GICC_LENGTH \
> + (acpi_gbl_FADT.header.revision < 6 ? 76 : 80)
> +
> +#define BAD_MADT_GICC_ENTRY(entry, end)
> \
> + (!(entry) || (unsigned long)(entry) + sizeof(*(entry)) > (end) ||
> \
> + (entry)->header.length != ACPI_MADT_GICC_LENGTH)
> +
> #ifdef CONFIG_ACPI
> extern bool acpi_disabled;
> /* Basic configuration for ACPI */
> --
> 2.17.1
>
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |