Linux v6.18.37 · 개념과 코드 읽기

ARMv9 Realm과 CCA 구조

이 코드는 어떤 문제를 푸나요?

Realm은 일반 VM과 다른 신뢰 관계를 다룹니다. 호스트가 실행 자원을 관리하더라도 보호된 메모리를 마음대로 읽는 주체가 되지 않도록 RMM과 하드웨어 규칙을 사용합니다. 여기서는 v6.18.37 Realm 게스트의 보호·공유 매핑 선택 함수를 읽습니다. 호스트가 Realm을 생성하는 RMI 구현 전체를 지원한다는 주장과 구분합니다.

읽을 범위: v6.18.37 · arch/arm64/kernel/rsi.c · realm_ioremap_hook 132–140행입니다. 아래에 이 범위의 원문과 각 줄의 설명을 실었습니다. 주제 전체의 흐름과 다른 경로는 기존 분석에서 함께 읽으실 수 있습니다.

먼저 알아둘 개념

RMI와 RSI

RMI는 호스트와 RMM 사이, RSI는 Realm 게스트와 RMM 사이의 인터페이스입니다.

보호와 공유

장치 에뮬레이션 등 호스트와 통신할 데이터는 공유 상태가 필요할 수 있습니다. 보호 메모리를 그대로 호스트에 주는 것과 다릅니다.

pgprot 이름

커널의 encrypted/decrypted 추상화가 이 아키텍처에서는 보호·공유 속성 선택으로 연결됩니다. 함수 이름만으로 특정 암호 알고리즘을 뜻한다고 읽지 않습니다.

처음 읽을 때

호스트·RMM·Realm 게스트를 세 주체로 나누고 누가 무엇을 읽을 수 있는지 설명하십시오.

더 깊이 살펴볼 때

보호 상태 조회 실패 처리와 공유 전환의 메모리 수명·동기화 조건을 더 추적하십시오.

그림으로 보는 변화

호스트는 RMI, Realm 게스트는 RSI로 RMM에 요청하는 그림. 실제 v6.18.37 realm_ioremap_hook은 보호 범위면 pgprot_encrypted, 그 외면 pgprot_decrypted를 선택합니다. 화살표는 인터페이스 요청과 조건 분기이며 데이터 복사나 암호화 수행을 뜻하지 않습니다.
RMI는 호스트, RSI는 Realm 게스트가 사용하는 인터페이스입니다. 아래는 실제 게스트 함수가 범위의 보호 상태에 따라 매핑 속성을 선택하는 관계입니다.
ARMv9 Realm과 CCA 구조의 단계별 개념 그림
각 단계에 화살표 의미와 생략 범위를 표시했습니다. 주소·숫자 예제는 실제 장치 값을 뜻하지 않습니다.
1단계 설명

1단계 고정

GIF 원본 열기

1. 범위 상태 확인

ioremap 대상 물리 범위가 보호된 범위인지 확인합니다.

화살표는 CPU 주소 매핑의 속성 선택입니다.

2. 매핑 속성 선택

보호 범위와 공유 범위에 다른 pgprot를 적용합니다.

바이트를 암호화하는 루프를 수행하는 단계는 아닙니다.

3. 매핑 경로 복귀

설정한 속성을 상위 ioremap 경로에 전달합니다.

게스트의 매핑 선택이며 Realm 생성 요청은 아닙니다.

realm_ioremap_hook를 한 줄씩 읽기

줄 번호는 v6.18.37 원문 기준입니다. 주석·빈 줄을 포함한 함수 전체를 먼저 보고, 그 아래에서 각 줄을 설명합니다.

static int realm_ioremap_hook(phys_addr_t phys, size_t size, pgprot_t *prot)
{
	if (arm64_rsi_is_protected(phys, size))
		*prot = pgprot_encrypted(*prot);
	else
		*prot = pgprot_decrypted(*prot);

	return 0;
}
static int realm_ioremap_hook(phys_addr_t phys, size_t size, pgprot_t *prot)

Realm 게스트의 ioremap에서 물리 범위·길이·페이지 보호 속성을 받아 속성을 조정하는 hook입니다. 이 함수만으로 Realm을 생성하지 않습니다.

	if (arm64_rsi_is_protected(phys, size))

대상 범위가 보호 상태인지 RSI 관련 helper로 확인합니다. 일반적인 주소 크기 비교와 다른 보호 상태 질의입니다.

		*prot = pgprot_encrypted(*prot);

보호 범위라면 커널의 encrypted 속성 추상화에 맞는 pgprot로 변경합니다. 이 줄이 데이터 바이트를 암호화하는 루프는 아닙니다.

	else

보호 상태가 아닌 경우 공유 측 속성 선택으로 나뉩니다.

		*prot = pgprot_decrypted(*prot);

커널의 decrypted 속성 추상화를 적용하여 공유 범위에 맞는 매핑 속성을 만듭니다.

	return 0;

속성 조정 hook이 끝났음을 성공으로 반환합니다. 실제 ioremap의 표 설치는 상위 경로에서 이어집니다.

함께 생각해 볼 질문

Realm이면 모든 장치 DMA가 자동 보호됩니까?

장치 신뢰·할당·IOMMU와 플랫폼 지원을 별도로 확인해야 합니다.

게스트 RSI가 Realm을 생성합니까?

생성은 호스트의 RMI 측 역할이며 RSI와 구분합니다.

이 태그의 rsi.c만으로 모든 CCA 호스트 기능을 입증합니까?

아닙니다. 여기서 확인한 것은 구체적인 게스트 측 함수입니다.

출처와 읽은 범위

Linux stable v6.18.37 · arch/arm64/kernel/rsi.c

해당 버전 원본 파일 · 기존 코드 분석 · 설명 원고

맨 위로 ↑