diff options
author | Jan Beulich <jbeulich@novell.com> | 2011-07-08 08:34:29 +0100 |
---|---|---|
committer | Jan Beulich <jbeulich@novell.com> | 2011-07-08 08:34:29 +0100 |
commit | fe15cd0fb6d1622dbd04c2c227a368593c23b9af (patch) | |
tree | 49240004680441cc49865594022306d110933ea4 /tools/libxc/xc_dom_elfloader.c | |
parent | 4776f8ddd2f2ce957f4965d94709285621933dcc (diff) | |
download | xen-fe15cd0fb6d1622dbd04c2c227a368593c23b9af.tar.gz xen-fe15cd0fb6d1622dbd04c2c227a368593c23b9af.tar.bz2 xen-fe15cd0fb6d1622dbd04c2c227a368593c23b9af.zip |
add privileged/unprivileged kernel feature indication
With our switching away from supporting 32-bit Dom0 operation, users
complained that attempts (perhaps due to lack of knowledge of that
change) to boot the no longer privileged kernel in Dom0 resulted in
apparently silent failure. To make the mismatch explicit and visible,
add feature flags that the kernel can set to indicate operation in
what modes it supports. For backward compatibility, absence of both
feature flags is taken to indicate a kernel that may be capable of
operating in both modes.
Signed-off-by: Jan Beulich <jbeulich@novell.com>
Diffstat (limited to 'tools/libxc/xc_dom_elfloader.c')
-rw-r--r-- | tools/libxc/xc_dom_elfloader.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/tools/libxc/xc_dom_elfloader.c b/tools/libxc/xc_dom_elfloader.c index 9114bfb333..3ddb1dfa28 100644 --- a/tools/libxc/xc_dom_elfloader.c +++ b/tools/libxc/xc_dom_elfloader.c @@ -286,6 +286,15 @@ static int xc_dom_parse_elf_kernel(struct xc_dom_image *dom) if ( (rc = elf_xen_parse(elf, &dom->parms)) != 0 ) return rc; + if ( elf_xen_feature_get(XENFEAT_privileged, dom->parms.f_required) || + (elf_xen_feature_get(XENFEAT_privileged, dom->parms.f_supported) && + !elf_xen_feature_get(XENFEAT_unprivileged, dom->parms.f_supported)) ) + { + xc_dom_panic(dom->xch, XC_INVALID_KERNEL, "%s: Kernel does not" + " support unprivileged (DomU) operation", __FUNCTION__); + return -EINVAL; + } + /* find kernel segment */ dom->kernel_seg.vstart = dom->parms.virt_kstart; dom->kernel_seg.vend = dom->parms.virt_kend; |