A Practical Performance Degradation Attack on NVIDIA vGPU via Preemption Manipulation
NVIDIA GPU virtualization technology (vGPU) enables multiple virtual machines (VMs) to share a single physical GPU and is widely adopted by major cloud providers. However, sharing a GPU introduces the risk of performance interference between co-located VMs. To mitigate this, NVIDIA provides three scheduling policies that govern how GPU time is allocated among VMs and provide Quality of Service (QoS) guarantees for each VM.
In this paper, we show that these guarantees can be fundamentally violated. Specifically, we reverse engineer the preemption mechanism on NVIDIA GPUs and uncover a severe vulnerability in it: a VM can directly modify the routine that handles preemption to extend the preemption duration and reduce the effective GPU time available to co-located VMs. Exploiting this vulnerability, we develop a performance degradation attack in which an attacker VM can significantly slow down a co-located victim VM. We show that in vGPU environments with T4 and A10 GPUs, our attack achieves degradations of up to 1894.9ร and 429.3ร under the default scheduling policy, and 41.1ร and 6.2ร under policies with stronger QoS guarantees. We also evaluate our attack on several public cloud platforms such as Alibaba Cloud and Azure. The results show that our attack is effective on all the tested cloud platforms.
NVIDIA vGPU lets multiple virtual machines share one physical GPU, and cloud providers rely on its scheduler to keep tenants isolated and bill them fairly by GPU time. Trapped Handler breaks that guarantee.
We reverse-engineered the GPU preemption mechanism โ the routine the scheduler runs at the end of every time slice to switch execution from one VM to another. At the heart of it is a trap handler that lives in GPU memory. We discovered that on NVIDIA GPUs, this handler sits on a writable page in the context's own address space, so an unprivileged GPU program can simply overwrite it.
By inserting a spinning loop into its own trap handler, an attacker VM refuses to yield the GPU when preempted. The GPU's timeout-based fallback lets the trapped context hog the GPU for roughly 4 secondsbefore it is terminated โ an eternity next to the ~2 ms time slice. Repeat it, and the attacker starves every co-located victim of GPU time. The result is a cross-VM performance-degradation (denial-of-service) attack that works even under NVIDIA's strongest QoS scheduling policies.
The vulnerability chains together three facts we uncovered about NVIDIA GPUs:
When a context is preempted, the GPU invokes a ~111-instruction trap handler ending in the undocumented EXIT.PREEMPTED.NO_ATEXIT instruction. It preserves state, computes save locations, dispatches subroutines, and completes the context switch. (Takeaway 1)
Each context has its own trap handler mapped into its virtual address space โ on a page that, like all GPU pages in practice, is writable. A normal GPU program can modify it with ordinary memory writes and no error is raised. (Takeaway 2)
If the handler never completes (e.g. we branch it into an infinite loop), the GPU does not switch away instantly. It waits ~4000 ms before terminating the stuck context with an unspecified launch error โ during which co-located VMs get no GPU time. (Takeaway 3)
We measured slowdown of a victim VM running real Blender, CNN-inference, and LLM-inference workloads while a single co-located attacker VM ran Trapped Handler.
| Scheduling policy | What it promises | Victim slowdown (T4) |
|---|---|---|
| Best Effort (default) | No isolation guarantee | up to 1894.9ร |
| Equal Share | Equal GPU time per VM | 41.1ร |
| Fixed Share | Strongest isolation | 6.2ร โ 38.9ร |
On A10 GPUs the Best Effort slowdown reaches 429.3ร. Even the policies specifically designed to guarantee per-VM isolation are violated by an order of magnitude or more.
We rented vGPU instances and ran the attack end-to-end (occupying the whole physical GPU so no third party was affected):
| Provider | Instance / GPU | Policy | Avg. degradation |
|---|---|---|---|
| Alibaba Cloud | T4-4Q ยท A10-8Q | Fixed Share | 111.3ร (T4), 6.4ร (A10) |
| Azure | A10-8Q | Fixed Share | 4.0ร |
| Vultr | A40-4Q | Best Effort | up to 436.4ร |
Cloud providers pack multiple tenants' VMs onto one physical GPU and bill by usage time. The vGPU scheduler is what keeps those tenants from interfering with one another and enforces the Quality-of-Service (QoS) each customer pays for. If one tenant can seize the GPU at will, co-located customers get degraded performance, missed service-level agreements, and inflated bills โ a direct financial and availability impact.
It's a routine in GPU memory that the hardware invokes on certain system-level events. We found that preemption โ swapping the running context out at the end of a time slice โ invokes a specific handler that ends in the EXIT.PREEMPTED.NO_ATEXIT instruction. Because we could stall that handler and directly observe the effect on a co-located program, we confirmed it runs on every preemption.
It stems from the design of the preemption mechanism itself. Two design decisions combine to make it exploitable: (1) each context's trap handler lives on a page that is writable by unprivileged GPU code, and (2) preemption falls back to a coarse ~4-second timeout rather than forcibly reclaiming the GPU. Neither is documented, and both are baked into how NVIDIA GPUs handle preemption today.
No. The attacker only needs to run ordinary GPU code inside their own VM โ exactly what a paying cloud tenant is entitled to do. Modifying the trap handler uses regular memory writes; no kernel access, no hypervisor escape, no privileged instructions.
No โ this is a performance-degradation / denial-of-service attack, not a data-leakage or memory-corruption attack. The attacker cannot see the victim's GPU memory; it can only starve the victim of GPU time and thereby slow it down dramatically or violate its QoS guarantees.
We confirmed the attack on NVIDIA T4, A10, and L4 vGPUs, and on A40 in the wild. It succeeds on Alibaba Cloud, Microsoft Azure, and Vultr, and remains effective across vGPU software versions 18.5โ18.6 and 19.0โ19.4. Because every vGPU deployment relies on the same proprietary scheduler, the underlying weakness is not specific to one provider.
Not fully. Equal Share and Fixed Share are marketed as providing strong per-VM performance isolation, and they do resist the naive version of the attack because the scheduler compensates VMs that overuse the GPU. But the scheduler does not compensate GPU time lost when a context is terminated by the preemption timeout. Our adapted attack deliberately triggers that timeout on every run, bypassing compensation and still degrading victims by 6.2รโ41.1ร.
The most fundamental fix is to make the trap-handler page read-only. NVIDIA page tables already have a read-only bit per page (unused in practice); the vGPU manager should set it for the trap handler so unprivileged code cannot modify it. Cloud providers using Equal Share or Fixed Share can also detect the attack, since the attacker VM consumes visibly more GPU time (via nvidia-smi vgpu -sl) โ though this signal is unavailable under the default Best Effort policy.
Yes. We disclosed our findings to NVIDIA, Alibaba, Azure, and Microsoft in April 2026. For all cloud evaluations we occupied the entire physical GPU ourselves, so no third-party tenants were affected by our experiments.
@inproceedings{trappedhandler2026,
title = {Trapped Handler: A Practical Performance Degradation
Attack on NVIDIA vGPU via Preemption Manipulation},
author = {Gu, Cheng and Moradihaghighi, Fatemeh and Genkin, Daniel
and Li, Zhuo and Li, Mengyuan and Zhang, Zhenkai
and Guo, Yanan},
booktitle = {Proceedings of the 2026 ACM SIGSAC Conference on Computer
and Communications Security (CCS '26)},
year = {2026},
address = {The Hague, Netherlands},
publisher = {ACM},
doi = {10.1145/3830454.3846621},
isbn = {979-8-4007-2871-6/2026/11},
}