[glibc 2.30] ptmalloc2 분석(5)
개요
이전 포스터에 이어서 glibc 2.30
버전에서 패치된 사항을 분석하고자 합니다. 새로운 개념이 등장한 것은 아니지만 많은 부분에서 수정이 이루어져서 포스터를 작성합니다. 앞선 포스터를 먼저 보시는 것을 추천드립니다!
- [glibc 2.23] malloc 분석(1)
- [glibc 2.26] malloc 분석(2)
- [glibc 2.27] malloc 분석(3)
- [glibc 2.29] malloc 분석(4)
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.