문서 편집 권한이 없습니다. 다음 이유를 확인해주세요: 요청한 명령은 다음 권한을 가진 사용자에게 제한됩니다: 사용자. 문서의 원본을 보거나 복사할 수 있습니다. [[분류: 시스템 논문]] ACSAC 2021 == 개요 == Rust는 sound하지만 incomplete하다. 이러한 단점을 극복하기 위해서 러스트는 unsafe keyword를 제공함으로써 외부 unsafe한 언어로 적힌 라이브러리들을 import할 수 있도록 한다. 그러나 이러한 라이브러에서 발생한 error는 전체 safe한 러스트에도 영향을 가한다. 이를 분리 하기위해서 runtime check를 각 코드에 가함으로써 메모리가 분리되어 영향을 끼치지 못하도록 하였다. == Design == 우선 Rust code는 Unsafe code영역 즉 Unsafe code가 allocated 한 메모리 영역에 모두 접근 할 수 있지 그 반대의 경우에는 unsafe code area에서만 접근할 수 있도록 하였다. 이를 위하여 다음과 같은 Design을 제시하였다. * Heap Isolation: Unsafe code와 Safe code (RUST)가 사용하는 힙의 Access를 분리함. * Heap Splitting: Rust와 external library가 사용하는 힙을 분리함. * Access checking (i.e. Sanitizer): 러스트 내부의 포인터를 직접 제공하지 않고 API와 id를 제시함으로써 Rust code에서 지정된 동작으로 적절한 응답이 왔는지 체크할 수 있도록 함. 이떄 Heap Isolation그리고 Heap Splitting은 [[libmpk]]를 통해서 구현하였다. 또한 Access checking은 Pesudo-pointer개념을 Rust macro와 C API를 통하여 구현하였다. 여기서 이러한 Access checking을 위해서 기존의 pointer based방식을 id verfication으로 바꾸기 위해서 자동화된 LLVM을 통하여 자동으로 바뀔수 있도록 즉 developer의 노력을 덜 수 있도록 하였다. Keeping Safe Rust Safe with Galeed 문서로 돌아갑니다.