various sizeof() usage and type bug fixes found by Coverity
authorMichael Rash <mbr@cipherdyne.org>
Fri, 10 May 2013 01:17:27 +0000 (21:17 -0400)
committerMichael Rash <mbr@cipherdyne.org>
Fri, 10 May 2013 01:17:27 +0000 (21:17 -0400)
client/config_init.c
client/fwknop.c
lib/fko_encryption.c
lib/hmac.c
lib/md5.c
lib/sha2.c
server/fwknopd.c

index e13b2cc..2ce1853 100644 (file)
@@ -329,7 +329,7 @@ is_rc_param(const char *line, rc_file_param_t *param)
     char    val[MAX_LINE_LEN] = {0};
     char    *ndx;
 
-    memset(param, 0, sizeof(param));
+    memset(param, 0, sizeof(*param));
 
     /* Fetch the variable and its value */
     if(sscanf(line, "%s %[^ ;\t\n\r#]", var, val) != 2)
index b1e96ca..c4eb446 100644 (file)
@@ -209,7 +209,7 @@ main(int argc, char **argv)
                 options.hmac_key_base64, options.hmac_key_len,
                 options.hmac_type);
 
-        if(options.key_gen_file != NULL && options.key_gen_file[0] != '\0')
+        if(options.key_gen_file[0] != '\0')
         {
             if ((key_gen_file_ptr = fopen(options.key_gen_file, "w")) == NULL)
             {
@@ -388,7 +388,7 @@ main(int argc, char **argv)
          * this has to occur before calling any of the other GPG-related
          * functions.
         */
-        if(options.gpg_home_dir != NULL && strlen(options.gpg_home_dir) > 0)
+        if(strlen(options.gpg_home_dir) > 0)
         {
             res = fko_set_gpg_home_dir(ctx, options.gpg_home_dir);
             if(res != FKO_SUCCESS)
@@ -410,7 +410,7 @@ main(int argc, char **argv)
             return(EXIT_FAILURE);
         }
 
-        if(options.gpg_signer_key != NULL && strlen(options.gpg_signer_key))
+        if(strlen(options.gpg_signer_key) > 0)
         {
             res = fko_set_gpg_signer(ctx, options.gpg_signer_key);
             if(res != FKO_SUCCESS)
@@ -561,7 +561,7 @@ main(int argc, char **argv)
         */
         if(options.use_gpg)
         {
-            if(options.gpg_home_dir != NULL && strlen(options.gpg_home_dir) > 0)
+            if(strlen(options.gpg_home_dir) > 0)
             {
                 res = fko_set_gpg_home_dir(ctx2, options.gpg_home_dir);
                 if(res != FKO_SUCCESS)
@@ -875,7 +875,7 @@ prev_exec(fko_cli_options_t *options, int argc, char **argv)
 {
     char       args_save_file[MAX_PATH_LEN] = {0};
 
-    if(options->args_save_file != NULL && options->args_save_file[0] != 0x0)
+    if(options->args_save_file[0] != 0x0)
     {
         strlcpy(args_save_file, options->args_save_file, sizeof(args_save_file));
     }
@@ -1107,7 +1107,7 @@ get_keys(fko_ctx_t ctx, fko_cli_options_t *options,
     */
     if(options->use_gpg
       && (options->use_gpg_agent
-           || (crypt_op == CRYPT_OP_ENCRYPT && options->gpg_signer_key == NULL)))
+           || (crypt_op == CRYPT_OP_ENCRYPT && options->gpg_signer_key[0] == '\0')))
         return;
 
     if (options->have_key)
@@ -1151,7 +1151,7 @@ get_keys(fko_ctx_t ctx, fko_cli_options_t *options,
                 strlcpy(key, key_tmp, MAX_KEY_LEN+1);
                 *key_len = strlen(key);
             }
-            else if(options->gpg_signer_key && strlen(options->gpg_signer_key))
+            else if(strlen(options->gpg_signer_key))
             {
                 key_tmp = getpasswd("Enter passphrase for signing: ");
                 if(key_tmp == NULL)
index 3acdd00..51b16ad 100644 (file)
@@ -355,7 +355,7 @@ gpg_decrypt(fko_ctx_t ctx, const char *dec_key)
 {
     unsigned char  *cipher;
     size_t          cipher_len;
-    int             res, pt_len;
+    int             res, pt_len, b64_decode_len;
 
     /* Now see if we need to add the "hQ" string to the front of the
      * base64-encoded-GPG-encrypted data.
@@ -370,9 +370,11 @@ gpg_decrypt(fko_ctx_t ctx, const char *dec_key)
     if(cipher == NULL)
         return(FKO_ERROR_MEMORY_ALLOCATION);
 
-    if((cipher_len = b64_decode(ctx->encrypted_msg, cipher)) < 0)
+    if((b64_decode_len = b64_decode(ctx->encrypted_msg, cipher)) < 0)
         return(FKO_ERROR_INVALID_DATA);
 
+    cipher_len = b64_decode_len;
+
     /* Create a bucket for the plaintext data and decrypt the message
      * data into it.
     */
index 73ae2c7..eb565e6 100644 (file)
@@ -159,7 +159,7 @@ hmac_md5(const char *msg, const unsigned int msg_len,
 {
     hmac_md5_ctx ctx;
 
-    memset(&ctx, 0, sizeof(&ctx));
+    memset(&ctx, 0, sizeof(ctx));
 
     hmac_md5_init(&ctx, hmac_key, hmac_key_len);
     hmac_md5_update(&ctx, msg, msg_len);
@@ -233,7 +233,7 @@ hmac_sha1(const char *msg, const unsigned int msg_len,
 {
     hmac_sha1_ctx ctx;
 
-    memset(&ctx, 0, sizeof(&ctx));
+    memset(&ctx, 0, sizeof(ctx));
 
     hmac_sha1_init(&ctx, hmac_key, hmac_key_len);
     hmac_sha1_update(&ctx, msg, msg_len);
@@ -307,7 +307,7 @@ hmac_sha256(const char *msg, const unsigned int msg_len,
 {
     hmac_sha256_ctx ctx;
 
-    memset(&ctx, 0, sizeof(&ctx));
+    memset(&ctx, 0, sizeof(ctx));
 
     hmac_sha256_init(&ctx, hmac_key, hmac_key_len);
     hmac_sha256_update(&ctx, msg, msg_len);
@@ -381,7 +381,7 @@ hmac_sha384(const char *msg, const unsigned int msg_len,
 {
     hmac_sha384_ctx ctx;
 
-    memset(&ctx, 0, sizeof(&ctx));
+    memset(&ctx, 0, sizeof(ctx));
 
     hmac_sha384_init(&ctx, hmac_key, hmac_key_len);
     hmac_sha384_update(&ctx, msg, msg_len);
@@ -455,7 +455,7 @@ hmac_sha512(const char *msg, const unsigned int msg_len,
 {
     hmac_sha512_ctx ctx;
 
-    memset(&ctx, 0, sizeof(&ctx));
+    memset(&ctx, 0, sizeof(ctx));
 
     hmac_sha512_init(&ctx, hmac_key, hmac_key_len);
     hmac_sha512_update(&ctx, msg, msg_len);
index ab1d130..33080aa 100644 (file)
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -170,7 +170,8 @@ MD5Final(unsigned char digest[16], MD5Context *ctx)
     MD5Transform(ctx->buf, (uint32_t *) ctx->in);
     byteReverse((unsigned char *) ctx->buf, 4);
     memcpy(digest, ctx->buf, 16);
-    memset(ctx, 0, sizeof(ctx));        /* In case it's sensitive */
+
+    memset(ctx, 0, sizeof(*ctx));        /* In case it's sensitive */
 }
 
 
index ee8447d..dd81ce5 100644 (file)
@@ -644,7 +644,7 @@ void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
        }
 
        /* Clean up state data: */
-       MEMSET_BZERO(context, sizeof(context));
+       MEMSET_BZERO(context, sizeof(*context));
        usedspace = 0;
 }
 
@@ -974,7 +974,7 @@ void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {
        }
 
        /* Zero out state data */
-       MEMSET_BZERO(context, sizeof(context));
+       MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA512_End(SHA512_CTX* context, char buffer[]) {
@@ -994,7 +994,7 @@ char *SHA512_End(SHA512_CTX* context, char buffer[]) {
                }
                *buffer = (char)0;
        } else {
-               MEMSET_BZERO(context, sizeof(context));
+               MEMSET_BZERO(context, sizeof(*context));
        }
        MEMSET_BZERO(digest, SHA512_DIGEST_LEN);
        return buffer;
@@ -1049,7 +1049,7 @@ void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {
        }
 
        /* Zero out state data */
-       MEMSET_BZERO(context, sizeof(context));
+       MEMSET_BZERO(context, sizeof(*context));
 }
 
 char *SHA384_End(SHA384_CTX* context, char buffer[]) {
@@ -1069,7 +1069,7 @@ char *SHA384_End(SHA384_CTX* context, char buffer[]) {
                }
                *buffer = (char)0;
        } else {
-               MEMSET_BZERO(context, sizeof(context));
+               MEMSET_BZERO(context, sizeof(*context));
        }
        MEMSET_BZERO(digest, SHA384_DIGEST_LEN);
        return buffer;
index 53f85bc..fb91d55 100644 (file)
@@ -259,8 +259,11 @@ main(int argc, char **argv)
                 log_msg(LOG_WARNING,
                     "Error opening digest cache file. Incoming digests will not be remembered."
                 );
-                strlcpy(opts.config[CONF_ENABLE_DIGEST_PERSISTENCE], "N",
-                        sizeof(opts.config[CONF_ENABLE_DIGEST_PERSISTENCE]));
+                /* Destination points to heap memory, and is guaranteed to be
+                 * at least two bytes large via validate_options(),
+                 * DEF_ENABLE_DIGEST_PERSISTENCE, and set_config_entry()
+                */
+                strlcpy(opts.config[CONF_ENABLE_DIGEST_PERSISTENCE], "N", 2);
             }
 
             if(opts.verbose)