Merge branch 'rdtsc-spoof' into develop
This commit is contained in:
		
						commit
						2fc0c38547
					
				
							
								
								
									
										51
									
								
								patches/kernel/9999-rdtsc-spoof-hook.patch
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								patches/kernel/9999-rdtsc-spoof-hook.patch
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
			
		||||
diff -Naur --no-dereference a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
 | 
			
		||||
--- a/arch/x86/kvm/vmx/vmx.c     2024-07-01 21:03:34.000000000 +0300
 | 
			
		||||
+++ b/arch/x86/kvm/vmx/vmx.c     2024-07-01 20:24:05.000000000 +0300
 | 
			
		||||
@@ -6137,6 +6137,10 @@
 | 
			
		||||
 	[EXIT_REASON_ENCLS]		      = handle_encls,
 | 
			
		||||
 	[EXIT_REASON_BUS_LOCK]                = handle_bus_lock_vmexit,
 | 
			
		||||
 	[EXIT_REASON_NOTIFY]		      = handle_notify,
 | 
			
		||||
+	[EXIT_REASON_RDTSC]                        = handle_rdtsc,
 | 
			
		||||
+	[EXIT_REASON_RDTSCP]               = handle_rdtscp,
 | 
			
		||||
+	[EXIT_REASON_UMWAIT]                  = handle_umwait,
 | 
			
		||||
+	[EXIT_REASON_TPAUSE]                  = handle_tpause,
 | 
			
		||||
 };
 | 
			
		||||
 
 | 
			
		||||
 static const int kvm_vmx_max_exit_handlers =
 | 
			
		||||
@@ -6079,6 +6079,36 @@
 | 
			
		||||
 	return 1;
 | 
			
		||||
 }
 | 
			
		||||
 
 | 
			
		||||
+static int handle_rdtsc(struct kvm_vcpu *vcpu)
 | 
			
		||||
+{
 | 
			
		||||
+	u64 _rdtsc = rdtsc();
 | 
			
		||||
+	printk_once("[HookEntry] hook entry function handle_rdtsc is working, return the rdtsc() if no hook , you can hook here!\n");
 | 
			
		||||
+	vcpu->arch.regs[VCPU_REGS_RAX] = _rdtsc & -1u;
 | 
			
		||||
+	vcpu->arch.regs[VCPU_REGS_RDX] = (_rdtsc >> 32) & -1u;
 | 
			
		||||
+	return kvm_skip_emulated_instruction(vcpu);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static int handle_rdtscp(struct kvm_vcpu *vcpu)
 | 
			
		||||
+{
 | 
			
		||||
+	u64 _rdtsc = rdtsc();
 | 
			
		||||
+	printk_once("[HookEntry] hook entry function handle_rdtscp is working, return the rdtsc() if no hook , you can hook here!\n");
 | 
			
		||||
+	vcpu->arch.regs[VCPU_REGS_RAX] = _rdtsc & -1u;
 | 
			
		||||
+	vcpu->arch.regs[VCPU_REGS_RDX] = (_rdtsc >> 32) & -1u;
 | 
			
		||||
+	return kvm_skip_emulated_instruction(vcpu);
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static int handle_umwait(struct kvm_vcpu *vcpu)
 | 
			
		||||
+{
 | 
			
		||||
+	kvm_skip_emulated_instruction(vcpu);
 | 
			
		||||
+	return 1;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
+static int handle_tpause(struct kvm_vcpu *vcpu)
 | 
			
		||||
+{
 | 
			
		||||
+	kvm_skip_emulated_instruction(vcpu);
 | 
			
		||||
+	return 1;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 /*
 | 
			
		||||
  * The exit handlers return 1 if the exit was handled fully and guest execution
 | 
			
		||||
  * may resume.  Otherwise they set the kvm_run parameter to indicate what needs
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user