Fix encryption on non-default devices
Bug: 27061863
Change-Id: Id998bb4534f657079e95718ef52af3f23100fb10
diff --git a/CryptCommandListener.cpp b/CryptCommandListener.cpp
index 4221fcf..b6f9398 100644
--- a/CryptCommandListener.cpp
+++ b/CryptCommandListener.cpp
@@ -145,22 +145,27 @@
return false;
}
-static int do_enablecrypto(char** argv, int type, bool no_ui) {
+static int do_enablecrypto(char* arg2, char* arg4, int type, bool no_ui) {
int rc;
int tries;
for (tries = 0; tries < 2; ++tries) {
if (type == CRYPT_TYPE_DEFAULT) {
- rc = cryptfs_enable_default(argv[2], no_ui);
+ rc = cryptfs_enable_default(arg2, no_ui);
} else {
- rc = cryptfs_enable(argv[2], type, argv[4], no_ui);
+ rc = cryptfs_enable(arg2, type, arg4, no_ui);
}
if (rc == 0) {
+ free(arg2);
+ free(arg4);
return 0;
} else if (tries == 0) {
Process::killProcessesWithOpenFiles(DATA_MNT_POINT, SIGKILL);
}
}
+
+ free(arg2);
+ free(arg4);
return -1;
}
@@ -248,7 +253,9 @@
// Spawn as thread so init can issue commands back to vold without
// causing deadlock, usually as a result of prep_data_fs.
- std::thread(&do_enablecrypto, argv, type, no_ui).detach();
+ char* arg2 = argc > 2 ? strdup(argv[2]) : NULL;
+ char* arg4 = argc > 4 ? strdup(argv[4]) : NULL;
+ std::thread(&do_enablecrypto, arg2, arg4, type, no_ui).detach();
} else if (subcommand == "enablefilecrypto") {
if (!check_argc(cli, subcommand, argc, 2, "")) return 0;
dumpArgs(argc, argv, -1);