Add a zero_bytes() function to do the equivalent of bzero in such a
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 31 Dec 2003 22:46:10 +0000 (22:46 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 31 Dec 2003 22:46:10 +0000 (22:46 +0000)
way that will heopfully not be optimized away by sneaky compilers.

auth/aix_auth.c
auth/bsdauth.c
auth/fwtk.c
auth/pam.c
auth/sudo_auth.c

index 1bbb0df8ded05b10abccbc09de95a750e2424aa6..ae8fc0763f1cbcd97a7381364a0d65132d079bac 100644 (file)
@@ -74,7 +74,7 @@ aixauth_verify(pw, prompt, auth)
     char *prompt;
     sudo_auth *auth;
 {
-    volatile char *pass;
+    char *pass;
     char *message;
     int reenter = 1;
     int rval = AUTH_FAILURE;
@@ -83,7 +83,7 @@ aixauth_verify(pw, prompt, auth)
     if (pass) {
        if (authenticate(pw->pw_name, (char *)pass, &reenter, &message) == 0)
            rval = AUTH_SUCCESS;
-       memset(pass, 0, strlen(pass));
+       zero_bytes(pass, strlen(pass));
     }
     return(rval);
 }
index 0b147d554f4ae3b0e34421ac30f0f9952ba8c0fd..4b6b29d7d12efc79e26dd8c94b3635e333342b43 100644 (file)
@@ -116,7 +116,7 @@ bsdauth_verify(pw, prompt, auth)
     char *prompt;
     sudo_auth *auth;
 {
-    volatile char *pass;
+    char *pass;
     char *s;
     size_t len;
     int authok = 0;
@@ -165,7 +165,7 @@ bsdauth_verify(pw, prompt, auth)
 
     if (pass) {
        authok = auth_userresponse(as, (char *)pass, 1);
-       memset(pass, 0, strlen(pass));
+       zero_bytes(pass, strlen(pass));
     }
 
     /* restore old signal handler */
index b8b19b539f6493fecc3b7e3f1f85e70f3e597f6f..1fe52aab6485587953add8f29a21415e39632136 100644 (file)
@@ -114,8 +114,8 @@ fwtk_verify(pw, prompt, auth)
     char *prompt;
     sudo_auth *auth;
 {
-    volatile char *pass;               /* Password from the user */
-    volatile char buf[SUDO_PASS_MAX + 12]; /* General prupose buffer */
+    char *pass;                                /* Password from the user */
+    char buf[SUDO_PASS_MAX + 12];      /* General prupose buffer */
     char resp[128];                    /* Response from the server */
     int error;
     extern int nil_pw;
@@ -166,8 +166,8 @@ fwtk_verify(pw, prompt, auth)
        warnx("%s", resp);
     error = AUTH_FAILURE;
 done:
-    memset(pass, 0, strlen(pass));
-    memset(buf, 0, strlen(buf));
+    zero_bytes(pass, strlen(pass));
+    zero_bytes(buf, strlen(buf));
     return(error);
 }
 
index 114ac301c5dc3e6c00d90ab2b9be03048a48ed1e..c8d83e2bf21d9fbb16b156cc9f003d108fc37dfe 100644 (file)
@@ -190,16 +190,16 @@ sudo_conv(num_msg, msg, response, appdata_ptr)
     struct pam_response **response;
     VOID *appdata_ptr;
 {
-    volatile struct pam_response *pr;
+    struct pam_response *pr;
     PAM_CONST struct pam_message *pm;
     const char *p = def_prompt;
-    volatile char *pass;
+    char *pass;
     int n, flags;
     extern int nil_pw;
 
     if ((*response = malloc(num_msg * sizeof(struct pam_response))) == NULL)
        return(PAM_CONV_ERR);
-    (void) memset(*response, 0, num_msg * sizeof(struct pam_response));
+    zero_bytes(*response, num_msg * sizeof(struct pam_response));
 
     for (pr = *response, pm = *msg, n = num_msg; n--; pr++, pm++) {
        flags = tgetpass_flags;
@@ -217,7 +217,7 @@ sudo_conv(num_msg, msg, response, appdata_ptr)
                if (*pr->resp == '\0')
                    nil_pw = 1;         /* empty password */
                else
-                   memset(pass, 0, strlen(pass));
+                   zero_bytes(pass, strlen(pass));
                break;
            case PAM_TEXT_INFO:
                if (pm->msg)
@@ -233,13 +233,12 @@ sudo_conv(num_msg, msg, response, appdata_ptr)
                /* Zero and free allocated memory and return an error. */
                for (pr = *response, n = num_msg; n--; pr++) {
                    if (pr->resp != NULL) {
-                       (void) memset(pr->resp, 0, strlen(pr->resp));
+                       zero_bytes(pr->resp, strlen(pr->resp));
                        free(pr->resp);
                        pr->resp = NULL;
                    }
                }
-               (void) memset(*response, 0,
-                   num_msg * sizeof(struct pam_response));
+               zero_bytes(*response, num_msg * sizeof(struct pam_response));
                free(*response);
                *response = NULL;
                return(PAM_CONV_ERR);
index 6f70c0b468ee58c39f67e76ef305332badcf6ef8..cb35774d84ecf1b94590b3e13ad9bcecd389bac5 100644 (file)
@@ -117,7 +117,7 @@ verify_user(pw, prompt)
     int success = AUTH_FAILURE;
     int status;
     int flags;
-    volatile char *p;
+    char *p;
     sudo_auth *auth;
     sigaction_t sa, osa;
 
@@ -202,7 +202,7 @@ verify_user(pw, prompt)
        }
 #ifndef AUTH_STANDALONE
        if (p)
-           (void) memset(p, 0, strlen(p));
+           zero_bytes(p, strlen(p));
 #endif
 
        /* Exit loop on nil password, but give it a chance to match first. */