zero page? bad page?

훌륭한녀석의 이미지

리눅스 커널 소스를 보고 있습니다.
paging_init()함수에서 나타나는 주석문중에

arch/arm/mm/init.c

/*
 * paging_init() sets up the page tables, initialises the zone memory
 * maps, and sets up the zero page, bad page and bad page tables.
 */

이런 설명이 있는데 zero page라는것과 bad page 그리고 bad page table이란게 어떤것인지 모르겠군요!
나름대로 understanding linux kernel 책도 보고 했는데, 슬프군요!

운형의 이미지

zero page는...

메모리 페이지를 할당하고 해제하는 함수는 기본적으로

struct page* __alloc_pageㄴ(int gfp_mask, unsigned long order);
unsigned long __get_free_pages(int gfp_mask, unsigned long order);

가 있는데 이것으로 페이지를 할당하면 해당 메모리 영역의 내용은 관심을 두지 않습니다. 즉 이전에 사용했었다면, 그 내용이 메모리에 남아 있을 수 있다는 이야기입니다.
가령, 지금 할당된 페이지위치에 이전 사용자가 passwd등을 입력했던 곳이라면 그 내용을 읽어 보안상의 문제를 야기 할 수 있게된다는 거죠.

그래서 페이지를 할당하면서, 해당 메모리 위치를 0으로 채운 상태로 만들기를 원하게 되고 이를 zero page라합니다.

unsigned long get_zeroed_page(int gfp_mask);

위의 함수를 사용하는 것이 더 타당하겠죠.

bad page, bad pages table은 대강 느낌만 오지 정확히 기억이 안나서... :o

어려운 책으로 시작을 하신듯...
저도 처음에 그책을 봤고, linux kernel programming이란 책을 나중에 봤는데... 후자가 조금 쉽게 접근한것 같네요... 물론 보는 순서를 바꿔 봤다면, 반대로 이야기 할지 모르겟지만요.

Do you think that's the air you are breathing now?