summaryrefslogtreecommitdiff
path: root/util/nvramtool
diff options
context:
space:
mode:
Diffstat (limited to 'util/nvramtool')
-rw-r--r--util/nvramtool/accessors/layout-bin.c6
-rw-r--r--util/nvramtool/accessors/layout-text.c6
-rw-r--r--util/nvramtool/layout.c3
-rw-r--r--util/nvramtool/layout.h1
4 files changed, 16 insertions, 0 deletions
diff --git a/util/nvramtool/accessors/layout-bin.c b/util/nvramtool/accessors/layout-bin.c
index 34507c9af2..9f92283480 100644
--- a/util/nvramtool/accessors/layout-bin.c
+++ b/util/nvramtool/accessors/layout-bin.c
@@ -481,6 +481,12 @@ static void try_add_cmos_table_entry(cmos_entry_t * cmos_entry)
*/
return;
+ case LAYOUT_MULTIBYTE_ENTRY_NOT_ALIGNED:
+ fprintf(stderr,
+ "%s: Unaligned CMOS option table entry %s "
+ "spans multiple bytes.\n", prog_name, cmos_entry->name);
+ break;
+
default:
BUG();
}
diff --git a/util/nvramtool/accessors/layout-text.c b/util/nvramtool/accessors/layout-text.c
index bea3b3e9ec..f2735b9e35 100644
--- a/util/nvramtool/accessors/layout-text.c
+++ b/util/nvramtool/accessors/layout-text.c
@@ -695,6 +695,12 @@ static void try_add_layout_file_entry(const cmos_entry_t * cmos_entry)
*/
return;
+ case LAYOUT_MULTIBYTE_ENTRY_NOT_ALIGNED:
+ fprintf(stderr,
+ "%s: Unaligned CMOS option table entry %s "
+ "spans multiple bytes.\n", prog_name, cmos_entry->name);
+ break;
+
default:
BUG();
}
diff --git a/util/nvramtool/layout.c b/util/nvramtool/layout.c
index 241dd19c6d..6fdb28216b 100644
--- a/util/nvramtool/layout.c
+++ b/util/nvramtool/layout.c
@@ -169,6 +169,9 @@ int add_cmos_entry(const cmos_entry_t * e, const cmos_entry_t ** conflict)
if (e->length < 1)
return LAYOUT_ENTRY_BAD_LENGTH;
+ if (e->bit % 8 && e->bit / 8 != (e->bit + e->length - 1) / 8)
+ return LAYOUT_MULTIBYTE_ENTRY_NOT_ALIGNED;
+
if ((new_entry =
(cmos_entry_item_t *) malloc(sizeof(*new_entry))) == NULL)
out_of_memory();
diff --git a/util/nvramtool/layout.h b/util/nvramtool/layout.h
index 8a39ab90ac..bde060393b 100644
--- a/util/nvramtool/layout.h
+++ b/util/nvramtool/layout.h
@@ -40,6 +40,7 @@
#define LAYOUT_CHECKSUM_OVERLAPS_SUMMED_AREA (LAYOUT_RESULT_START + 7)
#define LAYOUT_SUMMED_AREA_OUT_OF_RANGE (LAYOUT_RESULT_START + 8)
#define LAYOUT_CHECKSUM_LOCATION_OUT_OF_RANGE (LAYOUT_RESULT_START + 9)
+#define LAYOUT_MULTIBYTE_ENTRY_NOT_ALIGNED (LAYOUT_RESULT_START + 10)
typedef enum {
CMOS_ENTRY_ENUM = 'e',