Keystore 2.0: No longer transition to database directory.
Keystore no longer transitions to the database directory as its working
directory. This allows keystore to start before data is mounted.
Test: keystore starts and early.
Change-Id: I98272fb0e97e8fe93eb87a657286681c78d28a60
diff --git a/keystore2/src/keystore2_main.rs b/keystore2/src/keystore2_main.rs
index fbf500a..f8dba07 100644
--- a/keystore2/src/keystore2_main.rs
+++ b/keystore2/src/keystore2_main.rs
@@ -19,7 +19,7 @@
use keystore2::authorization::AuthorizationManager;
use keystore2::service::KeystoreService;
use log::{error, info};
-use std::panic;
+use std::{panic, path::Path};
static KS2_SERVICE_NAME: &str = "android.system.keystore2";
static APC_SERVICE_NAME: &str = "android.security.apc";
@@ -46,12 +46,13 @@
let mut args = std::env::args();
args.next().expect("That's odd. How is there not even a first argument?");
- // Keystore changes to the database directory on startup (typically /data/misc/keystore).
+ // Keystore 2.0 cannot change to the database directory (typically /data/misc/keystore) on
+ // startup as Keystore 1.0 did because Keystore 2.0 is intended to run much earlier than
+ // Keystore 1.0. Instead we set a global variable to the database path.
// For the ground truth check the service startup rule for init (typically in keystore2.rc).
if let Some(dir) = args.next() {
- if std::env::set_current_dir(dir.clone()).is_err() {
- panic!("Failed to set working directory {}.", dir)
- }
+ *keystore2::globals::DB_PATH.lock().expect("Could not lock DB_PATH.") =
+ Path::new(&dir).to_path_buf();
} else {
panic!("Must specify a working directory.");
}