Skip to content
DenseChip
Learn
PracticeCode labInterview

DenseChip

Navigate

Menu

LearnPracticeCode labInterview

Tools

All toolsSV editorCode repoResume
DenseChip

Practice, courses, and chip-design tools in one focused workspace.

LearnPracticeCode labInterviewToolsLearning paths

© 2026 DenseChip

AboutContactPrivacyTerms
Skip to lesson

Course contents

  • How to Use This Course
  • Reading Paths
  • Concept Map
  • How to Read the Diagrams
  • Part 0: What Is a Protocol?10
  • Part 1: Timing and Clocking11
  • Part 2: Encoding and Framing12
  • Part 3: Handshakes13
  • Part 4: Flow Control17
  • Part 5: Transactions19
  • Part 6: Concurrency and Performance17
  • Part 7: Ordering13
  • Part 8: Sharing and Arbitration12
  • Part 9: Deadlock and Liveness13
  • Part 10: Reliability and Recovery20
  • Part 11: Bring-Up and Link Management10
  • Part 12: Power8
  • Part 13: Shared State and Coherence9
  • Part 14: Security and Isolation7
    • Access Attributes
    • Firewalls and Filtering
    • Address Translation for Devices
    • Link Integrity and Encryption
    • Fabric Denial of Service
    • Isolation and Multi-Tenancy
    • Drills: Security and Isolation
  • Part 15: Specifying and Verifying11
  • Part 16: Protocols Dissected17
  • Part 17: Capstones5
  • Part 18: Interview Preparation6
Loading lesson

‹Part 14: Security and Isolation
  1. Topics
  2. First Principles of Hardware Protocols
  3. Part 14: Security and Isolation
  4. Access Attributes

Part 14 · Security and Isolation · Working (W)

Access Attributes

A target cannot decide whether to allow a request unless the request says who sent it and with what rights. Security state, privilege, requester identity and address space: the attributes a transaction carries, who may set them, and why they must never be forgeable.

On this page

    Note

    Level: Working (W) · Answers: Who is allowed to ask?

    Before this: The Request/Response Model

    A chip holds the keys for its secure boot in a small block of memory. Ordinary software must never read them. The memory controller receives a read for that address. The read looks exactly like every other read: an address, a length, a request to return data. If that is all the request carries, the controller has nothing to decide with. It must answer, and the keys leak.

    What must a request carry so that the target can decide whether to serve it?

    The obvious answer, and why it breaks

    The obvious answer is to protect memory in software: the operating system's page tables keep programs away from the keys. That protects only accesses that go through those page tables. A DMA engine, a debug port, a misconfigured accelerator or compromised privileged software can all issue requests directly onto the fabric. The fabric itself must know who is asking, and the only way to know is for every request to carry it.

    The idea: attributes travel with every request

    Attribute

    Says

    Example

    Security state

    Secure or non-secure world

    AXI AxPROT[1] (non-secure bit)

    Privilege

    Privileged (operating system) or unprivileged (application)

    AXI AxPROT[0]

    Requester identity

    Which agent issued it

    AXI ID or master ID; PCIe Requester ID (bus, device, function)

    Address space

    Which process or virtual machine's addresses these are

    PCIe PASID; SMMU stream and substream IDs

    Access type

    Read, write, instruction fetch

    AXI AxPROT[2] (instruction)

    The CPU sets the security and privilege bits from the state it is really running in; the interconnect must not let anyone change them; the checker in front of memory decides.

    The rule that makes attributes mean anything

    • Set by hardware from true state: a processor's security bit comes from the security state it is executing in, not from software's choice. A requester that could set its own attributes could claim anything.

    • Carried unchanged: interconnects and bridges must preserve attributes. A bridge to a protocol without a security bit must map requests to a defined, conservative state (typically non-secure), never drop the distinction silently.

    • Assigned for agents that cannot be trusted: a DMA engine or a PCIe device gets its attributes and identity from the fabric port it is attached to, or from a translation unit (lesson 14.3), not from itself.

    • Checked at, or in front of, the target: by a firewall (lesson 14.2), a translation unit, or the target itself.

    How real protocols chose

    Protocol

    Attributes

    AMBA AXI

    AxPROT: privileged, non-secure, instruction; AxID identifies the transaction source; TrustZone security rests on the non-secure bit (facts A23, A27).

    PCI Express

    Requester ID (bus, device, function) in every request; PASID for the address space; virtual functions give each virtual machine its own ID (fact P35).

    Simple peripheral buses

    Often none: protection must be added in front of them

    What breaks

    A chip (illustrative) connected a legacy DMA controller through a bridge that had no security signal. The bridge drove the non-secure bit as 0, secure, for all its traffic, because "the DMA is ours". Any software that could program the DMA controller could then read secure memory. Driving the bit as non-secure, and giving the controller a separate secure channel that only secure software could program, closed the hole.

    Why this matters

    Senior lens. Trace every attribute from where it is set to where it is checked, for every requester, including debug, DMA and bridges. Ask at each hop: could the requester have chosen this value? Could this hop change or lose it? Most fabric security holes are an attribute set by something that should not have been trusted, or dropped by a bridge that did not carry it.

    Interview

    Asked: "How does a memory controller know whether a request is secure?"

    Weak answer: The software tells it.

    Strong answer: The request carries an attribute that says so, in AXI the non-secure bit in AxPROT, set by hardware from the true security state of the requester, not chosen by software. The interconnect carries it unchanged, and a checker in front of memory, such as a TrustZone address space controller, compares it with the region's rules. For requesters that can't be trusted to set attributes, like DMA engines or PCIe devices, the fabric port or an IOMMU assigns the identity and attributes instead.

    Follow-ups: (1) What should a bridge to a bus without a security bit do? (2) Who sets a DMA engine's attributes?

    Check yourself Why must a processor's security bit come from hardware state rather than software?

    If software could choose it, non-secure software could simply mark its requests secure.

    Check yourself A bridge connects to a protocol with no security bit. What should it drive?

    A defined, conservative value, normally non-secure, so the distinction is never silently upgraded.

    Key takeaways

    • Every request must carry who sent it and with what rights: security state, privilege, identity, address space.

    • Attributes are set by hardware from true state, carried unchanged, and checked at or in front of the target.

    • Untrusted requesters get their attributes assigned by the fabric; bridges must not drop them.

    Keep going

    Next: Lesson 14.2, Firewalls and Filtering. Checking those attributes against address regions, built and simulated.

    Related topics

    • Part 14 overview: Security and Isolation

    Previous

    189 / 234

    Next: Firewalls and Filtering

    Up next

    Up nextFirewalls and Filtering

    Sign in to save progress

    Practice this lessonReport an error

    See also

    • Address Translation for Devices
    • Link Integrity and Encryption
    • Fabric Denial of Service