Here's the patch.

-- 
You received this message because you are subscribed to the Google Groups 
"qubes-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to qubes-users+unsubscr...@googlegroups.com.
To post to this group, send email to qubes-users@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/qubes-users/5a936f01-adc6-4f25-af00-ebeed9a9bb7e%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/tools/firmware/hvmloader/hvmloader.c xen-4.6.1-new/tools/firmware/hvmloader/hvmloader.c
--- xen-4.6.1/tools/firmware/hvmloader/hvmloader.c	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/tools/firmware/hvmloader/hvmloader.c	2016-07-04 23:31:32.815000000 +0300
@@ -127,9 +127,11 @@
 
         if ( !strcmp("XenVMMXenVMM", signature) )
             break;
+        if ( !strcmp("ZenZenZenZen", signature) )
+            break;
     }
 
-    BUG_ON(strcmp("XenVMMXenVMM", signature) || ((eax - base) < 2));
+    BUG_ON( (strcmp("XenVMMXenVMM", signature) && strcmp("ZenZenZenZen", signature) ) || ((eax - base) < 2));
 
     /* Fill in hypercall transfer pages. */
     cpuid(base + 2, &eax, &ebx, &ecx, &edx);
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/tools/libxl/libxl_create.c xen-4.6.1-new/tools/libxl/libxl_create.c
--- xen-4.6.1/tools/libxl/libxl_create.c	2016-07-09 16:47:05.181000000 +0300
+++ xen-4.6.1-new/tools/libxl/libxl_create.c	2016-07-04 23:49:54.802000000 +0300
@@ -284,6 +284,8 @@
         libxl_defbool_setdefault(&b_info->u.hvm.acpi_s4,            true);
         libxl_defbool_setdefault(&b_info->u.hvm.nx,                 true);
         libxl_defbool_setdefault(&b_info->u.hvm.viridian,           false);
+        libxl_defbool_setdefault(&b_info->u.hvm.spoof_viridian,     false);
+        libxl_defbool_setdefault(&b_info->u.hvm.spoof_xen,          false);
         libxl_defbool_setdefault(&b_info->u.hvm.hpet,               true);
         libxl_defbool_setdefault(&b_info->u.hvm.vpt_align,          true);
         libxl_defbool_setdefault(&b_info->u.hvm.nested_hvm,         false);
@@ -1263,6 +1265,11 @@
         libxl__device_console_add(gc, domid, &console, state, &device);
         libxl__device_console_dispose(&console);
 
+        LOG(DEBUG, "wetware - checking spoofing for guest (domid %d): xen %d, vir %d", domid,
+    					 libxl_defbool_val(d_config->b_info.u.hvm.spoof_xen),
+    					 libxl_defbool_val(d_config->b_info.u.hvm.spoof_viridian)
+                         );
+
         dcs->dmss.dm.guest_domid = domid;
         if (libxl_defbool_val(d_config->b_info.device_model_stubdomain))
             libxl__spawn_stub_dm(egc, &dcs->dmss);
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/tools/libxl/libxl_dom.c xen-4.6.1-new/tools/libxl/libxl_dom.c
--- xen-4.6.1/tools/libxl/libxl_dom.c	2016-07-09 16:47:05.212000000 +0300
+++ xen-4.6.1-new/tools/libxl/libxl_dom.c	2016-07-04 23:31:32.819000000 +0300
@@ -287,6 +287,10 @@
                     libxl_defbool_val(info->u.hvm.nested_hvm));
     xc_hvm_param_set(handle, domid, HVM_PARAM_ALTP2M,
                     libxl_defbool_val(info->u.hvm.altp2m));
+    xc_hvm_param_set(handle, domid, HVM_PARAM_SPOOF_XEN,
+                    libxl_defbool_val(info->u.hvm.spoof_xen));
+    xc_hvm_param_set(handle, domid, HVM_PARAM_SPOOF_VIRIDIAN,
+                    libxl_defbool_val(info->u.hvm.spoof_viridian));
 }
 
 int libxl__build_pre(libxl__gc *gc, uint32_t domid,
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/tools/libxl/libxl_types.idl xen-4.6.1-new/tools/libxl/libxl_types.idl
--- xen-4.6.1/tools/libxl/libxl_types.idl	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/tools/libxl/libxl_types.idl	2016-07-09 16:31:16.181000000 +0300
@@ -468,6 +468,8 @@
                                        ("viridian",         libxl_defbool),
                                        ("viridian_enable",  libxl_bitmap),
                                        ("viridian_disable", libxl_bitmap),
+                                       ("spoof_viridian",   libxl_defbool),
+                                       ("spoof_xen",        libxl_defbool),
                                        ("timeoffset",       string),
                                        ("hpet",             libxl_defbool),
                                        ("vpt_align",        libxl_defbool),
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/tools/libxl/xl_cmdimpl.c xen-4.6.1-new/tools/libxl/xl_cmdimpl.c
--- xen-4.6.1/tools/libxl/xl_cmdimpl.c	2016-07-09 16:47:05.027000000 +0300
+++ xen-4.6.1-new/tools/libxl/xl_cmdimpl.c	2016-07-04 23:32:38.046000000 +0300
@@ -1507,6 +1507,10 @@
         xlu_cfg_get_defbool(config, "hpet", &b_info->u.hvm.hpet, 0);
         xlu_cfg_get_defbool(config, "vpt_align", &b_info->u.hvm.vpt_align, 0);
 
+        xlu_cfg_get_defbool(config, "spoof_xen", &b_info->u.hvm.spoof_xen, 0);
+        xlu_cfg_get_defbool(config, "spoof_viridian", &b_info->u.hvm.spoof_viridian, 0);
+
+
         switch (xlu_cfg_get_list(config, "viridian",
                                  &viridian, &num_viridian, 1))
         {
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/tools/misc/xen-detect.c xen-4.6.1-new/tools/misc/xen-detect.c
--- xen-4.6.1/tools/misc/xen-detect.c	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/tools/misc/xen-detect.c	2016-07-04 23:31:32.809000000 +0300
@@ -69,6 +69,8 @@
 
         if ( !strcmp("XenVMMXenVMM", signature) && (regs[0] >= (base + 2)) )
             goto found;
+        if ( !strcmp("ZenZenZenZen", signature) && (regs[0] >= (base + 2)) )
+            goto found;
     }
 
     return 0;
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/xen/arch/x86/hvm/hvm.c xen-4.6.1-new/xen/arch/x86/hvm/hvm.c
--- xen-4.6.1/xen/arch/x86/hvm/hvm.c	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/xen/arch/x86/hvm/hvm.c	2016-07-09 16:33:35.429000000 +0300
@@ -6047,6 +6050,14 @@
     case HVM_PARAM_IOREQ_SERVER_PFN:
         d->arch.hvm_domain.ioreq_gmfn.base = a.value;
         break;
+    case HVM_PARAM_SPOOF_XEN:
+        printk("wetware spoof_xen %" PRId64 " - curr dom %d, dom %d\n", a.value, curr_d->domain_id, d->domain_id);
+        d->arch.hvm_domain.spoof_xen = a.value;
+        break;
+    case HVM_PARAM_SPOOF_VIRIDIAN:
+        printk("wetware spoof_vir %" PRId64 " - curr dom %d, dom %d\n", a.value, curr_d->domain_id, d->domain_id);
+        d->arch.hvm_domain.spoof_viridian = a.value;
+        break;
     case HVM_PARAM_NR_IOREQ_SERVER_PAGES:
     {
         unsigned int i;
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/xen/arch/x86/hvm/viridian.c xen-4.6.1-new/xen/arch/x86/hvm/viridian.c
--- xen-4.6.1/xen/arch/x86/hvm/viridian.c	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/xen/arch/x86/hvm/viridian.c	2016-07-09 16:39:34.327000000 +0300
@@ -72,9 +72,16 @@
     {
     case 0:
         *eax = 0x40000006; /* Maximum leaf */
-        *ebx = 0x7263694d; /* Magic numbers  */
-        *ecx = 0x666F736F;
-        *edx = 0x76482074;
+        if (!d->arch.hvm_domain.spoof_viridian) {  // "Microsoft Hv"
+        	*ebx = 0x7263694d; // rciM
+        	*ecx = 0x666F736F; // foso
+        	*edx = 0x76482074; // vH t
+        } else {
+            printk("wetware cpuid_viridian_leaves spoof_vir\n"); // "Wetware Labs"
+        	*ebx = 0x77746557; // wteW
+        	*ecx = 0x20657261; //  era
+        	*edx = 0x7362614C; // sbaL
+        }
         break;
     case 1:
         *eax = 0x31237648; /* Version number */
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/xen/arch/x86/traps.c xen-4.6.1-new/xen/arch/x86/traps.c
--- xen-4.6.1/xen/arch/x86/traps.c	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/xen/arch/x86/traps.c	2016-07-04 23:31:32.653000000 +0300
@@ -779,9 +781,18 @@
     {
     case 0:
         *eax = base + limit; /* Largest leaf */
-        *ebx = XEN_CPUID_SIGNATURE_EBX;
-        *ecx = XEN_CPUID_SIGNATURE_ECX;
-        *edx = XEN_CPUID_SIGNATURE_EDX;
+        if (!currd->arch.hvm_domain.spoof_xen ) {
+            printk("wetware cpuid_hypervisor_leaves real id. domid %d\n",currd->domain_id);
+        	*ebx = XEN_CPUID_SIGNATURE_EBX;
+        	*ecx = XEN_CPUID_SIGNATURE_ECX;
+        	*edx = XEN_CPUID_SIGNATURE_EDX;
+        } else
+        {
+            printk("wetware cpuid_hypervisor_leaves spoofed id. domid %d\n",currd->domain_id);
+        	*ebx = ZEN_CPUID_SIGNATURE_EBX;
+        	*ecx = ZEN_CPUID_SIGNATURE_ECX;
+        	*edx = ZEN_CPUID_SIGNATURE_EDX;
+        }
         break;
 
     case 1:
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/xen/include/asm-x86/hvm/domain.h xen-4.6.1-new/xen/include/asm-x86/hvm/domain.h
--- xen-4.6.1/xen/include/asm-x86/hvm/domain.h	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/xen/include/asm-x86/hvm/domain.h	2016-07-04 23:31:32.667000000 +0300
@@ -130,6 +130,9 @@
     struct list_head       msixtbl_list;
     spinlock_t             msixtbl_list_lock;
 
+    bool_t                 spoof_xen;
+    bool_t                 spoof_viridian;
+
     struct viridian_domain viridian;
 
     bool_t                 hap_enabled;
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/xen/include/public/arch-x86/cpuid.h xen-4.6.1-new/xen/include/public/arch-x86/cpuid.h
--- xen-4.6.1/xen/include/public/arch-x86/cpuid.h	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/xen/include/public/arch-x86/cpuid.h	2016-07-09 16:45:16.126000000 +0300
@@ -53,6 +53,10 @@
 #define XEN_CPUID_SIGNATURE_ECX 0x65584d4d /* "MMXe" */
 #define XEN_CPUID_SIGNATURE_EDX 0x4d4d566e /* "nVMM" */
 
+#define ZEN_CPUID_SIGNATURE_EBX 0x5A6e655A /* "ZenZ" */
+#define ZEN_CPUID_SIGNATURE_ECX 0x655A6e65 /* "enZe" */
+#define ZEN_CPUID_SIGNATURE_EDX 0x6e655A6e /* "nZen" */
+
 /*
  * Leaf 2 (0x40000x01)
  * EAX[31:16]: Xen major version.
diff -ur -x .cproject -x .project -x '*.swp' xen-4.6.1/xen/include/public/hvm/params.h xen-4.6.1-new/xen/include/public/hvm/params.h
--- xen-4.6.1/xen/include/public/hvm/params.h	2016-02-09 16:44:19.000000000 +0200
+++ xen-4.6.1-new/xen/include/public/hvm/params.h	2016-07-04 23:31:32.672000000 +0300
@@ -192,6 +192,11 @@
 /* Boolean: Enable altp2m */
 #define HVM_PARAM_ALTP2M       35
 
-#define HVM_NR_PARAMS          36
+#define HVM_PARAM_SPOOF_XEN    36
+
+#define HVM_PARAM_SPOOF_VIRIDIAN    37
+
+#define HVM_NR_PARAMS          38
+
 
 #endif /* __XEN_PUBLIC_HVM_PARAMS_H__ */

Reply via email to