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.coop...@citrix.com> CC: David Vrabel <david.vra...@citrix.com> CC: Ian Campbell <ian.campb...@citrix.com> CC: Ian Jackson <ian.jack...@eu.citrix.com> CC: Wei Liu <wei.l...@citrix.com> CC: Yang Hongyang <yan...@cn.fujitsu.com> --- 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@lists.xen.org http://lists.xen.org/xen-devel