Commit 84b76257 authored by Juergen Gross's avatar Juergen Gross
Browse files

xen: add sysfs node for hypervisor build id



For support of Xen hypervisor live patching the hypervisor build id is
needed. Add a node /sys/hypervisor/properties/buildid containing the
information.

Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
parent a714c286
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
What:		/sys/hypervisor/guest_type
Date:		May 2017
Date:		June 2017
KernelVersion:	4.13
Contact:	xen-devel@lists.xenproject.org
Description:	If running under Xen:
@@ -32,3 +32,12 @@ Description: If running under Xen:
		Describes Xen PMU features (as an integer). A set bit indicates
		that the corresponding feature is enabled. See
		include/xen/interface/xenpmu.h for available features

What:		/sys/hypervisor/properties/buildid
Date:		June 2017
KernelVersion:	4.13
Contact:	xen-devel@lists.xenproject.org
Description:	If running under Xen:
		Build id of the hypervisor, needed for hypervisor live patching.
		Might return "<denied>" in case of special security settings
		in the hypervisor.
+28 −0
Original line number Diff line number Diff line
@@ -356,12 +356,40 @@ static ssize_t features_show(struct hyp_sysfs_attr *attr, char *buffer)

HYPERVISOR_ATTR_RO(features);

static ssize_t buildid_show(struct hyp_sysfs_attr *attr, char *buffer)
{
	ssize_t ret;
	struct xen_build_id *buildid;

	ret = HYPERVISOR_xen_version(XENVER_build_id, NULL);
	if (ret < 0) {
		if (ret == -EPERM)
			ret = sprintf(buffer, "<denied>");
		return ret;
	}

	buildid = kmalloc(sizeof(*buildid) + ret, GFP_KERNEL);
	if (!buildid)
		return -ENOMEM;

	buildid->len = ret;
	ret = HYPERVISOR_xen_version(XENVER_build_id, buildid);
	if (ret > 0)
		ret = sprintf(buffer, "%s", buildid->buf);
	kfree(buildid);

	return ret;
}

HYPERVISOR_ATTR_RO(buildid);

static struct attribute *xen_properties_attrs[] = {
	&capabilities_attr.attr,
	&changeset_attr.attr,
	&virtual_start_attr.attr,
	&pagesize_attr.attr,
	&features_attr.attr,
	&buildid_attr.attr,
	NULL
};