Re: possible user error / memory leak using RSA_new() and RSA_free();

2010-04-20 Thread Stuart Weatherby
Steve  Mounir,

Thanks a lot for answering my questions. 

Stuart




- Original Message 
From: Dr. Stephen Henson st...@openssl.org
To: openssl-users@openssl.org
Sent: Mon, April 19, 2010 4:38:14 PM
Subject: Re: possible user error / memory leak using RSA_new() and RSA_free();

On Mon, Apr 19, 2010, Stuart Weatherby wrote:

 Thanks Steve,
 
 After commenting out lines 24  25 there is still unfree'd memory:
 

http://www.openssl.org/support/faq.html#PROG13

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
__
OpenSSL Projecthttp://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager  majord...@openssl.org


__
Do You Yahoo!?
Tired of spam?  Yahoo! Mail has the best spam protection around 
http://mail.yahoo.com 
__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org


possible user error / memory leak using RSA_new() and RSA_free();

2010-04-19 Thread Stuart Weatherby
Hi List,

I am trying to figure out why there is a memory leak using RSA_new  RSA_free:
Below is a code sample (which will produce a memory leak) and the relevent 
valgrind output. I have checked the documentation but I still fail to see my 
error. 

As I understand the docuumentation, RSA_free() is the only required call to 
free memory allocated using the RSA_new() function. 

Thanks,

Stuart


int main (void)
{
   FILE *fp;
   RSA  *p = NULL;
   char *pt = hi\0;
   char pt_0 = *pt;
   int pt_len = strlen(pt);
   unsigned char *ct;
   int ct_len = 0;

   if ((p = RSA_new()) == NULL)
  return 1;
   if ((fp = fopen (pub.key, rb)) == NULL)
  return 2;
   if ((p = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL)) == NULL)
   {
  fclose(fp);
  return 3;
   }
   fclose(fp);
   ct = malloc(RSA_size(p));
   if(RSA_public_encrypt(pt_len,(unsigned char *) pt,ct, p, 
RSA_PKCS1_OAEP_PADDING) == -1)
 return 4;
   free(ct);
   RSA_free(p);
   return 0;
}


Here is the valgrind output:

==2330== 528 bytes in 10 blocks are still reachable in loss record 2 of 2
==2330==    at 0x4A05809: malloc (vg_replace_malloc.c:149)
==2330==    by 0x35156DAD51: CRYPTO_malloc (in /lib64/libcrypto.so.0.9.8e)
==2330==    by 0x351567EAC8: lh_new (in /lib64/libcrypto.so.0.9.8e)
==2330==    by 0x351565B4C4: (within /lib64/libcrypto.so.0.9.8e)
==2330==    by 0x351565B5E5: (within /lib64/libcrypto.so.0.9.8e)
==2330==    by 0x351565B98A: (within /lib64/libcrypto.so.0.9.8e)
==2330==    by 0x351566F9B3: RSA_new_method (in /lib64/libcrypto.so.0.9.8e)
==2330==    by 0x40083D: main (rsatest.c:24)
==2330==
==2330== LEAK SUMMARY:
==2330==    definitely lost: 168 bytes in 1 blocks.
==2330==  possibly lost: 0 bytes in 0 blocks.
==2330==    still reachable: 528 bytes in 10 blocks.
==2330== suppressed: 0 bytes in 0 blocks.


__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org


Re: possible user error / memory leak using RSA_new() and RSA_free();

2010-04-19 Thread Dr. Stephen Henson
On Mon, Apr 19, 2010, Stuart Weatherby wrote:

 Hi List,
 
 I am trying to figure out why there is a memory leak using RSA_new  RSA_free:
 Below is a code sample (which will produce a memory leak) and the relevent 
 valgrind output. I have checked the documentation but I still fail to see my 
 error. 
 
 As I understand the docuumentation, RSA_free() is the only required call to 
 free memory allocated using the RSA_new() function. 
 
 Thanks,
 
 Stuart
 
 
 int main (void)
 {
    FILE *fp;
    RSA  *p = NULL;
    char *pt = hi\0;
    char pt_0 = *pt;
    int pt_len = strlen(pt);
    unsigned char *ct;
    int ct_len = 0;
 
    if ((p = RSA_new()) == NULL)
   return 1;
    if ((fp = fopen (pub.key, rb)) == NULL)
   return 2;
    if ((p = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL)) == NULL)
    {
   fclose(fp);
   return 3;
    }
    fclose(fp);
    ct = malloc(RSA_size(p));
    if(RSA_public_encrypt(pt_len,(unsigned char *) pt,ct, p, 
 RSA_PKCS1_OAEP_PADDING) == -1)
  return 4;
    free(ct);
    RSA_free(p);
    return 0;
 }
 

You are allocating an RSA structure then completely overwriting the pointer
with a new one. Leaving the original as the leak.

Delete the RSA_new() call.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org


Re: possible user error / memory leak using RSA_new() and RSA_free();

2010-04-19 Thread Mounir IDRASSI

Hi,

Remove the unecessary call to RSA_new and the memory leak will 
disappear!! (The variable p est allocated by PEM_read_RSA_PUBKEY)


Cheers,
--
Mounir IDRASSI
IDRIX
http://www.idrix.fr


On 4/19/2010 11:07 PM, Stuart Weatherby wrote:

Hi List,

I am trying to figure out why there is a memory leak using RSA_new  RSA_free:
Below is a code sample (which will produce a memory leak) and the relevent 
valgrind output. I have checked the documentation but I still fail to see my 
error.

As I understand the docuumentation, RSA_free() is the only required call to 
free memory allocated using the RSA_new() function.

Thanks,

Stuart


int main (void)
{
FILE *fp;
RSA  *p = NULL;
char *pt = hi\0;
char pt_0 = *pt;
int pt_len = strlen(pt);
unsigned char *ct;
int ct_len = 0;

if ((p = RSA_new()) == NULL)
   return 1;
if ((fp = fopen (pub.key, rb)) == NULL)
   return 2;
if ((p = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL)) == NULL)
{
   fclose(fp);
   return 3;
}
fclose(fp);
ct = malloc(RSA_size(p));
if(RSA_public_encrypt(pt_len,(unsigned char *) pt,ct, p, 
RSA_PKCS1_OAEP_PADDING) == -1)
  return 4;
free(ct);
RSA_free(p);
return 0;
}


Here is the valgrind output:

==2330== 528 bytes in 10 blocks are still reachable in loss record 2 of 2
==2330==at 0x4A05809: malloc (vg_replace_malloc.c:149)
==2330==by 0x35156DAD51: CRYPTO_malloc (in /lib64/libcrypto.so.0.9.8e)
==2330==by 0x351567EAC8: lh_new (in /lib64/libcrypto.so.0.9.8e)
==2330==by 0x351565B4C4: (within /lib64/libcrypto.so.0.9.8e)
==2330==by 0x351565B5E5: (within /lib64/libcrypto.so.0.9.8e)
==2330==by 0x351565B98A: (within /lib64/libcrypto.so.0.9.8e)
==2330==by 0x351566F9B3: RSA_new_method (in /lib64/libcrypto.so.0.9.8e)
==2330==by 0x40083D: main (rsatest.c:24)
==2330==
==2330== LEAK SUMMARY:
==2330==definitely lost: 168 bytes in 1 blocks.
==2330==  possibly lost: 0 bytes in 0 blocks.
==2330==still reachable: 528 bytes in 10 blocks.
==2330== suppressed: 0 bytes in 0 blocks.


__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org
   


__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org


Re: possible user error / memory leak using RSA_new() and RSA_free();

2010-04-19 Thread Stuart Weatherby
Thanks Steve,

After commenting out lines 24  25 there is still unfree'd memory:

Stuart


==8155== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 4 from 1)
==8155== malloc/free: in use at exit: 528 bytes in 10 blocks.
==8155== malloc/free: 137 allocs, 127 frees, 13,340 bytes allocated.
==8155== For counts of detected errors, rerun with: -v
==8155== searching for pointers to 10 not-freed blocks.
==8155== checked 227,584 bytes.
==8155==
==8155== 528 bytes in 10 blocks are still reachable in loss record 1 of 1
==8155==    at 0x4A05809: malloc (vg_replace_malloc.c:149)
==8155==    by 0x35156DAD51: CRYPTO_malloc (in /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x351567EAC8: lh_new (in /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x351565B4C4: (within /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x351565B5E5: (within /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x351565B98A: (within /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x351567698F: BIO_set (in /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x3515676A19: BIO_new (in /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x351569DE71: PEM_ASN1_read (in /lib64/libcrypto.so.0.9.8e)
==8155==    by 0x400836: main (rsatest.c:30)
==8155==
==8155== LEAK SUMMARY:
==8155==    definitely lost: 0 bytes in 0 blocks.
==8155==  possibly lost: 0 bytes in 0 blocks.
==8155==    still reachable: 528 bytes in 10 blocks.
==8155== suppressed: 0 bytes in 0 blocks.

- Original Message 
From: Dr. Stephen Henson st...@openssl.org
To: openssl-users@openssl.org
Sent: Mon, April 19, 2010 3:12:53 PM
Subject: Re: possible user error / memory leak using RSA_new() and RSA_free();

On Mon, Apr 19, 2010, Stuart Weatherby wrote:

 Hi List,
 
 I am trying to figure out why there is a memory leak using RSA_new  RSA_free:
 Below is a code sample (which will produce a memory leak) and the relevent 
 valgrind output. I have checked the documentation but I still fail to see my 
 error. 
 
 As I understand the docuumentation, RSA_free() is the only required call to 
 free memory allocated using the RSA_new() function. 
 
 Thanks,
 
 Stuart
 
 
 int main (void)
 {
    FILE *fp;
    RSA  *p = NULL;
    char *pt = hi\0;
    char pt_0 = *pt;
    int pt_len = strlen(pt);
    unsigned char *ct;
    int ct_len = 0;
 
    if ((p = RSA_new()) == NULL)
   return 1;
    if ((fp = fopen (pub.key, rb)) == NULL)
   return 2;
    if ((p = PEM_read_RSA_PUBKEY(fp, NULL, NULL, NULL)) == NULL)
    {
   fclose(fp);
   return 3;
    }
    fclose(fp);
    ct = malloc(RSA_size(p));
    if(RSA_public_encrypt(pt_len,(unsigned char *) pt,ct, p, 
 RSA_PKCS1_OAEP_PADDING) == -1)
  return 4;
    free(ct);
    RSA_free(p);
    return 0;
 }
 

You are allocating an RSA structure then completely overwriting the pointer
with a new one. Leaving the original as the leak.

Delete the RSA_new() call.

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
__
OpenSSL Project                                http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                          majord...@openssl.org



__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org


Re: possible user error / memory leak using RSA_new() and RSA_free();

2010-04-19 Thread Dr. Stephen Henson
On Mon, Apr 19, 2010, Stuart Weatherby wrote:

 Thanks Steve,
 
 After commenting out lines 24  25 there is still unfree'd memory:
 

http://www.openssl.org/support/faq.html#PROG13

Steve.
--
Dr Stephen N. Henson. OpenSSL project core developer.
Commercial tech support now available see: http://www.openssl.org
__
OpenSSL Project http://www.openssl.org
User Support Mailing Listopenssl-users@openssl.org
Automated List Manager   majord...@openssl.org