xen: provide version information in hypfs

Provide version and compile information in /buildinfo/ node of the
Xen hypervisor file system. As this information is accessible by dom0
only no additional security problem arises.

Signed-off-by: Juergen Gross <jgross@suse.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Juergen Gross authored and Jan Beulich committed 2020-05-29 12:14:51 +02:00
1 parent 048f82ccd1
commit b5d4711d2b
2 files changed
+92

No files matched your search

+45
View File
@@ -105,3 +105,48 @@ A populated Xen hypervisor file system might look like the following example:
#### /
The root of the hypervisor file system.
#### /buildinfo/
A directory containing static information generated while building the
hypervisor.
#### /buildinfo/changeset = STRING
Git commit of the hypervisor.
#### /buildinfo/compileinfo/
A directory containing information about compilation of Xen.
#### /buildinfo/compileinfo/compile_by = STRING
Information who compiled the hypervisor.
#### /buildinfo/compileinfo/compile_date = STRING
Date of the hypervisor compilation.
#### /buildinfo/compileinfo/compile_domain = STRING
Information about the compile domain.
#### /buildinfo/compileinfo/compiler = STRING
The compiler used to build Xen.
#### /buildinfo/version/
A directory containing version information of the hypervisor.
#### /buildinfo/version/extra = STRING
Extra version information.
#### /buildinfo/version/major = INTEGER
The major version of Xen.
#### /buildinfo/version/minor = INTEGER
The minor version of Xen.
+47
View File
@@ -13,6 +13,7 @@
#include <xen/paging.h>
#include <xen/guest_access.h>
#include <xen/hypercall.h>
#include <xen/hypfs.h>
#include <xsm/xsm.h>
#include <asm/current.h>
#include <public/version.h>
@@ -373,6 +374,52 @@ void __init do_initcalls(void)
(*call)();
}
#ifdef CONFIG_HYPFS
static unsigned int __read_mostly major_version;
static unsigned int __read_mostly minor_version;
static HYPFS_DIR_INIT(buildinfo, "buildinfo");
static HYPFS_DIR_INIT(compileinfo, "compileinfo");
static HYPFS_DIR_INIT(version, "version");
static HYPFS_UINT_INIT(major, "major", major_version);
static HYPFS_UINT_INIT(minor, "minor", minor_version);
static HYPFS_STRING_INIT(changeset, "changeset");
static HYPFS_STRING_INIT(compiler, "compiler");
static HYPFS_STRING_INIT(compile_by, "compile_by");
static HYPFS_STRING_INIT(compile_date, "compile_date");
static HYPFS_STRING_INIT(compile_domain, "compile_domain");
static HYPFS_STRING_INIT(extra, "extra");
static int __init buildinfo_init(void)
{
hypfs_add_dir(&hypfs_root, &buildinfo, true);
hypfs_string_set_reference(&changeset, xen_changeset());
hypfs_add_leaf(&buildinfo, &changeset, true);
hypfs_add_dir(&buildinfo, &compileinfo, true);
hypfs_string_set_reference(&compiler, xen_compiler());
hypfs_string_set_reference(&compile_by, xen_compile_by());
hypfs_string_set_reference(&compile_date, xen_compile_date());
hypfs_string_set_reference(&compile_domain, xen_compile_domain());
hypfs_add_leaf(&compileinfo, &compiler, true);
hypfs_add_leaf(&compileinfo, &compile_by, true);
hypfs_add_leaf(&compileinfo, &compile_date, true);
hypfs_add_leaf(&compileinfo, &compile_domain, true);
major_version = xen_major_version();
minor_version = xen_minor_version();
hypfs_add_dir(&buildinfo, &version, true);
hypfs_string_set_reference(&extra, xen_extra_version());
hypfs_add_leaf(&version, &extra, true);
hypfs_add_leaf(&version, &major, true);
hypfs_add_leaf(&version, &minor, true);
return 0;
}
__initcall(buildinfo_init);
#endif
# define DO(fn) long do_##fn
#endif
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.