|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 2/6] libxc/restore: Bail if unknown options are found
When restoring a domain, check for unknown options in Image Header. Nothing
good will come from attempting to continue.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CC: David Vrabel <david.vrabel@xxxxxxxxxx>
CC: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
CC: Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx>
CC: Wei Liu <wei.liu2@xxxxxxxxxx>
CC: Yang Hongyang <yanghy@xxxxxxxxxxxxxx>
---
David: The wording of the spec disallows even adding new options without
bumping the protocol version. Do we want to relax the restriction slightly?
---
docs/specs/libxc-migration-stream.pandoc | 5 +++--
tools/libxc/xc_sr_restore.c | 6 ++++++
tools/libxc/xc_sr_stream_format.h | 2 ++
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/docs/specs/libxc-migration-stream.pandoc
b/docs/specs/libxc-migration-stream.pandoc
index 520240f..fa501e7 100644
--- a/docs/specs/libxc-migration-stream.pandoc
+++ b/docs/specs/libxc-migration-stream.pandoc
@@ -131,11 +131,12 @@ version 0x00000002. The version of this
specification.
options bit 0: Endianness. 0 = little-endian, 1 = big-endian.
- bit 1-15: Reserved.
+ bit 1-15: Reserved. (Must be zero)
--------------------------------------------------------------------
The endianness shall be 0 (little-endian) for images generated on an
-i386, x86_64, or arm host.
+i386, x86_64, or arm host. The receiving side should confirm that no
+unexpected options have been specified.
\clearpage
diff --git a/tools/libxc/xc_sr_restore.c b/tools/libxc/xc_sr_restore.c
index 0bf4bae..7d65a29 100644
--- a/tools/libxc/xc_sr_restore.c
+++ b/tools/libxc/xc_sr_restore.c
@@ -37,6 +37,12 @@ static int read_headers(struct xc_sr_context *ctx)
ihdr.version, IHDR_VERSION);
return -1;
}
+ else if ( ihdr.options & IHDR_OPT_RSVD_MASK )
+ {
+ ERROR("Unknown options in Image Header: 0x%04x",
+ ihdr.options & IHDR_OPT_RSVD_MASK);
+ return -1;
+ }
else if ( ihdr.options & IHDR_OPT_BIG_ENDIAN )
{
ERROR("Unable to handle big endian streams");
diff --git a/tools/libxc/xc_sr_stream_format.h
b/tools/libxc/xc_sr_stream_format.h
index d116ca6..9d8c128 100644
--- a/tools/libxc/xc_sr_stream_format.h
+++ b/tools/libxc/xc_sr_stream_format.h
@@ -29,6 +29,8 @@ struct xc_sr_ihdr
#define IHDR_OPT_LITTLE_ENDIAN (0 << _IHDR_OPT_ENDIAN)
#define IHDR_OPT_BIG_ENDIAN (1 << _IHDR_OPT_ENDIAN)
+#define IHDR_OPT_RSVD_MASK (~(IHDR_OPT_BIG_ENDIAN))
+
/*
* Domain Header
*/
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |