Message ID | 20231111134827.174908-1-heinrich.schuchardt@canonical.com |
---|---|
State | New |
Headers | show |
Series | [1/1] ACPI: XSDT: struct acpi_table_xsdt must be packed | expand |
On Sat, Nov 11, 2023 at 2:48 PM Heinrich Schuchardt <heinrich.schuchardt@canonical.com> wrote: > > According to the ACPI 6.5 specification the component Entry starts at > offset 36 in the XSDT table which is not a multiple of 8. Hence we must > mark the structure as packed. There is #pragma pack(1) at the beginning of actbl.h. Is it not sufficient? > We did not see an error due to the incorrect packing yet as in > acpi_tb_parse_root_table() we use ACPI_ADD_PTR() to find the address of > Entry. > > Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> > --- > include/acpi/actbl.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h > index 451f6276da49..1a37ac378765 100644 > --- a/include/acpi/actbl.h > +++ b/include/acpi/actbl.h > @@ -148,7 +148,7 @@ struct acpi_table_rsdt { > struct acpi_table_xsdt { > struct acpi_table_header header; /* Common ACPI table header */ > u64 table_offset_entry[1]; /* Array of pointers to ACPI tables */ > -}; > +} __packed; > > #define ACPI_RSDT_ENTRY_SIZE (sizeof (u32)) > #define ACPI_XSDT_ENTRY_SIZE (sizeof (u64)) > -- > 2.40.1 >
On 06.12.23 17:30, Rafael J. Wysocki wrote: > On Sat, Nov 11, 2023 at 2:48 PM Heinrich Schuchardt > <heinrich.schuchardt@canonical.com> wrote: >> >> According to the ACPI 6.5 specification the component Entry starts at >> offset 36 in the XSDT table which is not a multiple of 8. Hence we must >> mark the structure as packed. > > There is #pragma pack(1) at the beginning of actbl.h. Is it not sufficient? Sorry I missed that pragma. > >> We did not see an error due to the incorrect packing yet as in >> acpi_tb_parse_root_table() we use ACPI_ADD_PTR() to find the address of >> Entry. >> >> Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> >> --- >> include/acpi/actbl.h | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h >> index 451f6276da49..1a37ac378765 100644 >> --- a/include/acpi/actbl.h >> +++ b/include/acpi/actbl.h >> @@ -148,7 +148,7 @@ struct acpi_table_rsdt { >> struct acpi_table_xsdt { >> struct acpi_table_header header; /* Common ACPI table header */ >> u64 table_offset_entry[1]; /* Array of pointers to ACPI tables */ >> -}; >> +} __packed; >> >> #define ACPI_RSDT_ENTRY_SIZE (sizeof (u32)) >> #define ACPI_XSDT_ENTRY_SIZE (sizeof (u64)) >> -- >> 2.40.1 >>
diff --git a/include/acpi/actbl.h b/include/acpi/actbl.h index 451f6276da49..1a37ac378765 100644 --- a/include/acpi/actbl.h +++ b/include/acpi/actbl.h @@ -148,7 +148,7 @@ struct acpi_table_rsdt { struct acpi_table_xsdt { struct acpi_table_header header; /* Common ACPI table header */ u64 table_offset_entry[1]; /* Array of pointers to ACPI tables */ -}; +} __packed; #define ACPI_RSDT_ENTRY_SIZE (sizeof (u32)) #define ACPI_XSDT_ENTRY_SIZE (sizeof (u64))
According to the ACPI 6.5 specification the component Entry starts at offset 36 in the XSDT table which is not a multiple of 8. Hence we must mark the structure as packed. We did not see an error due to the incorrect packing yet as in acpi_tb_parse_root_table() we use ACPI_ADD_PTR() to find the address of Entry. Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> --- include/acpi/actbl.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)