리눅스커널

포스트: 154|조회수: 0|TERM
Items

Posts

154 posts

[리눅스커널][가상파일시스템] 파일 객체: close() 함수 연산 세부 동작 분석

Guillermo Austin Kim|2019년 4월 2일

파일 객체: close() 함수 연산 세부 동작 분석 다음 파일을 닫을 때 호출하는 sys_close() 함수 코드를 볼 차례입니다.1 SYSCALL_DEFINE1(close, unsigned int, fd)2 {3 int retval = __close_fd(current->files, fd);45 /* can't restart close syscall because file table entry was cleared */6 if (unlikely(retval == -ERESTARTSYS ||7 retval == -ERESTARTNOINTR ||8 retval == -ERESTARTNOHAND ||9 retval == -ERESTART_RESTARTBLOCK))10

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

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)

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

[리눅스커널][디버깅] 슬럽(슬랩) 캐시 오브젝트 T32로 메모리 디버깅하기

Guillermo Austin Kim|2019년 3월 30일

리눅스 커널 동적 메모리 할당을 위해 슬럽 캐시를 씁니다.이번 시간에서는 kmalloc-64 슬럽 캐시 자료 구조를 통해 kmalloc-64 슬럽 오브젝트를 확인하는 방법을 소개합니다. 먼저 kmalloc-size 타입 슬럽 캐시를 관리하는 kmalloc_caches 전역 변수를 보겠습니다. kmalloc_caches 전역 변수의 세부 필드는 다음과 같습니다. (static struct kmem_cache * [14]) kmalloc_caches = ( [0] = 0x0, [1] = 0x0, [2] = 0xF1401E00, // "kmalloc-192" [3] = 0x0, [4] = 0x0, [5] = 0x0, [6] = 0xF1401F00 -> (