본문 바로가기

Heap analysis/glibc 2.23

(glibc 2.23) check_remalloced_chunk

전체 코드는 아래 더보기

더보기
/*
   Properties of chunks recycled from fastbins
 */

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

  if (!chunk_is_mmapped (p))
    {
      assert (av == arena_for_chunk (p));
      if (chunk_non_main_arena (p))
        assert (av != &main_arena);
      else
        assert (av == &main_arena);
    }

  do_check_inuse_chunk (av, p);

  /* Legal size ... */
  assert ((sz & MALLOC_ALIGN_MASK) == 0);
  assert ((unsigned long) (sz) >= MINSIZE);
  /* ... and alignment */
  assert (aligned_OK (chunk2mem (p)));
  /* chunk is less than MINSIZE more than request */
  assert ((long) (sz) - (long) (s) >= 0);
  assert ((long) (sz) - (long) (s + MINSIZE) < 0);
}

재할당될 청크에 대한 검사를 하는 함수로 검사하는 항목은 아래와 같다

  • p의 아레나가 현재 아레나와 동일한지 검사 ( IS_MMAPED 비트가 설정되지 않았을 경우 )
  • do_check_inuse_chunk 호출 ( ...를 한다 )
  • 사이즈가 정렬되있고 범위내에 존재하는 지 검사
  • 재할당될 주소 정렬되어 있는지 검사

 

 

 

 

인자 및 변수


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

 				 ...
  • av : 현재 아레나
  • p : 재할당될 freed chunk
  • s : 요청된 chunk 사이즈
  • sz : p->size (prev_inuse, non_main_arena 비트 제거 )

 

not mmapped


  if (!chunk_is_mmapped (p))
    {
      assert (av == arena_for_chunk (p));
      if (chunk_non_main_arena (p))
        assert (av != &main_arena);
      else
        assert (av == &main_arena);
    }

 p가 mmap으로 할당되지 않으면 조건문을 수행한다

  • p가 av 아레나에 있는지 검사
  • p가 main아레나에 있고없고에 따라 av가 main아레나인지 아닌지 검사

check


  do_check_inuse_chunk (av, p);

 

do_check_inuse_chunk에서 청크 p와 인접한 청크에 대한 검사를 수행한다

 

  /* Legal size ... */
  assert ((sz & MALLOC_ALIGN_MASK) == 0);
  assert ((unsigned long) (sz) >= MINSIZE);
  /* ... and alignment */
  assert (aligned_OK (chunk2mem (p)));
  /* chunk is less than MINSIZE more than request */
  assert ((long) (sz) - (long) (s) >= 0);
  assert ((long) (sz) - (long) (s + MINSIZE) < 0);

재할당될 p에 대한 검사를 한다

  • 청크 p의 사이즈가 유효한지
  • 헤더 크기를 제외한 p가 정렬 되어 있는지
  • p의 size와 할당할 크기 비교

 


사용된 함수 및 매크로

 

do_check_inuse_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_free_chunk  (0) 2022.03.22
(glibc 2.23) do_check_chunk  (0) 2022.03.01
(glibc 2.23) do_check_inuse_chunk  (0) 2022.03.01