2009-01-23 18 views
8

Tengo una aplicación que tiene que calcular el MD5 del archivo, tengo usé la biblioteca de openssl, valgrind se queja de que aún hay algunos bloques accesibles.openssl/valgrind

Compilar el siguiente código:

#include <openssl/bio.h> 

int main(int, char**) 
{ 
    BIO * mem = BIO_new(BIO_s_mem()); 
    BIO_vfree(mem); 
    return 0; 
} 

la carrera se usa valgrind esto es lo que estoy obteniendo:

==23597== 220 bytes in 6 blocks are still reachable in loss record 1 of 1 
==23597== at 0x4022D78: malloc (vg_replace_malloc.c:207) 
==23597== by 0x432FD0D: (within /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x433036E: CRYPTO_malloc (in /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x43989C9: lh_new (in /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x4332025: (within /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x433249B: (within /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x4332B5D: CRYPTO_new_ex_data (in /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x438E053: BIO_set (in /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x438E0E9: BIO_new (in /usr/lib/i686/cmov/libcrypto.so.0.9.8) 
==23597== by 0x80485E1: main (in /home/kalman/cxx_test/md5test/a.out) 

alguien tenía misma experiencia?

Respuesta

3

OpenSSL tiene acciones que confunden a Valgrind cuando no están compiladas con -DPURIFY. Is this the error you are seeing?

+0

Como un ejemplo de lo que sucede cuando no se utiliza -DPURIFY, ver http://www.metasploit.com/users/hdm/tools/debian-openssl/ (I No estoy diciendo que ejecutar valgrind sin -DPURIFY haya provocado directamente el error, pero ha provocado que las personas tomen acciones que terminaron causando el error). :-PAG –

3

Creo que esas son algunas estructuras estáticas que openssl asigna. Me encontré con su código, y me encontré con el siguiente código y valgrind informado de que ambos tenían la misma cantidad de memoria unfreed:

#include <openssl/bio.h> 

int main(int, char**) 
{ 
    BIO * mem = BIO_new(BIO_s_mem()); 
    BIO * mem2 = BIO_new(BIO_s_mem()); 
    BIO * mem3 = BIO_new(BIO_s_mem()); 
    BIO * mem4 = BIO_new(BIO_s_mem()); 
    BIO_vfree(mem); 
    BIO_vfree(mem2); 
    BIO_vfree(mem3); 
    BIO_vfree(mem4); 
    return 0; 
} 

~

2

OpenSSL contiene una gran cantidad de variables sin inicializar, variables y la memoria no liberados, variables nunca borradas y no alcanzables fuera del alcance incluso para ser liberadas manualmente. Valgrind encuentra muchos de estos.

El indicador PURIFY solo está relacionado con la función rand() _. Entonces, para evitar una detección en Purify, Openssl en realidad usa un código fuente diferente si ese indicador está configurado. Buena codificación ... ¿Tal vez sea mejor arreglar el problema en primer lugar?