--- a/loginutils/chpasswd.c +++ b/loginutils/chpasswd.c @@ -97,6 +97,11 @@ int chpasswd_main(int argc UNUSED_PARAM, crypt_make_pw_salt(salt, algo); free_me = pass = pw_encrypt(pass, salt, 0); + + if (pass[0] == 0) { + free(free_me); + bb_perror_msg_and_die("password encryption failed"); + } } /* This is rather complex: if user is not found in /etc/shadow, --- a/loginutils/cryptpw.c +++ b/loginutils/cryptpw.c @@ -95,7 +95,7 @@ int cryptpw_main(int argc UNUSED_PARAM, /* Supports: cryptpw -m sha256 PASS 'rounds=999999999$SALT' */ char salt[MAX_PW_SALT_LEN + sizeof("rounds=999999999$")]; char *salt_ptr; - char *password; + char *password, *hash; const char *opt_m, *opt_S; int fd; @@ -140,8 +140,12 @@ int cryptpw_main(int argc UNUSED_PARAM, /* may still be NULL on EOF/error */ } - if (password) - puts(pw_encrypt(password, salt, 1)); + if (password) { + hash = pw_encrypt(password, salt, 1); + if (hash[0] == 0) + bb_perror_msg_and_die("password encryption failed"); + puts(hash); + } return EXIT_SUCCESS; } --- a/loginutils/passwd.c +++ b/loginutils/passwd.c @@ -187,6 +187,10 @@ int passwd_main(int argc UNUSED_PARAM, c if (!newp) { logmode = LOGMODE_STDIO; bb_error_msg_and_die("password for %s is unchanged", name); + } else if (newp[0] == 0) { + logmode = LOGMODE_STDIO; + free(newp); + bb_perror_msg_and_die("password encryption failed"); } } else if (opt & OPT_lock) { if (!c)