*** buffer overflow ***

Iniciado por chicoelizio, 13 de Agosto de 2014, 12:17

tópico anterior - próximo tópico

chicoelizio

Bom dia.

Não sei exatamente se é nesse tópico que eu devo postar minha dúvida, se não for,
me direcionem para o tópico exato.
Uso um programa de calculo com rotinas em fortran (cáculos) e c (gráficos).
Uso um notebook com processador core i7 e 8Gb de ram.
O programa roda sem problemas. No final quando os arquivos de saída vão ser gravados
aprece a mensagem de: *** buffer overflow detected ***: ./duns.e terminated
e o backtrace com o Memory map a seguir:

save-flow output at step  2400

> save-plotting
> filename save-spec
> cell-vertices
> variables xH2 xO2 xOH xH2O xO xH xHO2 xH2O2 xNO xNO2
*** buffer overflow detected ***: ./duns.e terminated
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(__fortify_fail+0x45)[0xb76a4eb5]
/lib/i386-linux-gnu/libc.so.6(+0x103c8a)[0xb76a3c8a]
/lib/i386-linux-gnu/libc.so.6(+0x102fbd)[0xb76a2fbd]
./duns.e[0x80b0b87]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xf3)[0xb75b94d3]
./duns.e[0x8049161]
======= Memory map: ========
08048000-080f5000 r-xp 00000000 08:06 677770     /home/ita-gtc/Documentos/Programa/duns-2.7.1-test.tar/duns-2.7.1-test/duns-2.7.1/test/serial/shear/duns.e
080f5000-080f6000 r--p 000ac000 08:06 677770     /home/ita-gtc/Documentos/Programa/duns-2.7.1-test.tar/duns-2.7.1-test/duns-2.7.1/test/serial/shear/duns.e
080f6000-080f9000 rw-p 000ad000 08:06 677770     /home/ita-gtc/Documentos/Programa/duns-2.7.1-test.tar/duns-2.7.1-test/duns-2.7.1/test/serial/shear/duns.e
080f9000-08dea000 rw-p 00000000 00:00 0
09852000-09873000 rw-p 00000000 00:00 0          [heap]
b7566000-b7582000 r-xp 00000000 08:06 4326229    /lib/i386-linux-gnu/libgcc_s.so.1
b7582000-b7583000 r--p 0001b000 08:06 4326229    /lib/i386-linux-gnu/libgcc_s.so.1
b7583000-b7584000 rw-p 0001c000 08:06 4326229    /lib/i386-linux-gnu/libgcc_s.so.1
b759f000-b75a0000 rw-p 00000000 00:00 0
b75a0000-b7744000 r-xp 00000000 08:06 4355608    /lib/i386-linux-gnu/libc-2.15.so
b7744000-b7746000 r--p 001a4000 08:06 4355608    /lib/i386-linux-gnu/libc-2.15.so
b7746000-b7747000 rw-p 001a6000 08:06 4355608    /lib/i386-linux-gnu/libc-2.15.so
b7747000-b774b000 rw-p 00000000 00:00 0
b774b000-b7775000 r-xp 00000000 08:06 4355603    /lib/i386-linux-gnu/libm-2.15.so
b7775000-b7776000 r--p 00029000 08:06 4355603    /lib/i386-linux-gnu/libm-2.15.so
b7776000-b7777000 rw-p 0002a000 08:06 4355603    /lib/i386-linux-gnu/libm-2.15.so
b7777000-b7790000 r-xp 00000000 08:06 262169     /usr/lib/libg2c.so.0.0.0
b7790000-b7791000 rw-p 00019000 08:06 262169     /usr/lib/libg2c.so.0.0.0
b7791000-b779e000 rw-p 00000000 00:00 0
b77b3000-b77bb000 rw-p 00000000 00:00 0
b77bb000-b77bc000 r-xp 00000000 00:00 0          [vdso]
b77bc000-b77dc000 r-xp 00000000 08:06 4355598    /lib/i386-linux-gnu/ld-2.15.so
b77dc000-b77dd000 r--p 0001f000 08:06 4355598    /lib/i386-linux-gnu/ld-2.15.so
b77dd000-b77de000 rw-p 00020000 08:06 4355598    /lib/i386-linux-gnu/ld-2.15.so
bf896000-bf8b7000 rw-p 00000000 00:00 0          [stack]
Abortado (imagem do núcleo gravada)
ita-gtc@itagtc-W240HU-W250HUQ:~/Documentos/Programa/duns-2.7.1-test.tar/duns-2.7.1-test/duns-2.7.1/test/serial/shear$



Pensei a princípio ser pouca memória ram, usei um gerenciador de memória, swap e uso dos processadores.
O uso de memória ram foi muito baixo.
Obrigado pela atenção e ajuda.

ChicoElizio

platao

\\\\\\\\Apostilas Dicas e Guias do Ubuntu\\\\\\\\\> http://ubuntuforum-br.org/index.php/topic,79368.msg440997.html#msg440997

delhmc

#2
Sem o código do programa fica difícil compreender. Será que o seu programa não está invadindo uma área do disco pertencente a outro arquivo/registro (Com uso excedente de ponteiros dentro do código)? Não sei qual a rotina que criação de arquivo que você usa, mas há casos em que, dependendo do tipo da função de leitura/escrita e for preciso depois usar manipuladores do tipo "ponteiro", é preciso ter cautela no tratamento dos dados.

Se você tiver montando seu buffer de dados dentro de um loop (Por exemplo) verifique se em algum momento algo esteja se perdendo e se o índice de sua matriz dinâmica (Estou apenas supondo) não esteja extrapolando.

Outro erro que pode ocorrer é com a definição de um SIZE (Tamanho em bytes a ser gravado no arquivo) errado pra gravar todo o buffer dos dados, tendo um buffer montado maior do que aquele que você indicou na função de criação/escrita deste arquivo.