본문 바로가기

Heap analysis/glibc 2.23

(glibc 2.23) do_check_free_chunk

전체 코드는 아래 더보기

더보기
/*
   Properties of free chunks
 */

static void
do_check_free_chunk (mstate av, mchunkptr p)
{
  INTERNAL_SIZE_T sz = p->size & ~(PREV_INUSE | NON_MAIN_ARENA);
  mchunkptr next = chunk_at_offset (p, sz);

  do_check_chunk (av, p);

  /* Chunk must claim to be free ... */
  assert (!inuse (p));
  assert (!chunk_is_mmapped (p));

  /* Unless a special marker, must have OK fields */
  if ((unsigned long) (sz) >= MINSIZE)
    {
      assert ((sz & MALLOC_ALIGN_MASK) == 0);
      assert (aligned_OK (chunk2mem (p)));
      /* ... matching footer field */
      assert (next->prev_size == sz);
      /* ... and is fully consolidated */
      assert (prev_inuse (p));
      assert (next == av->top || inuse (next));

      /* ... and has minimally sane links */
      assert (p->fd->bk == p);
      assert (p->bk->fd == p);
    }
  else /* markers are always of size SIZE_SZ */
    assert (sz == SIZE_SZ);
}

 


 

 

  INTERNAL_SIZE_T sz = p->size & ~(PREV_INUSE | NON_MAIN_ARENA);
  mchunkptr next = chunk_at_offset (p, sz);

  do_check_chunk (av, p);

필요한 변수 sz와 next를 선언한 뒤 do_check_chunk를 통해 검사를 수행한다

  • sz : 청크 p의 사이즈 
  • next: 청크 p의 다음 청크

 

  /* Chunk must claim to be free ... */
  assert (!inuse (p));
  assert (!chunk_is_mmapped (p));

청크 p가 free되었고 mmap으로 할당되지 않았는지 검사한다

 

 

  /* Unless a special marker, must have OK fields */
  if ((unsigned long) (sz) >= MINSIZE)
    {
      assert ((sz & MALLOC_ALIGN_MASK) == 0);
      assert (aligned_OK (chunk2mem (p)));
      /* ... matching footer field */
      assert (next->prev_size == sz);
      /* ... and is fully consolidated */
      assert (prev_inuse (p));
      assert (next == av->top || inuse (next));

      /* ... and has minimally sane links */
      assert (p->fd->bk == p);
      assert (p->bk->fd == p);
    }
  else /* markers are always of size SIZE_SZ */
    assert (sz == SIZE_SZ)

p와 p의 size에 대한 검사를 수행한다

 


사용된 함수 및 매크로

 

do_check_chunk 참고글

 

 

'Heap analysis > glibc 2.23' 카테고리의 다른 글

(glibc 2.23)check_malloced_chunk  (0) 2022.03.30
(glibc 2.23) free  (0) 2022.03.23
(glibc 2.23) do_check_chunk  (0) 2022.03.01
(glibc 2.23) do_check_inuse_chunk  (0) 2022.03.01
(glibc 2.23) check_remalloced_chunk  (0) 2022.03.01