2003-09-28 Moritz Schulte <mo@g10code.com>
authorMoritz Schulte <mo@g10code.com>
Sun, 28 Sep 2003 03:08:43 +0000 (03:08 +0000)
committerMoritz Schulte <mo@g10code.com>
Sun, 28 Sep 2003 03:08:43 +0000 (03:08 +0000)
* secmem.c (_gcry_secmem_realloc): Do not forget to release secmem
lock.  Thanks to low halo for triggering this bug.

src/ChangeLog
src/secmem.c

index 2f1ed79..077cc07 100644 (file)
@@ -1,3 +1,8 @@
+2003-09-28  Moritz Schulte  <mo@g10code.com>
+
+       * secmem.c (_gcry_secmem_realloc): Do not forget to release secmem
+       lock.  Thanks to low halo for triggering this bug.
+
 2003-09-04  Werner Koch  <wk@gnupg.org>
 
        * gcrypt.h (_GCRY_ERR_SOURCE_DEFAULT): Removed cruft.
index 0d038ae..425aa2b 100644 (file)
@@ -542,13 +542,20 @@ _gcry_secmem_realloc (void *p, size_t newsize)
   mb = (memblock_t *) ((char *) p - ((size_t) &((memblock_t *) 0)->aligned.c));
   size = mb->size;
   if (newsize < size)
-    return p;                  /* it is easier not to shrink the memory */
-  a = _gcry_secmem_malloc_internal (newsize);
-  if (a)
     {
-      memcpy (a, p, size);
-      memset ((char *) a + size, 0, newsize - size);
-      _gcry_secmem_free_internal (p);
+      SECMEM_UNLOCK;
+      /* It is easier to not shrink the memory.  */
+      a = p;
+    }
+  else
+    {
+      a = _gcry_secmem_malloc_internal (newsize);
+      if (a)
+       {
+         memcpy (a, p, size);
+         memset ((char *) a + size, 0, newsize - size);
+         _gcry_secmem_free_internal (p);
+       }
     }
 
   SECMEM_UNLOCK;