generated from riscv/docs-spec-template
-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Introduce a Load Mutable permission (#212)
This permission exists in Morello and CHERIoT and is useful for sharing a recursively read-only version of a data structure: any capability loaded via an authority without Load Mutable permission will have the Write and Load Mutable permissions cleared. While it may look like this new feature limits forwarding of capability loads, the resulting transformation can be deferred until inspection and thus allows forwarding a single "must clear LM+W permission" bit. Compared to CHERIoT and Morello, the 32-bit encoding format introduces one additional restriction to allow for future extensibility: `ACPERM` clearing `LM` also clears the `W` permission. This restriction does not apply to the 64-bit encoding. Co-authored-by: Lawrence Esswood <lesswood@google.com> Co-authored-by: Andrés Amaya Garcia <andres.amaya@codasip.com>
- Loading branch information
1 parent
b95ab88
commit 476d0dd
Showing
9 changed files
with
69 additions
and
40 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
Resulting value of `cd`:: | ||
The tag value written to `cd` is 0 if the tag of the memory location loaded is | ||
0 or the authorizing capability (<<ddc>> or `cs1`) does not grant <<c_perm>>. | ||
+ | ||
If the authorizing capability does not grant <<lm_perm>>, and the tag of `cd` is 1 and `cd` is not sealed, then an implicit <<ACPERM>> clearing <<w_perm>> and <<lm_perm>> is performed to obtain the final permissions on `cd`. | ||
|
||
NOTE: Missing <<lm_perm>> does not affect untagged values since this could result in surprising bit patterns when copying non-capability data. | ||
Similarly, sealed capabilities are not modified as they are not directly dereferenceable. | ||
|
||
NOTE: While the implicit <<ACPERM>> introduces a dependency on the loaded data, microarchitectures can avoid this by deferring the actual masking of permissions until the loaded capability is dereferenced or the metadata bits are inspected using <<GCPERM>> or <<GCHI>>. |