c

2 posts

C 코드를 전면 rewrite 없이 capability 하드웨어에서 실행할 수 있다

CHERI의 하이브리드 ABI를 사용하면 기존 C 코드를 capability 하드웨어로 점진적으로 이식할 수 있다. 컴파일 방법, 어떤 문제가 발생하는지, 그리고 전체 codebase를 rewrite하지 않고 해결하는 방법을 알아본다。

Rust로 rewrite하기에는 너무 크고, 버퍼 오버플로우에 노출된 채로 두기에는 너무 중요한 C codebase가 있다고 하자. CHERI capability 하드웨어는 CPU 수준에서 메모리 안전성 위반을 잡아낼 수 있지만, 인터넷에서는 CHERI 포인터가 128비트이고 기존…

C 의존성 라이브러리가 전체 프로세스를 중단시킬 수 있다. WebAssembly가 이를 막는다.

단일 C 라이브러리를 격리하기 위해 컨테이너를 사용하는 것은 과도하다. WebAssembly로 컴파일하여 WASI 샌드박스 내에서 실행하면 메모리 안전성, 캐퍼빌리티 기반 파일시스템 접근, 크래시 격리를 Docker 없이도 할 수 있다.

C 라이브러리 내부의 단 하나의 널 포인터 역참조가 전체 애플리케이션을 중단시킬 수 있다. 해당 라이브러리가 사용자 입력을 파싱하거나, 이미지를 압축 해제하거나, 트워크 프로토콜을 처리한다면, 잘못된 하나의 패킷이 크래시를 일으킬 수 있다. 컨테이너는 이 문제를 해결하지만, 하나의…