summaryrefslogtreecommitdiffstats
path: root/init
diff options
context:
space:
mode:
authorPaul Lawrence <paullawrence@google.com>2015-04-27 20:08:53 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2015-04-27 20:08:53 +0000
commit9234b169e62b10e38ecd3dc636ccccb425ea4eed (patch)
tree3a02b204e967358c432da780014db9c65f8d8588 /init
parent96b6415c560fc59e7114fd6f455943765947eeb7 (diff)
parent4bf1887c787a025aad2fbafe382e556e85ac73b0 (diff)
downloadcore-9234b169e62b10e38ecd3dc636ccccb425ea4eed.tar.gz
core-9234b169e62b10e38ecd3dc636ccccb425ea4eed.tar.bz2
core-9234b169e62b10e38ecd3dc636ccccb425ea4eed.zip
Merge "Securely encrypt the master key"
Diffstat (limited to 'init')
-rw-r--r--init/builtins.cpp45
1 files changed, 15 insertions, 30 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp
index 4567b04b4..c03968990 100644
--- a/init/builtins.cpp
+++ b/init/builtins.cpp
@@ -29,7 +29,7 @@
#include <sys/wait.h>
#include <unistd.h>
#include <linux/loop.h>
-#include <ext4_crypt.h>
+#include <ext4_crypt_init_extensions.h>
#include <selinux/selinux.h>
#include <selinux/label.h>
@@ -386,18 +386,6 @@ static int wipe_data_via_recovery()
}
/*
- * Callback to make a directory from the ext4 code
- */
-static int do_mount_alls_make_dir(const char* dir)
-{
- if (make_dir(dir, 0700) && errno != EEXIST) {
- return -1;
- }
-
- return 0;
-}
-
-/*
* This function might request a reboot, in which case it will
* not return.
*/
@@ -465,22 +453,6 @@ int do_mount_all(int nargs, char **args)
ret = wipe_data_via_recovery();
/* If reboot worked, there is no return. */
} else if (ret == FS_MGR_MNTALL_DEV_DEFAULT_FILE_ENCRYPTED) {
- // We have to create the key files here. Only init can call make_dir,
- // and we can't do it from fs_mgr as then fs_mgr would depend on
- // make_dir creating a circular dependency.
- fstab = fs_mgr_read_fstab(args[1]);
- for (int i = 0; i < fstab->num_entries; ++i) {
- if (fs_mgr_is_file_encrypted(&fstab->recs[i])) {
- if (e4crypt_create_device_key(fstab->recs[i].mount_point,
- do_mount_alls_make_dir)) {
- ERROR("Could not create device key on %s"
- " - continue unencrypted\n",
- fstab->recs[i].mount_point);
- }
- }
- }
- fs_mgr_free_fstab(fstab);
-
if (e4crypt_install_keyring()) {
return -1;
}
@@ -840,10 +812,23 @@ int do_wait(int nargs, char **args)
return -1;
}
+/*
+ * Callback to make a directory from the ext4 code
+ */
+static int do_installkeys_ensure_dir_exists(const char* dir)
+{
+ if (make_dir(dir, 0700) && errno != EEXIST) {
+ return -1;
+ }
+
+ return 0;
+}
+
int do_installkey(int nargs, char **args)
{
if (nargs == 2) {
- return e4crypt_install_key(args[1]);
+ return e4crypt_create_device_key(args[1],
+ do_installkeys_ensure_dir_exists);
}
return -1;