Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Juergen Gross <jgross@suse.com>
Reviewed-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Signed-off-by: Juergen Gross <jgross@suse.com>

+38 -1
+10 -1
Documentation/ABI/testing/sysfs-hypervisor-xen
··· 1 1 What: /sys/hypervisor/guest_type 2 - Date: May 2017 2 + Date: June 2017 3 3 KernelVersion: 4.13 4 4 Contact: xen-devel@lists.xenproject.org 5 5 Description: If running under Xen: ··· 32 32 Describes Xen PMU features (as an integer). A set bit indicates 33 33 that the corresponding feature is enabled. See 34 34 include/xen/interface/xenpmu.h for available features 35 + 36 + What: /sys/hypervisor/properties/buildid 37 + Date: June 2017 38 + KernelVersion: 4.13 39 + Contact: xen-devel@lists.xenproject.org 40 + Description: If running under Xen: 41 + Build id of the hypervisor, needed for hypervisor live patching. 42 + Might return "<denied>" in case of special security settings 43 + in the hypervisor.
+28
drivers/xen/sys-hypervisor.c
··· 356 356 357 357 HYPERVISOR_ATTR_RO(features); 358 358 359 + static ssize_t buildid_show(struct hyp_sysfs_attr *attr, char *buffer) 360 + { 361 + ssize_t ret; 362 + struct xen_build_id *buildid; 363 + 364 + ret = HYPERVISOR_xen_version(XENVER_build_id, NULL); 365 + if (ret < 0) { 366 + if (ret == -EPERM) 367 + ret = sprintf(buffer, "<denied>"); 368 + return ret; 369 + } 370 + 371 + buildid = kmalloc(sizeof(*buildid) + ret, GFP_KERNEL); 372 + if (!buildid) 373 + return -ENOMEM; 374 + 375 + buildid->len = ret; 376 + ret = HYPERVISOR_xen_version(XENVER_build_id, buildid); 377 + if (ret > 0) 378 + ret = sprintf(buffer, "%s", buildid->buf); 379 + kfree(buildid); 380 + 381 + return ret; 382 + } 383 + 384 + HYPERVISOR_ATTR_RO(buildid); 385 + 359 386 static struct attribute *xen_properties_attrs[] = { 360 387 &capabilities_attr.attr, 361 388 &changeset_attr.attr, 362 389 &virtual_start_attr.attr, 363 390 &pagesize_attr.attr, 364 391 &features_attr.attr, 392 + &buildid_attr.attr, 365 393 NULL 366 394 }; 367 395