lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <426367E2313C2449837CD2DE46E7EAF9236A8B9A@SN2PRD0310MB382.namprd03.prod.outlook.com>
Date:	Wed, 25 Jul 2012 14:18:03 +0000
From:	KY Srinivasan <kys@...rosoft.com>
To:	KY Srinivasan <kys@...rosoft.com>,
	"gregkh@...uxfoundation.org" <gregkh@...uxfoundation.org>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	"devel@...uxdriverproject.org" <devel@...uxdriverproject.org>,
	"virtualization@...ts.osdl.org" <virtualization@...ts.osdl.org>,
	"olaf@...fle.de" <olaf@...fle.de>,
	"apw@...onical.com" <apw@...onical.com>
Subject: RE: [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation

This is the patch I sent out yesterday for Linux to clean up the guest ID mess. For FreeBSD, you can use the following constant:

HV_FREEBSD_VENDOR_ID		0x8200

and use the function to generate the ID appropriately. Larry, I will forward you the proposal for guest ID in a separate email.

Regards.

K. Y

> -----Original Message-----
> From: K. Y. Srinivasan [mailto:kys@...rosoft.com]
> Sent: Tuesday, July 24, 2012 7:12 PM
> To: gregkh@...uxfoundation.org; linux-kernel@...r.kernel.org;
> devel@...uxdriverproject.org; virtualization@...ts.osdl.org; olaf@...fle.de;
> apw@...onical.com
> Cc: KY Srinivasan
> Subject: [PATCH 1/1] Drivers: hv: Cleanup the guest ID computation
> 
> The current guest ID string in use in vmbus driver does not conform
> to the MSFT guidelines on guest ID. MSFT currently does not specify
> Linux specific guidelines. MSFT however has plans to publish Linux
> specific guidelines. This implementation conforms to the yet unpublished
> Linux specific guidelines for guest ID. This implementation also broadly
> conforms to the current guidelines as well.
> 
> 
> Signed-off-by: K. Y. Srinivasan <kys@...rosoft.com>
> ---
>  drivers/hv/hv.c           |    9 +++++--
>  drivers/hv/hyperv_vmbus.h |   48
> +++++++++++++++++++++++++++++++++++++++++---
>  2 files changed, 50 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/hv/hv.c b/drivers/hv/hv.c
> index 86f8885..771e24f 100644
> --- a/drivers/hv/hv.c
> +++ b/drivers/hv/hv.c
> @@ -26,6 +26,7 @@
>  #include <linux/slab.h>
>  #include <linux/vmalloc.h>
>  #include <linux/hyperv.h>
> +#include <linux/version.h>
>  #include <asm/hyperv.h>
>  #include "hyperv_vmbus.h"
> 
> @@ -164,9 +165,11 @@ int hv_init(void)
> 
>  	max_leaf = query_hypervisor_info();
> 
> -	/* Write our OS info */
> -	wrmsrl(HV_X64_MSR_GUEST_OS_ID, HV_LINUX_GUEST_ID);
> -	hv_context.guestid = HV_LINUX_GUEST_ID;
> +	/*
> +	 * Write our OS ID.
> +	 */
> +	hv_context.guestid = generate_guest_id(0, LINUX_VERSION_CODE, 0);
> +	wrmsrl(HV_X64_MSR_GUEST_OS_ID, hv_context.guestid);
> 
>  	/* See if the hypercall page is already set */
>  	rdmsrl(HV_X64_MSR_HYPERCALL, hypercall_msr.as_uint64);
> diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
> index 0614ff3..108a441 100644
> --- a/drivers/hv/hyperv_vmbus.h
> +++ b/drivers/hv/hyperv_vmbus.h
> @@ -410,10 +410,50 @@ enum {
> 
>  #define HV_PRESENT_BIT			0x80000000
> 
> -#define HV_LINUX_GUEST_ID_LO		0x00000000
> -#define HV_LINUX_GUEST_ID_HI		2976579765
> -#define HV_LINUX_GUEST_ID		(((u64)HV_LINUX_GUEST_ID_HI << 32) |
> \
> -					   HV_LINUX_GUEST_ID_LO)
> +/*
> + * The guest OS needs to register the guest ID with the hypervisor.
> + * The guest ID is a 64 bit entity and the structure of this ID is
> + * specified in the Hyper-V specification:
> + *
> + * http://msdn.microsoft.com/en-us/library/windows/
> + * hardware/ff542653%28v=vs.85%29.aspx
> + *
> + * While the current guideline does not specify how Linux guest ID(s)
> + * need to be generated, our plan is to publish the guidelines for
> + * Linux and other guest operating systems that currently are hosted
> + * on Hyper-V. The implementation here conforms to this yet
> + * unpublished guidelines.
> + *
> + *
> + * Bit(s)
> + * 63 - Indicates if the OS is Open Source or not; 1 is Open Source
> + * 62:56 - Os Type; Linux is 0x100
> + * 55:48 - Distro specific identification
> + * 47:16 - Linux kernel version number
> + * 15:0  - Distro specific identification
> + *
> + *
> + */
> +
> +#define HV_LINUX_VENDOR_ID		0x8100
> +
> +/*
> + * Generate the guest ID based on the guideline described above.
> + */
> +
> +static inline  __u64 generate_guest_id(__u8 d_info1, __u32 kernel_version,
> +					__u16 d_info2)
> +{
> +	__u64 guest_id = 0;
> +
> +	guest_id = (((__u64)HV_LINUX_VENDOR_ID) << 48);
> +	guest_id |= (((__u64)(d_info1)) << 48);
> +	guest_id |= (((__u64)(kernel_version)) << 16);
> +	guest_id |= ((__u64)(d_info2));
> +
> +	return guest_id;
> +}
> +
> 
>  #define HV_CPU_POWER_MANAGEMENT		(1 << 0)
>  #define HV_RECOMMENDATIONS_MAX		4
> --
> 1.7.4.1
> 
> 
> 



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ