From 71413f4ee9a2d345da059793e795d798924b2209 Mon Sep 17 00:00:00 2001 From: Ethan Yonker Date: Wed, 26 Feb 2014 13:36:08 -0600 Subject: Check crypto footer before offering to decrypt Verify that we have a valid footer with proper magic before setting things up for decryption to help prevent user confusion when dealing with data partitions that fail to mount. Also check to make sure that the block device for /data is present. Change-Id: Ie87818fe4505a8bf71df7d3934c114e7328ef3ca --- crypto/jb/cryptfs.c | 23 +++++++++++++++++++++-- crypto/jb/cryptfs.h | 1 + 2 files changed, 22 insertions(+), 2 deletions(-) (limited to 'crypto/jb') diff --git a/crypto/jb/cryptfs.c b/crypto/jb/cryptfs.c index 4e5706b64..f9c0d7489 100644 --- a/crypto/jb/cryptfs.c +++ b/crypto/jb/cryptfs.c @@ -1354,13 +1354,32 @@ int cryptfs_crypto_complete(void) #define FSTAB_PREFIX "/fstab." +int cryptfs_check_footer(void) +{ + int rc = -1; + char fstab_filename[PROPERTY_VALUE_MAX + sizeof(FSTAB_PREFIX)]; + char propbuf[PROPERTY_VALUE_MAX]; + struct crypt_mnt_ftr crypt_ftr; + + property_get("ro.hardware", propbuf, ""); + snprintf(fstab_filename, sizeof(fstab_filename), FSTAB_PREFIX"%s", propbuf); + + fstab = fs_mgr_read_fstab(fstab_filename); + if (!fstab) { + printf("failed to open %s\n", fstab_filename); + return -1; + } + + rc = get_crypt_ftr_and_key(&crypt_ftr); + + return rc; +} + int cryptfs_check_passwd(char *passwd) { int rc = -1; char fstab_filename[PROPERTY_VALUE_MAX + sizeof(FSTAB_PREFIX)]; char propbuf[PROPERTY_VALUE_MAX]; - int i; - int flags; property_get("ro.hardware", propbuf, ""); snprintf(fstab_filename, sizeof(fstab_filename), FSTAB_PREFIX"%s", propbuf); diff --git a/crypto/jb/cryptfs.h b/crypto/jb/cryptfs.h index 162159eb0..d815814d3 100644 --- a/crypto/jb/cryptfs.h +++ b/crypto/jb/cryptfs.h @@ -139,6 +139,7 @@ extern "C" { typedef void (*kdf_func)(char *passwd, unsigned char *salt, unsigned char *ikey, void *params); int cryptfs_crypto_complete(void); + int cryptfs_check_footer(void); int cryptfs_check_passwd(char *pw); int cryptfs_verify_passwd(char *newpw); int cryptfs_restart(void); -- cgit v1.2.3