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 List                    openssl-users@openssl.org
Automated List Manager                           majord...@openssl.org

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

Reply via email to