oobe_config: More README.md

Rollback overview with links to the relevant code.

BUG=b:217520686
TEST=None

Change-Id: Ic26f084f8c6e3dbfc7d1489bb9af29886466a1ec
Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/3464134
Reviewed-by: Roland Bock <rbock@google.com>
Reviewed-by: Amr Aboelkher <amraboelkher@google.com>
Commit-Queue: Amr Aboelkher <amraboelkher@google.com>
Commit-Queue: Miriam Polzer <mpolzer@google.com>
Tested-by: Miriam Polzer <mpolzer@google.com>
diff --git a/oobe_config/README.md b/oobe_config/README.md
index 3904c65..a6f6f68 100644
--- a/oobe_config/README.md
+++ b/oobe_config/README.md
@@ -1,9 +1,78 @@
 # OOBE Config Save and Restore Utilities
 
-Provides utility executables to save and restore system state that can
-be applied during OOBE.
+Provides utility executables to save and restore system state that can be
+applied during OOBE.
 
-## Testing Data Save and Restore
+Currently only used by the enterprise rollback feature, which is described
+below.
+
+## Enterprise Rollback
+
+Enterprise Rollback is a feature that allows device admins to roll back devices
+to a previous version. Device-wide network configs and state of oobe are
+preserved.
+
+### Rollback Overview
+
+- Admin pins to a certain device version and allows rollback
+- On the next update check, the device sends the [rollback_allowed](https://source.chromium.org/chromium/aosp/platform/system/update_engine/+/HEAD:cros/omaha_request_builder_xml.cc;l=159;drc=bed15aeab709496288faa6ab288b7d0e6cde0630)
+flag to Omaha
+- If there's a rollback image available for the pinned version, it will be
+downloaded and installed
+- Once the update is ready, update_engine leaves the flag
+[/mnt/stateful_partition/.save_rollback_data](https://source.chromium.org/chromium/aosp/platform/system/update_engine/+/HEAD:cros/hardware_chromeos.cc;l=262;drc=bed15aeab709496288faa6ab288b7d0e6cde0630)
+and marks the device to be powerwashed
+- The device will boot into the rollback image on the next reboot
+
+
+- [oobe_config_save](http://cs/chromeos_public/src/platform2/oobe_config/etc/init/oobe_config_save.conf)
+is triggered during shutdown. Because the `.save_rollback_data` flag is present
+it will:
+	- Collect information for
+	[rollback_data.proto](https://source.chromium.org/chromium/chromiumos/platform2/+/HEAD:oobe_config/rollback_data.proto)
+	by connecting to Chrome via mojo
+	- Serialize and encrypt data with
+	[openssl](https://source.chromium.org/chromium/chromiumos/platform2/+/HEAD:oobe_config/rollback_openssl_encryption.h)
+	- The encryption key is randomly created by software
+	- Encrypted data is put into
+	`/mnt/stateful_partition/unencrypted/preserve/rollback_data`
+	- The key stays in `/var/lib/oobe_config_save/data_for_pstore`
+
+
+- Upon booting into the rollback image, the device
+[powerwashes](https://source.chromium.org/chromium/chromiumos/platform2/+/HEAD:init/clobber_state.cc)
+	- `/var/lib/oobe_config_save/data_for_pstore` is moved into pstore
+	`/dev/pmsg0`
+	- `/mnt/stateful_partition/unencrypted/preserve/rollback_data` is
+	preserved by moving to `/tmp` during wiping and then moving back
+	- Once the device is wiped, it is rebooted
+
+
+- [oobe_config_restore](https://source.corp.google.com/chromeos_public/src/platform2/oobe_config/etc/init/oobe_config_restore.conf)
+service always runs when oobe is not finished
+- Chrome requests oobe configuration from `oobe_config_restore`
+	- Encrypted rollback data is loaded from
+	`/mnt/stateful_partition/unencrypted/preserve/rollback_data`
+	- The key can be found under `/sys/fs/pstore/pmsg-ramoops-*`
+	- Unencrypted data is sent to Chrome and stored in
+	`/var/lib/oobe_config_restore`
+	- Chrome steps through oobe and reconfigures networks using
+	[rollback_network_config](https://source.chromium.org/chromium/chromium/src/+/main:chrome/browser/ash/net/rollback_network_config/)
+
+Note:
+- Data put into `/dev/pmsg0` only survives one reboot and does not survive a
+	power cycle
+- In the future, rollback will utilize the TPM for more resilient encryption
+
+Known Issues:
+- Firmware version increments may break rollback because of firmware rollback
+	protection
+- Data save may fail on an unclean shutdown
+- If the device loses power after powerwash, the encryption key is lost and
+	rollback data cannot be decrypted
+
+
+## Testing Data Save and Restore for Rollback
 
 This will powerwash your device.