A common source of breakages during development and testing is to run
with outdated configuration files against newer binaries, or vice versa.
Catch and report this by converting the last 2 bytes of the system and
cell config signatures into a revision number. Whenever we change their
layout or semantic, this number shall be increased.

Configs were auto-converted via

sed -i -e '/\.signature =/a\\t\t.revision = JAILHOUSE_CONFIG_REVISION,' \
    `git ls-files configs/*.c`

Signed-off-by: Jan Kiszka <[email protected]>
---
 configs/amd-seattle-gic-demo.c             |  1 +
 configs/amd-seattle-linux-demo.c           |  1 +
 configs/amd-seattle-uart-demo.c            |  1 +
 configs/amd-seattle.c                      |  1 +
 configs/apic-demo.c                        |  1 +
 configs/bananapi-gic-demo.c                |  1 +
 configs/bananapi-linux-demo.c              |  1 +
 configs/bananapi-uart-demo.c               |  1 +
 configs/bananapi.c                         |  1 +
 configs/e1000-demo.c                       |  1 +
 configs/f2a88xm-hd3.c                      |  1 +
 configs/foundation-v8-gic-demo.c           |  1 +
 configs/foundation-v8-linux-demo.c         |  1 +
 configs/foundation-v8-uart-demo.c          |  1 +
 configs/foundation-v8.c                    |  1 +
 configs/h87i.c                             |  1 +
 configs/hikey-gic-demo.c                   |  1 +
 configs/hikey-linux-demo.c                 |  1 +
 configs/hikey.c                            |  1 +
 configs/imb-a180.c                         |  1 +
 configs/ioapic-demo.c                      |  1 +
 configs/ivshmem-demo.c                     |  1 +
 configs/jetson-tk1-demo.c                  |  1 +
 configs/jetson-tk1-linux-demo.c            |  1 +
 configs/jetson-tk1.c                       |  1 +
 configs/linux-x86-demo.c                   |  1 +
 configs/pci-demo.c                         |  1 +
 configs/qemu-vm.c                          |  1 +
 configs/smp-demo.c                         |  1 +
 configs/tiny-demo.c                        |  1 +
 configs/vexpress-gic-demo.c                |  1 +
 configs/vexpress-linux-demo.c              |  1 +
 configs/vexpress-uart-demo.c               |  1 +
 configs/vexpress.c                         |  1 +
 driver/cell.c                              |  5 +++++
 driver/main.c                              |  4 ++++
 hypervisor/include/jailhouse/cell-config.h | 14 ++++++++++----
 tools/jailhouse-cell-linux                 |  9 +++++++--
 tools/root-cell-config.c.tmpl              |  1 +
 39 files changed, 61 insertions(+), 6 deletions(-)

diff --git a/configs/amd-seattle-gic-demo.c b/configs/amd-seattle-gic-demo.c
index 142f11a..a726b33 100644
--- a/configs/amd-seattle-gic-demo.c
+++ b/configs/amd-seattle-gic-demo.c
@@ -22,6 +22,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "gic-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/amd-seattle-linux-demo.c b/configs/amd-seattle-linux-demo.c
index 6f2f67a..e9bbc5c 100644
--- a/configs/amd-seattle-linux-demo.c
+++ b/configs/amd-seattle-linux-demo.c
@@ -24,6 +24,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/amd-seattle-uart-demo.c b/configs/amd-seattle-uart-demo.c
index 4f814c0..7294b96 100644
--- a/configs/amd-seattle-uart-demo.c
+++ b/configs/amd-seattle-uart-demo.c
@@ -22,6 +22,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "pl011-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/amd-seattle.c b/configs/amd-seattle.c
index cd589e5..6353678 100644
--- a/configs/amd-seattle.c
+++ b/configs/amd-seattle.c
@@ -24,6 +24,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0x82fc000000,
                        .size =          0x4000000,
diff --git a/configs/apic-demo.c b/configs/apic-demo.c
index 3972109..db599c3 100644
--- a/configs/apic-demo.c
+++ b/configs/apic-demo.c
@@ -26,6 +26,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "apic-demo",
 
                .cpu_set_size = sizeof(config.cpus),
diff --git a/configs/bananapi-gic-demo.c b/configs/bananapi-gic-demo.c
index f7c9ee6..84436d7 100644
--- a/configs/bananapi-gic-demo.c
+++ b/configs/bananapi-gic-demo.c
@@ -25,6 +25,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "bananapi-gic-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/bananapi-linux-demo.c b/configs/bananapi-linux-demo.c
index 495d242..a323950 100644
--- a/configs/bananapi-linux-demo.c
+++ b/configs/bananapi-linux-demo.c
@@ -27,6 +27,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "bananapi-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/bananapi-uart-demo.c b/configs/bananapi-uart-demo.c
index 89eb736..5b3ff9a 100644
--- a/configs/bananapi-uart-demo.c
+++ b/configs/bananapi-uart-demo.c
@@ -25,6 +25,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "bananapi-uart-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/bananapi.c b/configs/bananapi.c
index f3d095b..5802619 100644
--- a/configs/bananapi.c
+++ b/configs/bananapi.c
@@ -26,6 +26,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0x7c000000,
                        .size = 0x4000000,
diff --git a/configs/e1000-demo.c b/configs/e1000-demo.c
index cccf00a..23c100c 100644
--- a/configs/e1000-demo.c
+++ b/configs/e1000-demo.c
@@ -28,6 +28,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "e1000-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/f2a88xm-hd3.c b/configs/f2a88xm-hd3.c
index f1957fa..ec314ed 100644
--- a/configs/f2a88xm-hd3.c
+++ b/configs/f2a88xm-hd3.c
@@ -33,6 +33,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0x3b000000,
                        .size = 0x4000000,
diff --git a/configs/foundation-v8-gic-demo.c b/configs/foundation-v8-gic-demo.c
index 2984c61..7808333 100644
--- a/configs/foundation-v8-gic-demo.c
+++ b/configs/foundation-v8-gic-demo.c
@@ -22,6 +22,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "gic-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/foundation-v8-linux-demo.c 
b/configs/foundation-v8-linux-demo.c
index ea90156..4c61641 100644
--- a/configs/foundation-v8-linux-demo.c
+++ b/configs/foundation-v8-linux-demo.c
@@ -23,6 +23,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "linux-inmate-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/foundation-v8-uart-demo.c 
b/configs/foundation-v8-uart-demo.c
index 07c931b..e6f836d 100644
--- a/configs/foundation-v8-uart-demo.c
+++ b/configs/foundation-v8-uart-demo.c
@@ -22,6 +22,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "pl011-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/foundation-v8.c b/configs/foundation-v8.c
index a7f4021..113cb00 100644
--- a/configs/foundation-v8.c
+++ b/configs/foundation-v8.c
@@ -23,6 +23,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0xfc000000,
                        .size = 0x4000000,
diff --git a/configs/h87i.c b/configs/h87i.c
index 5678c3d..e2846f8 100644
--- a/configs/h87i.c
+++ b/configs/h87i.c
@@ -28,6 +28,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0x3b000000,
                        .size = 0x4000000,
diff --git a/configs/hikey-gic-demo.c b/configs/hikey-gic-demo.c
index d298087..ad80fee 100644
--- a/configs/hikey-gic-demo.c
+++ b/configs/hikey-gic-demo.c
@@ -22,6 +22,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "gic-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/hikey-linux-demo.c b/configs/hikey-linux-demo.c
index f78190d..5b2f135 100644
--- a/configs/hikey-linux-demo.c
+++ b/configs/hikey-linux-demo.c
@@ -27,6 +27,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "hikey-linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/hikey.c b/configs/hikey.c
index 2295251..dc7736d 100644
--- a/configs/hikey.c
+++ b/configs/hikey.c
@@ -24,6 +24,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0x7c000000,
                        .size =       0x04000000,
diff --git a/configs/imb-a180.c b/configs/imb-a180.c
index 8a67bdd..0e30cdc 100644
--- a/configs/imb-a180.c
+++ b/configs/imb-a180.c
@@ -32,6 +32,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0x3b000000,
                        .size = 0x4000000,
diff --git a/configs/ioapic-demo.c b/configs/ioapic-demo.c
index 3175a65..683834e 100644
--- a/configs/ioapic-demo.c
+++ b/configs/ioapic-demo.c
@@ -27,6 +27,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "ioapic-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/ivshmem-demo.c b/configs/ivshmem-demo.c
index f634e1c..f3929cc 100644
--- a/configs/ivshmem-demo.c
+++ b/configs/ivshmem-demo.c
@@ -25,6 +25,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "ivshmem-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/jetson-tk1-demo.c b/configs/jetson-tk1-demo.c
index 90fcac6..d39398f 100644
--- a/configs/jetson-tk1-demo.c
+++ b/configs/jetson-tk1-demo.c
@@ -25,6 +25,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "jetson-tk1-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/jetson-tk1-linux-demo.c b/configs/jetson-tk1-linux-demo.c
index 157edf0..001dffb 100644
--- a/configs/jetson-tk1-linux-demo.c
+++ b/configs/jetson-tk1-linux-demo.c
@@ -27,6 +27,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "jetson-tk1-linux-demo",
                .flags = 
JAILHOUSE_CELL_PASSIVE_COMMREG|JAILHOUSE_CELL_DEBUG_CONSOLE,
 
diff --git a/configs/jetson-tk1.c b/configs/jetson-tk1.c
index 9a66a46..6d80131 100644
--- a/configs/jetson-tk1.c
+++ b/configs/jetson-tk1.c
@@ -29,6 +29,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0xfc000000,
                        .size = 0x4000000 - 0x100000, /* -1MB (PSCI) */
diff --git a/configs/linux-x86-demo.c b/configs/linux-x86-demo.c
index 9869931..f98a7c6 100644
--- a/configs/linux-x86-demo.c
+++ b/configs/linux-x86-demo.c
@@ -27,6 +27,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "linux-x86-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/pci-demo.c b/configs/pci-demo.c
index 0af418a..ee63b0f 100644
--- a/configs/pci-demo.c
+++ b/configs/pci-demo.c
@@ -28,6 +28,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "pci-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/qemu-vm.c b/configs/qemu-vm.c
index 0849f4a..cbe5288 100644
--- a/configs/qemu-vm.c
+++ b/configs/qemu-vm.c
@@ -42,6 +42,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0x3b000000,
                        .size = 0x600000,
diff --git a/configs/smp-demo.c b/configs/smp-demo.c
index 1a583f7..30527b2 100644
--- a/configs/smp-demo.c
+++ b/configs/smp-demo.c
@@ -25,6 +25,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "smp-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/tiny-demo.c b/configs/tiny-demo.c
index 3d7d391..d15f694 100644
--- a/configs/tiny-demo.c
+++ b/configs/tiny-demo.c
@@ -26,6 +26,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "tiny-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/vexpress-gic-demo.c b/configs/vexpress-gic-demo.c
index 2984c61..7808333 100644
--- a/configs/vexpress-gic-demo.c
+++ b/configs/vexpress-gic-demo.c
@@ -22,6 +22,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "gic-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/vexpress-linux-demo.c b/configs/vexpress-linux-demo.c
index d192b66..83c8188 100644
--- a/configs/vexpress-linux-demo.c
+++ b/configs/vexpress-linux-demo.c
@@ -23,6 +23,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "linux-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/vexpress-uart-demo.c b/configs/vexpress-uart-demo.c
index ab02a7c..1a7a603 100644
--- a/configs/vexpress-uart-demo.c
+++ b/configs/vexpress-uart-demo.c
@@ -22,6 +22,7 @@ struct {
 } __attribute__((packed)) config = {
        .cell = {
                .signature = JAILHOUSE_CELL_DESC_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .name = "pl011-demo",
                .flags = JAILHOUSE_CELL_PASSIVE_COMMREG,
 
diff --git a/configs/vexpress.c b/configs/vexpress.c
index 319bb58..a922d1f 100644
--- a/configs/vexpress.c
+++ b/configs/vexpress.c
@@ -23,6 +23,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = 0xfc000000,
                        .size = 0x4000000,
diff --git a/driver/cell.c b/driver/cell.c
index 0b5ac38..c197466 100644
--- a/driver/cell.c
+++ b/driver/cell.c
@@ -173,6 +173,11 @@ int jailhouse_cmd_cell_create(struct jailhouse_cell_create 
__user *arg)
                err = -EINVAL;
                goto kfree_config_out;
        }
+       if (config->revision != JAILHOUSE_CONFIG_REVISION) {
+               pr_err("jailhouse: Configuration revision mismatch\n");
+               err = -EINVAL;
+               goto kfree_config_out;
+       }
 
        config->name[JAILHOUSE_CELL_NAME_MAXLEN] = 0;
 
diff --git a/driver/main.c b/driver/main.c
index 206e29f..318487f 100644
--- a/driver/main.c
+++ b/driver/main.c
@@ -211,6 +211,10 @@ static int jailhouse_cmd_enable(struct jailhouse_system 
__user *arg)
                pr_err("jailhouse: Not a system configuration\n");
                return -EINVAL;
        }
+       if (config_header.revision != JAILHOUSE_CONFIG_REVISION) {
+               pr_err("jailhouse: Configuration revision mismatch\n");
+               return -EINVAL;
+       }
 
        config_header.root_cell.name[JAILHOUSE_CELL_NAME_MAXLEN] = 0;
 
diff --git a/hypervisor/include/jailhouse/cell-config.h 
b/hypervisor/include/jailhouse/cell-config.h
index 76931a5..4a2a4d2 100644
--- a/hypervisor/include/jailhouse/cell-config.h
+++ b/hypervisor/include/jailhouse/cell-config.h
@@ -39,12 +39,15 @@
 #ifndef _JAILHOUSE_CELL_CONFIG_H
 #define _JAILHOUSE_CELL_CONFIG_H
 
+/* Incremented on any layout or semantic change of system or cell config. */
+#define JAILHOUSE_CONFIG_REVISION      1
+
 #define JAILHOUSE_CELL_NAME_MAXLEN     31
 
 #define JAILHOUSE_CELL_PASSIVE_COMMREG 0x00000001
 #define JAILHOUSE_CELL_DEBUG_CONSOLE   0x00000002
 
-#define JAILHOUSE_CELL_DESC_SIGNATURE  "JAILCELL"
+#define JAILHOUSE_CELL_DESC_SIGNATURE  "JHCELL"
 
 /**
  * The jailhouse cell configuration.
@@ -53,7 +56,9 @@
  * structure.
  */
 struct jailhouse_cell_desc {
-       char signature[8];
+       char signature[6];
+       __u16 revision;
+
        char name[JAILHOUSE_CELL_NAME_MAXLEN+1];
        __u32 id; /* set by the driver */
        __u32 flags;
@@ -166,13 +171,14 @@ struct jailhouse_iommu {
        __u32 amd_features;
 } __attribute__((packed));
 
-#define JAILHOUSE_SYSTEM_SIGNATURE     "JAILSYST"
+#define JAILHOUSE_SYSTEM_SIGNATURE     "JHSYST"
 
 /**
  * General descriptor of the system.
  */
 struct jailhouse_system {
-       char signature[8];
+       char signature[6];
+       __u16 revision;
 
        /** Jailhouse's location in memory */
        struct jailhouse_memory hypervisor_memory;
diff --git a/tools/jailhouse-cell-linux b/tools/jailhouse-cell-linux
index fe469c4..73aa1ac 100755
--- a/tools/jailhouse-cell-linux
+++ b/tools/jailhouse-cell-linux
@@ -509,12 +509,14 @@ class MemoryRegion:
 
 
 class Config:
-    _HEADER_FORMAT = '8s32s4xIIIIIIIII'
+    _HEADER_FORMAT = '6sH32s4xIIIIIIIII'
+    _HEADER_REVISION = 1
 
     def __init__(self, config_file):
         self.data = config_file.read()
 
         (signature,
+         revision,
          name,
          self.flags,
          self.cpu_set_size,
@@ -526,10 +528,13 @@ class Config:
          self.num_pci_caps,
          self.vpci_irq_base) = \
             struct.unpack_from(Config._HEADER_FORMAT, self.data)
-        if str(signature.decode()) != 'JAILCELL':
+        if str(signature.decode()) != 'JHCELL':
             print('Not a cell configuration: %s' % config_file.name,
                   file=sys.stderr)
             exit(1)
+        if revision != Config._HEADER_REVISION:
+            print('Configuration file revision mismatch', file=sys.stderr)
+            exit(1)
         self.name = str(name.decode())
 
         memregion_offs = struct.calcsize(Config._HEADER_FORMAT) + \
diff --git a/tools/root-cell-config.c.tmpl b/tools/root-cell-config.c.tmpl
index 59686d3..7cf2d8d 100644
--- a/tools/root-cell-config.c.tmpl
+++ b/tools/root-cell-config.c.tmpl
@@ -55,6 +55,7 @@ struct {
 } __attribute__((packed)) config = {
        .header = {
                .signature = JAILHOUSE_SYSTEM_SIGNATURE,
+               .revision = JAILHOUSE_CONFIG_REVISION,
                .hypervisor_memory = {
                        .phys_start = ${hex(hvmem[0])},
                        .size = ${hex(hvmem[1])},
-- 
2.1.4

-- 
You received this message because you are subscribed to the Google Groups 
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.

Reply via email to