From 25b2dfa32a7f9a9ed024dfe41e1fa64dea78a3dd Mon Sep 17 00:00:00 2001 From: Shiva Tripathi Date: Mon, 24 Nov 2025 14:51:36 +0530 Subject: [PATCH] feat(security): add Security Overview page - create new Security_overview.rst as the landing page for security documentation - provide comprehensive security framework details and features overview - add references to Security_overview in platform TOC files (AM62X, AM62AX, AM62PX, AM62LX) - add cross-reference links in related security documentation Signed-off-by: Shiva Tripathi --- configs/AM62AX/AM62AX_linux_toc.txt | 1 + configs/AM62LX/AM62LX_linux_toc.txt | 1 + configs/AM62PX/AM62PX_linux_toc.txt | 1 + configs/AM62X/AM62X_linux_toc.txt | 1 + .../Kernel_Drivers/Crypto/SA2UL_OMAP.rst | 2 + .../System_Security/Security_overview.rst | 85 ++++++++++++++++++ .../images/security_framework.png | Bin 0 -> 39287 bytes .../linux/Foundational_Components_OPTEE.rst | 1 + .../Foundational_Components_Security.rst | 1 + 9 files changed, 93 insertions(+) create mode 100644 source/linux/Foundational_Components/System_Security/Security_overview.rst create mode 100644 source/linux/Foundational_Components/System_Security/images/security_framework.png diff --git a/configs/AM62AX/AM62AX_linux_toc.txt b/configs/AM62AX/AM62AX_linux_toc.txt index 3f046d774..1711340bc 100644 --- a/configs/AM62AX/AM62AX_linux_toc.txt +++ b/configs/AM62AX/AM62AX_linux_toc.txt @@ -93,6 +93,7 @@ linux/Foundational_Components/Power_Management/pm_wakeup_sources linux/Foundational_Components/Power_Management/pm_sw_arch linux/Foundational_Components/Power_Management/pm_debug +linux/Foundational_Components/System_Security/Security_overview linux/Foundational_Components/System_Security/SELinux linux/Foundational_Components/System_Security/Auth_boot diff --git a/configs/AM62LX/AM62LX_linux_toc.txt b/configs/AM62LX/AM62LX_linux_toc.txt index a1e6775c2..f0462587b 100644 --- a/configs/AM62LX/AM62LX_linux_toc.txt +++ b/configs/AM62LX/AM62LX_linux_toc.txt @@ -78,6 +78,7 @@ linux/Foundational_Components/Power_Management/pm_cpuidle linux/Foundational_Components/Power_Management/pm_am62lx_low_power_modes linux/Foundational_Components/Power_Management/pm_wakeup_sources +linux/Foundational_Components/System_Security/Security_overview #linux/Foundational_Components/System_Security/SELinux linux/Foundational_Components/System_Security/Auth_boot diff --git a/configs/AM62PX/AM62PX_linux_toc.txt b/configs/AM62PX/AM62PX_linux_toc.txt index 9a2523cb4..e875759b6 100644 --- a/configs/AM62PX/AM62PX_linux_toc.txt +++ b/configs/AM62PX/AM62PX_linux_toc.txt @@ -98,6 +98,7 @@ linux/Foundational_Components/Power_Management/pm_wakeup_sources linux/Foundational_Components/Power_Management/pm_sw_arch linux/Foundational_Components/Power_Management/pm_debug +linux/Foundational_Components/System_Security/Security_overview linux/Foundational_Components/System_Security/SELinux linux/Foundational_Components/System_Security/Auth_boot diff --git a/configs/AM62X/AM62X_linux_toc.txt b/configs/AM62X/AM62X_linux_toc.txt index 5bc0860c9..251919bbf 100644 --- a/configs/AM62X/AM62X_linux_toc.txt +++ b/configs/AM62X/AM62X_linux_toc.txt @@ -95,6 +95,7 @@ linux/Foundational_Components/Power_Management/pm_wakeup_sources linux/Foundational_Components/Power_Management/pm_sw_arch linux/Foundational_Components/Power_Management/pm_debug +linux/Foundational_Components/System_Security/Security_overview linux/Foundational_Components/System_Security/SELinux linux/Foundational_Components/System_Security/Auth_boot diff --git a/source/linux/Foundational_Components/Kernel/Kernel_Drivers/Crypto/SA2UL_OMAP.rst b/source/linux/Foundational_Components/Kernel/Kernel_Drivers/Crypto/SA2UL_OMAP.rst index 0f67d8998..8b4d31fbc 100644 --- a/source/linux/Foundational_Components/Kernel/Kernel_Drivers/Crypto/SA2UL_OMAP.rst +++ b/source/linux/Foundational_Components/Kernel/Kernel_Drivers/Crypto/SA2UL_OMAP.rst @@ -1,3 +1,5 @@ +.. _SAUL-Crypto-Accelerator: + ###### Crypto ###### diff --git a/source/linux/Foundational_Components/System_Security/Security_overview.rst b/source/linux/Foundational_Components/System_Security/Security_overview.rst new file mode 100644 index 000000000..3737e98ad --- /dev/null +++ b/source/linux/Foundational_Components/System_Security/Security_overview.rst @@ -0,0 +1,85 @@ +.. _Security_overview: + +######## +Overview +######## + +================= +Security Overview +================= + +The |__PART_FAMILY_DEVICE_NAMES__| SoC offers a comprehensive set of +security features that protect embedded Linux applications. This guide +offers a starting point to understand and implement these capabilities +as part of product development, with the following advantages: + +* **Hardware-backed security** - Leverages built-in security hardware + for robust protection +* **Defense in-depth** - Creates many layers of security to protect + against various threats +* **Industry standards compliance** - Implements security features that + help meet regulatory requirements +* **Flexible implementation** - Allows security features that can be + tailored to specific application needs + +================ +Security Domains +================ + +Below is an overview of the security framework's main domains: + +.. figure:: ./images/security_framework.png + +These security domains create a chain of trust protecting the +|__PART_FAMILY_DEVICE_NAMES__| SoC from boot through runtime and storage, +ensuring system integrity and data confidentiality. + +============================= +Security Features at a Glance +============================= + +The following table lists some of the key Security Features: + +.. ifconfig:: CONFIG_part_variant in ('AM62LX') + + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Security Feature** | **Description** | **Links** | + +=========================+===========================================================+======================================+ + | **Authenticated Boot** | Verifies each boot component to ensure only authorized | :ref:`auth_boot_guide` | + | | code executes on the device | | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Crypto Acceleration** | Hardware driver support for cryptographic algorithms | :ref:`DTHEv2-Crypto-Accelerator` | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Key Management** | Tools for secure key provisioning | :ref:`key-writer-lite-label` | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Secure Storage** | Protection mechanisms for sensitive data | :ref:`secure-storage-with-rpmb` | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Trusted Execution** | Implementation of secure monitor (EL3) firmware that | :ref:`foundational-components-atf` | + | | manages the secure boot process and TrustZone transitions | | + + +-----------------------------------------------------------+--------------------------------------+ + | | Trusted Execution Environment that enables isolated | :ref:`foundational-components-optee` | + | | execution of security-sensitive applications and services | | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + +.. ifconfig:: CONFIG_part_variant not in ('AM62LX') + + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | Security Feature | Description | Links | + +=========================+===========================================================+======================================+ + | **Authenticated Boot** | Verifies each boot component to ensure only authorized | :ref:`auth_boot_guide` | + | | code executes on the device | | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Crypto Acceleration** | Hardware driver support for cryptographic algorithms | :ref:`SAUL-Crypto-Accelerator` | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Secure Storage** | Protection mechanisms for sensitive data | :ref:`secure-storage-with-rpmb` | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **SELinux** | Kernel security module providing policy-based access | :ref:`selinux_guide` | + | | control for processes, files, and system objects | | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + | **Trusted Execution** | Implementation of secure monitor (EL3) firmware that | :ref:`foundational-components-atf` | + | | manages the secure boot process and TrustZone transitions | | + + +-----------------------------------------------------------+--------------------------------------+ + | | Trusted Execution Environment that enables isolated | :ref:`foundational-components-optee` | + | | execution of security-sensitive applications and services | | + +-------------------------+-----------------------------------------------------------+--------------------------------------+ + diff --git a/source/linux/Foundational_Components/System_Security/images/security_framework.png b/source/linux/Foundational_Components/System_Security/images/security_framework.png new file mode 100644 index 0000000000000000000000000000000000000000..e2192bffbf4d15256da2170952a3f9924c480ed1 GIT binary patch literal 39287 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 yoRE^za&E4*^46%e