diff options
author | Dees_Troy <dees_troy@teamw.in> | 2013-08-23 19:20:32 +0200 |
---|---|---|
committer | Dees_Troy <dees_troy@teamw.in> | 2013-08-23 19:22:37 +0200 |
commit | 066eb30abf78bd2d52a23f3068936a6b67cd03d8 (patch) | |
tree | bc1b4fc46d692afd03a2a68f291663786d6a6776 /crypto | |
parent | Remove graphics.c from libguitwrp (diff) | |
download | android_bootable_recovery-066eb30abf78bd2d52a23f3068936a6b67cd03d8.tar android_bootable_recovery-066eb30abf78bd2d52a23f3068936a6b67cd03d8.tar.gz android_bootable_recovery-066eb30abf78bd2d52a23f3068936a6b67cd03d8.tar.bz2 android_bootable_recovery-066eb30abf78bd2d52a23f3068936a6b67cd03d8.tar.lz android_bootable_recovery-066eb30abf78bd2d52a23f3068936a6b67cd03d8.tar.xz android_bootable_recovery-066eb30abf78bd2d52a23f3068936a6b67cd03d8.tar.zst android_bootable_recovery-066eb30abf78bd2d52a23f3068936a6b67cd03d8.zip |
Diffstat (limited to 'crypto')
-rw-r--r-- | crypto/ics/cryptfs.c | 14 | ||||
-rw-r--r-- | crypto/ics/cryptfs.h | 4 |
2 files changed, 11 insertions, 7 deletions
diff --git a/crypto/ics/cryptfs.c b/crypto/ics/cryptfs.c index d994449c1..193339ec9 100644 --- a/crypto/ics/cryptfs.c +++ b/crypto/ics/cryptfs.c @@ -75,6 +75,7 @@ static int master_key_saved = 0; static int using_samsung_encryption = 0; //static edk_t saved_master_key; static unsigned char saved_master_key[KEY_LEN_BYTES_SAMSUNG]; +edk_payload_t edk_payload; #else static unsigned char saved_master_key[KEY_LEN_BYTES]; #endif @@ -187,8 +188,15 @@ static int get_crypt_ftr_and_key(char *real_blk_name, struct crypt_mnt_ftr *cryp } else { printf("Using Samsung encryption.\n"); using_samsung_encryption = 1; - memcpy(key, &crypt_ftr->edk_payload, sizeof(edk_payload_t)); - + if ( (cnt = read(fd, &edk_payload, sizeof(edk_payload_t))) != sizeof(edk_payload_t)) { + printf("Cannot read EDK payload from real block device footer\n"); + goto errout; + } + if (lseek64(fd, sizeof(__le32), SEEK_CUR) == -1) { + printf("Cannot seek past unknown data from real block device footer\n"); + goto errout; + } + memcpy(key, &edk_payload, sizeof(edk_payload_t)); } #else printf("Bad magic for real block device %s\n", fname); @@ -217,7 +225,7 @@ static int get_crypt_ftr_and_key(char *real_blk_name, struct crypt_mnt_ftr *cryp } } - if (crypt_ftr->keysize != sizeof(saved_master_key)) { + if (crypt_ftr->keysize > sizeof(saved_master_key)) { printf("Keysize of %d bits not supported for real block device %s\n", crypt_ftr->keysize * 8, fname); goto errout; diff --git a/crypto/ics/cryptfs.h b/crypto/ics/cryptfs.h index e2fb7a7f3..eee43b3bc 100644 --- a/crypto/ics/cryptfs.h +++ b/crypto/ics/cryptfs.h @@ -68,10 +68,6 @@ struct crypt_mnt_ftr { char crypto_type_name[MAX_CRYPTO_TYPE_NAME_LEN]; /* The type of encryption needed to decrypt this partition, null terminated */ -#ifdef TW_INCLUDE_CRYPTO_SAMSUNG - edk_payload_t edk_payload; - __le32 unknown_end; -#endif }; #pragma pack() |