Source validation, translation blocking, P2P redirect, egress control for secure isolation
Access Control Services (ACS) is a set of security controls implemented in PCIe switches and Root Complexes to ensure that peer-to-peer (P2P) transactions are properly controlled, validated, and routed. ACS is essential for virtualization environments where device isolation is critical.
WITHOUT ACS:
┌──────────────────────────────────────────────────────┐
│ HOST SYSTEM │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ VM A │ │ VM B │ │
│ │ (Device A) │ │ (Device B) │ │
│ └──────────────┘ └──────────────┘ │
│ ▲ ▲ │
│ │ │ │
│ ┌───┴────────────────────┴───┐ │
│ │ PCIe Switch │ │
│ │ │ │
│ │ A ══════════════════► B │ ← P2P attack! │
│ │ (bypasses IOMMU) │ │
│ └────────────────────────────┘ │
│ │
│ Device A can directly access Device B's memory │
│ without going through the IOMMU for validation │
└──────────────────────────────────────────────────────┘
WITH ACS (P2P Redirect to IOMMU):
┌──────────────────────────────────────────────────────┐
│ HOST SYSTEM │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ VM A │ │ VM B │ │
│ │ (Device A) │ │ (Device B) │ │
│ └──────────────┘ └──────────────┘ │
│ ▲ ▲ │
│ │ │ │
│ ┌───┴────────────────────┴───┐ │
│ │ PCIe Switch │ │
│ │ (ACS) │ │
│ │ A ───► Redirect ───► RC │ │
│ └────────────┬───────────────┘ │
│ │ │
│ ▼ │
│ ┌─────────┐ │
│ │ IOMMU │ ← Validates/Blocks │
│ └─────────┘ │
└──────────────────────────────────────────────────────┘
| Control | Abbreviation | Function |
|---|---|---|
| ACS Source Validation | V | Validate TLP Requester ID against port |
| ACS Translation Blocking | B | Block transactions with AT field set |
| ACS P2P Request Redirect | R | Redirect P2P requests to RC |
| ACS P2P Completion Redirect | C | Redirect P2P completions to RC |
| ACS Upstream Forwarding | U | Forward all traffic upstream to RC |
| ACS P2P Egress Control | E | Block P2P based on egress control vector |
| ACS Direct Translated P2P | T | Allow P2P for translated transactions |
| ACS Enhanced Capability | - | Indicates enhanced ACS support |
Validates that the Requester ID in incoming TLPs matches what is expected for that port:
Blocks transactions that have the Address Type (AT) field set, indicating they carry translated addresses:
| AT Value | Meaning | Blocked? |
|---|---|---|
| 00b | Untranslated | No |
| 01b | Translation Request | No |
| 10b | Translated | Yes (if B enabled) |
| 11b | Reserved | Yes |
Redirects peer-to-peer Memory Requests upstream toward the Root Complex instead of forwarding directly to the peer device:
Redirects peer-to-peer Completions upstream toward the Root Complex:
Forces all egress traffic upstream, regardless of destination address:
Maximum security environments where no P2P communication is acceptable.
Fine-grained control over which peer ports can receive P2P traffic from this port:
| Offset | Register |
|---|---|
| 00h | Extended Capability Header (ID = 000Dh) |
| 04h | ACS Capability Register |
| 06h | ACS Control Register |
| 08h | Egress Control Vector (variable size) |