LINUX.ORG.RU

История изменений

Исправление Deleted, (текущая версия) :

λ> cat fofofo.c
#include <stdlib.h>
#include <stdio.h>

typedef struct _DATE
{
  short year;
  char month;
  char day;

} DATE, *PDATE;

int main ()
{
  PDATE date = calloc(1, sizeof(struct _DATE));
  if (NULL == date)
    {
      return 1;
    }

  free(date);
  free(date);
  return 0;
}
λ> gcc -Wall fofofo.c -o fofofo
λ> ./fofofo
*** glibc detected *** ./fofofo: double free or corruption (fasttop): 0x0000000001687010 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7f430f1c9d76]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f430f1ceb1c]
./fofofo[0x40058d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x7f430f171ead]
./fofofo[0x400469]
======= Memory map: ========
00400000-00401000 r-xp 00000000 fe:01 412191                             /tmp/fofofo
00600000-00601000 rw-p 00000000 fe:01 412191                             /tmp/fofofo
01687000-016a8000 rw-p 00000000 00:00 0                                  [heap]
7f4308000000-7f4308021000 rw-p 00000000 00:00 0
7f4308021000-7f430c000000 ---p 00000000 00:00 0
7f430ef3d000-7f430ef52000 r-xp 00000000 fe:01 1175044                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430ef52000-7f430f152000 ---p 00015000 fe:01 1175044                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f152000-7f430f153000 rw-p 00015000 fe:01 1175044                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f153000-7f430f2d5000 r-xp 00000000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f2d5000-7f430f4d4000 ---p 00182000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d4000-7f430f4d8000 r--p 00181000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d8000-7f430f4d9000 rw-p 00185000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d9000-7f430f4de000 rw-p 00000000 00:00 0
7f430f4de000-7f430f4fe000 r-xp 00000000 fe:01 1175066                    /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6d1000-7f430f6d4000 rw-p 00000000 00:00 0
7f430f6fb000-7f430f6fd000 rw-p 00000000 00:00 0
7f430f6fd000-7f430f6fe000 r--p 0001f000 fe:01 1175066                    /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6fe000-7f430f6ff000 rw-p 00020000 fe:01 1175066                    /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6ff000-7f430f700000 rw-p 00000000 00:00 0
7fff37ed2000-7fff37ef3000 rw-p 00000000 00:00 0                          [stack]
7fff37fa0000-7fff37fa2000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
[1]    17049 abort      ./fofofo

Такие вещи можно и самому было попробовать и проверить.

Исходная версия Deleted, :

λ> cat fofofo.c
#include <stdlib.h>
#include <stdio.h>

typedef struct _DATE
{
  short year;
  char month;
  char day;

} DATE, *PDATE;

int main ()
{
  PDATE date = calloc(1, sizeof(struct _DATE));
  if (NULL == date)
    {
      return 1;
    }

  free(date);
  free(date);
  return 0;
}
λ> gcc -Wall fofofo.c -o fofofo
λ> ./fofofo
*** glibc detected *** ./fofofo: double free or corruption (fasttop): 0x0000000001687010 ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x76d76)[0x7f430f1c9d76]
/lib/x86_64-linux-gnu/libc.so.6(cfree+0x6c)[0x7f430f1ceb1c]
./fofofo[0x40058d]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xfd)[0x7f430f171ead]
./fofofo[0x400469]
======= Memory map: ========
00400000-00401000 r-xp 00000000 fe:01 412191                             /tmp/fofofo
00600000-00601000 rw-p 00000000 fe:01 412191                             /tmp/fofofo
01687000-016a8000 rw-p 00000000 00:00 0                                  [heap]
7f4308000000-7f4308021000 rw-p 00000000 00:00 0
7f4308021000-7f430c000000 ---p 00000000 00:00 0
7f430ef3d000-7f430ef52000 r-xp 00000000 fe:01 1175044                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430ef52000-7f430f152000 ---p 00015000 fe:01 1175044                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f152000-7f430f153000 rw-p 00015000 fe:01 1175044                    /lib/x86_64-linux-gnu/libgcc_s.so.1
7f430f153000-7f430f2d5000 r-xp 00000000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f2d5000-7f430f4d4000 ---p 00182000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d4000-7f430f4d8000 r--p 00181000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d8000-7f430f4d9000 rw-p 00185000 fe:01 1175043                    /lib/x86_64-linux-gnu/libc-2.13.so
7f430f4d9000-7f430f4de000 rw-p 00000000 00:00 0
7f430f4de000-7f430f4fe000 r-xp 00000000 fe:01 1175066                    /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6d1000-7f430f6d4000 rw-p 00000000 00:00 0
7f430f6fb000-7f430f6fd000 rw-p 00000000 00:00 0
7f430f6fd000-7f430f6fe000 r--p 0001f000 fe:01 1175066                    /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6fe000-7f430f6ff000 rw-p 00020000 fe:01 1175066                    /lib/x86_64-linux-gnu/ld-2.13.so
7f430f6ff000-7f430f700000 rw-p 00000000 00:00 0
7fff37ed2000-7fff37ef3000 rw-p 00000000 00:00 0                          [stack]
7fff37fa0000-7fff37fa2000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
[1]    17049 abort      ./fofofo

Уж такие вещи можно и самом попробовать и проверить.