blob: 391b98d4b3eae9643933418842bf8a0f101e7549 [file] [log] [blame] [view] [edit]
# `stash`
Reviewed on: 2022-01-13
Stash exists to hold persistent mutable state for early boot system services
that are restricted from using general mutable storage (usually for security
reasons). Persisted state takes the form of a key/value store, which can be
accessed over FIDL.
Multiple instances of stash are provided, each serving a different
`fuchsia.stash` protocol. An instance of stash cannot securely identify the
clients connecting to it and therefore cannot guarantee isolation between those
clients. This means that the clients of each protocol must be carefully reviewed
to assess the impact of any compromise in one client on the other clients.
It is likely that stash will be deprecated and new clients are no longer being
accepted.
## Building
To add this project to your build, append `--with //src/sys/stash` to the
`fx set` invocation.
## Running
Stash provides the `fuchsia.stash.Store`, `fuchsia.stash.Store2`, and
`fuchsia.stash.SecureStore` services on Fuchsia, and there is a `stash_ctl`
command to demonstrate how to access these services.
```
$ fx shell run stash_ctl --help
```
## Testing
Unit tests for stash are available in the `stash-tests` package.
```
$ fx test stash-tests
```
## Source layout
The entrypoint is located in `src/main.rs`, the FIDL service implementation
exists in `src/instance.rs` and `src/accessor.rs`, and the logic for storing
bytes on disk is located in `src/store.rs`. Unit tests are co-located with the
implementation.