[PATCH 27/27] lib: fwts_acpi_tables: unconstify data and don't strcpy ACPI table ids
Colin King
colin.king at canonical.com
Wed Aug 15 13:11:29 UTC 2018
From: Colin Ian King <colin.king at canonical.com>
Although it seems a good idea to make the ACPI table data const, we
may need to modify it when patching pointers if we make cached copies
of the data, so unconstify it.
Also, don't strncpy ACPI table IDs, instead memcpy them as they are
not really strings with terminating zero bytes.
Signed-off-by: Colin Ian King <colin.king at canonical.com>
---
src/lib/include/fwts_acpi_tables.h | 2 +-
src/lib/src/fwts_acpi_tables.c | 24 ++++++++++++------------
2 files changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/lib/include/fwts_acpi_tables.h b/src/lib/include/fwts_acpi_tables.h
index d307af89..24a7b78a 100644
--- a/src/lib/include/fwts_acpi_tables.h
+++ b/src/lib/include/fwts_acpi_tables.h
@@ -34,7 +34,7 @@ typedef enum {
typedef struct {
char name[5];
- const void *data;
+ void *data;
size_t length;
uint32_t which;
uint32_t index;
diff --git a/src/lib/src/fwts_acpi_tables.c b/src/lib/src/fwts_acpi_tables.c
index ccf0a7b1..b6d8fbe4 100644
--- a/src/lib/src/fwts_acpi_tables.c
+++ b/src/lib/src/fwts_acpi_tables.c
@@ -228,7 +228,7 @@ static void *fwts_acpi_load_table(const off_t addr)
*/
static void fwts_acpi_add_table(
const char *name, /* Table Name */
- const void *table, /* Table binary blob */
+ void *table, /* Table binary blob */
const uint64_t addr, /* Address of table */
const size_t length, /* Length of table */
const fwts_acpi_table_provenance provenance)
@@ -1006,7 +1006,7 @@ static int fwts_acpi_load_tables_fixup(fwts_framework *fw)
fwts_log_error(fw, "Cannot allocate fake FACS.");
return FWTS_ERROR;
}
- strncpy(facs->signature, "FACS", 4);
+ (void)memcpy(facs->signature, "FACS", 4);
facs->length = size;
facs->hardware_signature = 0xf000a200; /* Some signature */
facs->flags = 0;
@@ -1074,13 +1074,13 @@ static int fwts_acpi_load_tables_fixup(fwts_framework *fw)
if (table && fwts_acpi_table_fixable(table))
rsdt->entries[j++] = (uint32_t)table->addr;
- strncpy(rsdt->header.signature, "RSDT", 4);
+ (void)memcpy(rsdt->header.signature, "RSDT", 4);
rsdt->header.length = size;
rsdt->header.revision = 1;
- strncpy(rsdt->header.oem_id, "FWTSID", 6);
- strncpy(rsdt->header.oem_tbl_id, oem_tbl_id, 8);
+ (void)memcpy(rsdt->header.oem_id, "FWTSID", 6);
+ (void)memcpy(rsdt->header.oem_tbl_id, oem_tbl_id, 8);
rsdt->header.oem_revision = 1;
- strncpy(rsdt->header.creator_id, "FWTS", 4);
+ (void)memcpy(rsdt->header.creator_id, "FWTS", 4);
rsdt->header.creator_revision = 1;
rsdt->header.checksum = 256 - fwts_checksum((uint8_t*)rsdt, size);
@@ -1111,13 +1111,13 @@ static int fwts_acpi_load_tables_fixup(fwts_framework *fw)
if (table && fwts_acpi_table_fixable(table))
xsdt->entries[j++] = table->addr;
- strncpy(xsdt->header.signature, "XSDT", 4);
+ (void)memcpy(xsdt->header.signature, "XSDT", 4);
xsdt->header.length = size;
xsdt->header.revision = 2;
- strncpy(xsdt->header.oem_id, "FWTSID", 6);
- strncpy(xsdt->header.oem_tbl_id, oem_tbl_id, 8);
+ (void)memcpy(xsdt->header.oem_id, "FWTSID", 6);
+ (void)memcpy(xsdt->header.oem_tbl_id, oem_tbl_id, 8);
xsdt->header.oem_revision = 1;
- strncpy(xsdt->header.creator_id, "FWTS", 4);
+ (void)memcpy(xsdt->header.creator_id, "FWTS", 4);
xsdt->header.creator_revision = 1;
xsdt->header.checksum = 256 - fwts_checksum((uint8_t*)xsdt, size);
@@ -1139,8 +1139,8 @@ static int fwts_acpi_load_tables_fixup(fwts_framework *fw)
return FWTS_ERROR;
}
- strncpy(rsdp->signature, "RSD PTR ", 8);
- strncpy(rsdp->oem_id, "FWTSID", 6);
+ (void)memcpy(rsdp->signature, "RSD PTR ", 8);
+ (void)memcpy(rsdp->oem_id, "FWTSID", 6);
rsdp->revision = 2;
rsdp->length = sizeof(fwts_acpi_table_rsdp);
rsdp->reserved[0] = 0;
--
2.17.1
More information about the fwts-devel
mailing list