# ARMv9 Realm과 CCA 구조

v6.18.37 / arch/arm64/kernel/rsi.c

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

## realm_ioremap_hook

```c

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;
}

```

### 132행

```c

static int realm_ioremap_hook(phys_addr_t phys, size_t size, pgprot_t *prot)

```

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

### 134행

```c

	if (arm64_rsi_is_protected(phys, size))

```

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

### 135행

```c

		*prot = pgprot_encrypted(*prot);

```

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

### 136행

```c

	else

```

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

### 137행

```c

		*prot = pgprot_decrypted(*prot);

```

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

### 139행

```c

	return 0;

```

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

