본문 바로가기

Programming

How to use Linux kptr_restrict

Linux 에서 /proc/sys/kernel/kptr_restrict 는 non-root 유저가 kallsyms 등을 통해서 커널영역 포인터값을 보지 못하게 하는 설정이다.  이 설정이 정확하게 구현되는 방식은 잘 모르겠지만 일단 이 설정을 활용하는 방법은 다음과 같다.

간단히 다음과 같은 샘플 코드를 모로 만들고, non-root process 로 실행시켜보면 결과는 아래와 같다.

        int* z = &[some kernel object];

        printk("%p, %pK\n", z, z);


# kptr_restrict 0 일때

[177917.336534] f99fd17c, f99fd17c


# kptr_restrict 1 일때

[177943.427247] f99fd17c, 00000000


즉 printk 포맷스트링에서 "K" 디렉티브를 뒤에 붙여서 활용한다.