메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

LibMPK: Software abstraction for intel memory protection keys (Intel MPK)

noriwiki


개요

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%)만 가지고도 성공적으로 메모리 영역을 보호할 수 있었다.