| .. _userspace_protected_memory: |
| |
| Userspace Protected Memory |
| ########################## |
| |
| Overview |
| ******** |
| This sample is an example of running multiple threads assigned |
| unique memory domains with protected partitions. The |
| application uses memory partitioning with a sample algorithm |
| simulating an enigma-like machine, but the implementation of the |
| machine has not been validated and should not be used for any |
| actual security purposes. |
| |
| Requirements |
| ************ |
| |
| The sample is dependent on the subsystem app_memory, and it will |
| not run on boards that do not support the subsystem. The sample |
| was tested on the following boards qemu_x86,frdm_k64, an 96b_carbon. |
| |
| Building and Running |
| ******************** |
| |
| This example will only cover the qemu_x86 board, since the sample |
| just prints text to a console. |
| |
| .. zephyr-app-commands:: |
| :zephyr-app: samples/userspace/shared_mem |
| :board: qemu_x86 |
| :goals: build run |
| :compact: |
| |
| After starting, the console will display multiple starting messages |
| followed by two series of repeating messages. The repeating messages |
| are the input and output of the enigma-like machine. The second |
| message is the output of the first message, and the resulting |
| output is the first message without spaces. The two messages are |
| marked as 1 and 1' respectively. |
| |
| Exit QEMU by pressing :kbd:`CTRL+A` :kbd:`x`. |
| |
| Two definitions can be inserted to change the wheel settings and print |
| the state information. To enable the definitions uncomment the last |
| two lines in CMakeLists.txt. |
| |
| Functionality |
| ************* |
| The PT thread sends a message followed by the encrypted version of the |
| message after sleeping. To send the message the PT thread checks a |
| flag, and if it is clear, writes the message to a buffer shared with |
| the encrypt thread. After writing the buffer, the flag is set. The |
| encrypt thread copies the memory from the common buffer into the |
| encrypted thread's private memory when the flag is set and then clears |
| the flag. Once the encrypted thread receives the text string, it |
| performs a simulation of the enigma machine to produce cypher text(CT). |
| The CT is copied to a shared memory partition connecting to the third |
| thread. The third thread prints the CT to the console with a banner |
| denoting the content as CYPHER TEXT. |