개요
Intel MPK는 다음과 같은 3가지 장점이 있다.
- Performance
- group-wise control (PKRU레지스터 변경으로 한번에 permission 변경 가능)
- per-thread view
- user control permission
그러나 이걸 바로 사용하기에는 다음과 같은 문제가 있다.
- protection key use after free: 리눅스 시스템 콜 pkey_free이후에 해제된 키를 사용시 기존의 해제된 부분의 permission도 같이 움직임.
- Synchomization between threads: 서로 다른 스레드에서 퍼미션이 공유되지 않음. (예를 들어서 shared memory에 access시 스레드가 다르면 execute만 허용해도 다른 스레드에서 write할 수 있음)
- Only 16 keys: 한번에 16개의 키만 사용할 수 있음.
이를 해결하기 위해서 다음과 같은 일을 하였다.
- Protection key virtualization
- lazy inter thread key synchronization
- metadata integrity
이를 구현하기 위해서 libmpk는 user-level libmpk라이브러리와 커널 모듈을 개발하여서 위와 같은 기능을 구현하였다. 결과적으로 negligible overhead ( < 1%)만 가지고도 성공적으로 메모리 영역을 보호할 수 있었다.