From d4ab215b0b00821609c5ae4774701e5fcb7beade Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Thu, 2 Feb 2017 15:34:51 +0900 Subject: [PATCH] Fix password generator In some case this generates abnormal password and this causes a failure when execute cryptosetup command. Change-Id: I51ead2cc9588fde71218795dc8a2290eb8f204f2 Signed-off-by: Sangyoon Jang (cherry picked from commit 876f0136b69b4e998c2e08aad42eac9bee301152) --- plugin/app2sd/server/app2sd_internals.c | 6 ++-- plugin/app2sd/server/app2sd_internals.h | 2 +- plugin/app2sd/server/app2sd_internals_utils.c | 44 ++++++++------------------- 3 files changed, 17 insertions(+), 35 deletions(-) diff --git a/plugin/app2sd/server/app2sd_internals.c b/plugin/app2sd/server/app2sd_internals.c index 66a75e9..afff360 100644 --- a/plugin/app2sd/server/app2sd_internals.c +++ b/plugin/app2sd/server/app2sd_internals.c @@ -208,7 +208,7 @@ char *_app2sd_do_loopback_encryption_setup(const char *pkgid, } if ((passwd = _app2sd_get_password_from_db(pkgid, uid)) == NULL) { - passwd = (char *)_app2sd_generate_password(pkgid); + passwd = (char *)_app2sd_generate_password(); if (NULL == passwd) { _E("unable to generate password"); return NULL; @@ -381,7 +381,7 @@ int _app2sd_dmcrypt_setup_device(const char *pkgid, _E("no password found for (%s)", pkgid); return APP2EXT_ERROR_SQLITE_REGISTRY; } - passwd = (char *)_app2sd_generate_password(pkgid); + passwd = (char *)_app2sd_generate_password(); if (NULL == passwd) { _E("unable to generate password\n"); return APP2EXT_ERROR_PASSWD_GENERATION; @@ -1485,7 +1485,7 @@ int _app2sd_duplicate_device(const char *pkgid, } if ((passwd = _app2sd_get_password_from_db(pkgid, uid)) == NULL) { - passwd = (char *)_app2sd_generate_password(pkgid); + passwd = (char *)_app2sd_generate_password(); if (NULL == passwd) { _E("unable to generate password"); return APP2EXT_ERROR_PASSWD_GENERATION; diff --git a/plugin/app2sd/server/app2sd_internals.h b/plugin/app2sd/server/app2sd_internals.h index 4c37e02..92195f4 100644 --- a/plugin/app2sd/server/app2sd_internals.h +++ b/plugin/app2sd/server/app2sd_internals.h @@ -148,7 +148,7 @@ int _app2sd_update_loopback_device_size(const char *pkgid, uid_t uid); /* this generates password */ -char *_app2sd_generate_password(const char *pkgid); +char *_app2sd_generate_password(void); /* this function encrypts device */ char *_app2sd_encrypt_device(const char *device, const char *loopback_device, diff --git a/plugin/app2sd/server/app2sd_internals_utils.c b/plugin/app2sd/server/app2sd_internals_utils.c index 970db56..3843349 100644 --- a/plugin/app2sd/server/app2sd_internals_utils.c +++ b/plugin/app2sd/server/app2sd_internals_utils.c @@ -22,7 +22,7 @@ */ #include -#include +#include #include #include "app2sd_internals.h" @@ -570,44 +570,26 @@ char *_app2sd_find_free_device(void) * This is a simple password generator * return: On success, it will return the password, else NULL. */ -char *_app2sd_generate_password(const char *pkgid) +char *_app2sd_generate_password(void) { - char passwd[PASSWD_LEN + 1] = { 0, }; - char *ret_result = NULL; - char set[ASCII_PASSWD_CHAR + 1] = + char *passwd; + static const char charset[ASCII_PASSWD_CHAR + 1] = "!\"#$%&()*+,-./0123456789:;<=>?@ABCDE" \ "FGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~"; - unsigned char char_1; - unsigned char char_2; - int i = 0; - int appname_len = strlen(pkgid); - int j = appname_len; - unsigned int seed; - - /* length of the password */ - ret_result = (char *)malloc(PASSWD_LEN + 1); - if (NULL == ret_result) { + int i; + + /* include null byte */ + passwd = (char *)malloc(sizeof(char) * (PASSWD_LEN + 1)); + if (passwd == NULL) { _E("unable to allocate memory"); return NULL; } - memset((void *)ret_result, '\0', PASSWD_LEN + 1); - - while (i < PASSWD_LEN) { - seed = time(NULL); - if (j > 0) j--; - char_1 = (rand_r(&seed) + pkgid[j]) % ASCII_PASSWD_CHAR; - char_2 = rand_r(&seed) % ASCII_PASSWD_CHAR; - passwd[i] = set[char_1]; - if (j > 0) j--; - passwd[i + 1] = set[((pkgid[j]) * 2) % ASCII_PASSWD_CHAR]; - if (i < PASSWD_LEN - 3) - passwd[i + 2] = set[char_2]; - i++; - } - memcpy(ret_result, passwd, PASSWD_LEN + 1); + for (i = 0; i < PASSWD_LEN; i++) + passwd[i] = charset[g_random_int() % ASCII_PASSWD_CHAR]; + passwd[i] = '\0'; - return ret_result; + return passwd; } #ifdef TIZEN_FEATURE_APP2SD_DMCRYPT_ENCRYPTION -- 2.7.4