Hi,

I'm almost sure I sent this aeons ago already, but never got commited.

It calls explicit_bzero instead of memset on passwords as soon as they're not
needed in memory anymore.

Index: user.c
===================================================================
RCS file: /cvs/src/usr.sbin/user/user.c,v
retrieving revision 1.118
diff -u -p -u -r1.118 user.c
--- user.c      30 Nov 2016 23:58:07 -0000      1.118
+++ user.c      12 May 2017 07:56:11 -0000
@@ -1359,7 +1359,7 @@ moduser(char *login_name, char *newlogin
                        up->u_flags |= F_PASSWORD;
                        memsave(&up->u_password, pwp->pw_passwd,
                            strlen(pwp->pw_passwd));
-                       memset(pwp->pw_passwd, 'X', strlen(pwp->pw_passwd));
+                       explicit_bzero(pwp->pw_passwd, strlen(pwp->pw_passwd));
                }
        }
        endpwent();
@@ -1788,7 +1788,7 @@ useradd(int argc, char **argv)
                        break;
                case 'p':
                        memsave(&u.u_password, optarg, strlen(optarg));
-                       memset(optarg, 'X', strlen(optarg));
+                       explicit_bzero(optarg, strlen(optarg));
                        break;
                case 'r':
                        defaultfield = 1;
@@ -1929,7 +1929,7 @@ usermod(int argc, char **argv)
                        break;
                case 'p':
                        memsave(&u.u_password, optarg, strlen(optarg));
-                       memset(optarg, 'X', strlen(optarg));
+                       explicit_bzero(optarg, strlen(optarg));
                        u.u_flags |= F_PASSWORD;
                        break;
                case 's':

Reply via email to