--- /dev/null
+--- 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)