슬럽오브젝트

Category
아이템: 슬럽오브젝트(3)
포스트 갯수3

[리눅스커널] ARMv8: 슬럽 오브젝트의 트랙(track) 구조체를 TRACE32로 디버깅하기

By Guillermo Austin Kim | 2020년 4월 28일 | 
이번 시간에는 64비트 기반 ARMv8 아키텍처(커널 4.19 버전)에서의 슬럽 오브젝트의 디버깅 정보를 확인해보겠습니다. 슬럽 오브젝트의 패턴을 빨리 확인하는 좋은 컨텐츠였으면 좋겠습니다. 크래시 유틸리티로 슬랩 페이지(kmalloc-256)를 확인 ffffffbf50925d00 슬럽 오브젝트의 속성을 확인하기 위해 'kmem ffffffbf50925d00' 명령어를 입력하겠습니다. 여기서 kmem 오른쪽에 보이는 주소는 슬랩 페이지 디스크립터입니다. crash64> kmem ffffffbf50925d001 CACHE OBJSIZE ALLOCATED TOTAL SLABS SSIZE NAME2 ffffffd3c08e7780 256 36025

[리눅스커널][디버깅] 슬럽(슬랩) 오브젝트 레드존 데이터 구조 T32로 메모리 디버깅(2)

By Guillermo Austin Kim | 2019년 4월 1일 | 
할당(Alloc)된 슬럽 오브젝트 데이터 스트럭처 파악하기 이전 포스팅에서는 Free 슬럽 오브젝트 주소인 0xC0067BC0 기준으로 어떤 패턴의 자료구조인지 파악했습니다. 이번 시간에서는 이미 할당된 슬럽 오브젝트의 데이터 스트럭처를 파악하겠습니다. ________address|_data________|value_____________|symbol NSD:C0067A80| 41 1A 17 00 0x171A41 //<-- "kmalloc-64" 슬럽 오브젝트 시작 주소 NSD:C0067A84| 11 00 00 00 0x11 NSD:C0067A88| 01 00 00 00 0x1 NSD:C0067A8C| 01 00 00

[리눅스커널][디버깅] 슬럽(슬랩) 오브젝트 레드존 데이터 구조 T32로 메모리 디버깅(1)

By Guillermo Austin Kim | 2019년 4월 1일 | 
이번 시간에서는 슬럽 오브젝트의 레드 존에 대해서 확인하는 시간을 갖겠습니다.여러 개발자들이 리눅스 드라이버를 개발하다 보면 슬럽 오브젝트를 깨버리는 코드를 작성할 수 있습니다.결과 메모리가 오염돼서 랜덤하게 커널 크래시가 발생합니다. 이런 상황에 메모리 오염을 일으킨 범인을 찾기 위해 슬럽 오브젝트에 포이즌과 레드존을 추가했습니다. Free 슬럽 오브젝트 데이터 스트럭처 확인하기 먼저 kmalloc_caches 전역 변수를 통해 "kmalloc-64" 슬럽 캐시 주소를 알아봅시다.01 (static struct kmem_cache * [14]) kmalloc_caches = (02 [0x0] = 0x0,03 [0x1] = 0x0,04 [0x2] = 0xE4402340,05 [0