Post

[glibc 2.30] ptmalloc2 분석(5)

개요

이전 포스터에 이어서 glibc 2.30 버전에서 패치된 사항을 분석하고자 합니다. 새로운 개념이 등장한 것은 아니지만 많은 부분에서 수정이 이루어져서 포스터를 작성합니다. 앞선 포스터를 먼저 보시는 것을 추천드립니다!

tcache 검증

__libc_malloc

우선 해당 함수에서 소소한 변화가 있었습니다.

1
2
3
4
5
6
7
_Static_assert (PTRDIFF_MAX <= SIZE_MAX / 2,
                "PTRDIFF_MAX is not more than half of SIZE_MAX");
...

  if (tc_idx < mp_.tcache_bins
    && tcache
    && tcache->counts[tc_idx] > 0)

위와 같이 새로운 검증이 추가되었고 tcache→counts가 생겼습니다.

Large bin 검증

해당 함수에서 double linked list를 막기위한 검증이 추가되었습니다. 소스코드는 아래와 같습니다.

1
2
3
4
5
6
7
if (__glibc_unlikely (fwd->bk_nextsize->fd_nextsize != fwd))
  malloc_printerr ("malloc(): largebin double linked list corrupted (nextsize)");
  
...

if (bck->fd != fwd)
  malloc_printerr ("malloc(): largebin double linked list corrupted (bk)");

unsorted_bin에서 chunk를 가져와서 할당할 때, chunk의 크기가 largebin일 경우 위와 같이 double linked list와 관련된 검증이 추가되었습니다.

결론

glibc 2.30에서는 많은 수정은 없었지만, largebin에서 chunk를 가져와서 할당할 때 발생하던 문제를 해결하기 위한 검증이 추가된 것을 확인할 수 있습니다.

This post is licensed under CC BY 4.0 by the author.