Author: jhb
Date: Thu Jun  1 21:07:32 2017
New Revision: 319475
URL: https://svnweb.freebsd.org/changeset/base/319475

Log:
  Fix some new errors and a warning in cryptotest.
  
  - Use a new 'char *key' to allocate storage for keys and assign the
    pointer to the session2_op 'const char *' members after the key is
    initialized.
  - Mark the 'find' variable used in crfind() static so that crfind()
    doesn't return a pointer to stack garbage.
  
  Reported by:  olivier (1)
  MFC after:    2 weeks
  Sponsored by: Chelsio Communications

Modified:
  head/tools/tools/crypto/cryptotest.c

Modified: head/tools/tools/crypto/cryptotest.c
==============================================================================
--- head/tools/tools/crypto/cryptotest.c        Thu Jun  1 21:07:25 2017        
(r319474)
+++ head/tools/tools/crypto/cryptotest.c        Thu Jun  1 21:07:32 2017        
(r319475)
@@ -216,7 +216,7 @@ crlookup(const char *devname)
 const char *
 crfind(int crid)
 {
-       struct crypt_find_op find;
+       static struct crypt_find_op find;
 
        bzero(&find, sizeof(find));
        find.crid = crid;
@@ -252,7 +252,7 @@ runtest(struct alg *alg, int count, int size, u_long c
 {
        int i, fd = crget();
        struct timeval start, stop, dt;
-       char *cleartext, *ciphertext, *originaltext;
+       char *cleartext, *ciphertext, *originaltext, *key;
        struct session2_op sop;
        struct crypt_op cop;
        char iv[EALG_MAX_BLOCK_LEN];
@@ -260,19 +260,21 @@ runtest(struct alg *alg, int count, int size, u_long c
        bzero(&sop, sizeof(sop));
        if (!alg->ishash) {
                sop.keylen = (alg->minkeylen + alg->maxkeylen)/2;
-               sop.key = (char *) malloc(sop.keylen);
-               if (sop.key == NULL)
+               key = (char *) malloc(sop.keylen);
+               if (key == NULL)
                        err(1, "malloc (key)");
                for (i = 0; i < sop.keylen; i++)
-                       sop.key[i] = rdigit();
+                       key[i] = rdigit();
+               sop.key = key;
                sop.cipher = alg->code;
        } else {
                sop.mackeylen = (alg->minkeylen + alg->maxkeylen)/2;
-               sop.mackey = (char *) malloc(sop.mackeylen);
-               if (sop.mackey == NULL)
+               key = (char *) malloc(sop.mackeylen);
+               if (key == NULL)
                        err(1, "malloc (mac)");
                for (i = 0; i < sop.mackeylen; i++)
-                       sop.mackey[i] = rdigit();
+                       key[i] = rdigit();
+               sop.mackey = key;
                sop.mac = alg->code;
        }
        sop.crid = crid;
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to