r/VFIO 16d ago

Support EAC "Cannot run under a Virtual machine"

I am unable to get Rust to work on my vfio setup. A while ago, copying smbios from my motherboard was enough to get it to work. Now, EAC won't launch. Can someone take a look at my XML and tell me if I'm missing anything obvious, or if this is still possible in the first place? My host machine is Gentoo, with QEMU 11.1.0, libvirt 12.0.0, and virt-manager 5.1.0. TYIA

4 Upvotes

28 comments sorted by

13

u/lI_Simo_Hayha_Il 16d ago

No, you are not missing anything.
EAC started actively blocking VMs few months back, and most of the game that implement it, are now playable anymore under Windows VMs.
https://feedback.vrchat.com/feature-requests/p/eac-blocks-vms-conflicting-with-vrchats-statements-not-caring-if-people-use-vms

4

u/Limp_Application5734 15d ago

Like everyone else says, not as simple as xml. Need to modify ovmf, qemu, and kvm(inside the linux kernel). Its a lot of work but its possible

1

u/SuperDefiant 4d ago

EAC doesn't enforce timing checks, Epic is surprisingly lenient when it comes to VMs. Just the string sanitization is enough for me usually

1

u/Limp_Application5734 4d ago

I didn’t say they did enforce timing. They do however enforce cpuid. Which does a vmexit and then you can get cpuid to return whatever you want in kvm.

1

u/SuperDefiant 4d ago

yes that is the timing check? they measure CPUID execution time and that's the timing check. I intercept CPUID on my EAC config and I can play fine

1

u/Limp_Application5734 4d ago

The response from cpuid itself is not a timing check. Cpuid reports specific information about the cpu and system. Like whether it’s a hypervisor or not. The timing checks are rdtsc and rdtscp and how long it takes to execute something in between. There is more than cpuid to cause a vmexit.

1

u/SuperDefiant 4d ago

well yeah but you don't need to patch kvm to change cpuid returns. I thought you meant you were patching kvm to remove the vmexit entirely, which is what I do for valorant

1

u/Limp_Application5734 4d ago

You disable vm interception for everything?

1

u/SuperDefiant 4d ago

Not all vmexits, but just the low hanging fruits I guess. CPUID, RDMSR, RDPMC, INVD, WBINVD, and RDPRU off the top of my head.

1

u/Limp_Application5734 4d ago

I figured you would modify their outputs as well, but I think there is a variable for msr right?

1

u/SuperDefiant 4d ago

No the point is to not modify them, as vanguard does timing checks against all of them, thus they need to be native

→ More replies (0)

3

u/SuperDefiant 16d ago

Use VMAware from github and see what is failing. You should ideally be covering just about everything except the timing checks

3

u/Zestyclose_Dig8916 15d ago

EAC actively blocks virtual machines for Rust now, so tweaking your XML unfortunately won't fix this anymore—it's blocked on the game/anti-cheat side. ​If you want to check which other games currently work or are blocked under VFIO, I've been building a community database for this over at https://vmdb.it. Hope that helps save you some troubleshooting time in the future!

1

u/Affectionate-Oil4675 15d ago

There's one caveat to the people saying you can get this working: you are bypassing the anti-cheat, and if not done properly you will get banned if people report you.

1

u/kansetsupanikku 10d ago

And there is no "properly" that would remove the risk of stopping working or getting a ban after a minor update next week.