Android 13 為用戶空間引入了 ABI,以將請求的 MTE 模式傳達給引導加載程序。這可用於在具有硬件支持但未默認啟用 MTE 的設備上啟用 MTE,或在附帶 MTE 的設備上禁用 MTE。
引導加載程序支持
要支持此 ABI,您的引導加載程序需要從misc
分區讀取misc_memtag_message
(在bootloader_message.h中定義)。如果找到有效的misc_memtag_message
( MISC_VIRTUAL_AB_MAGIC_HEADER
匹配,並且支持版本號),則引導加載程序計算
memtag = (default_memtag && !(misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_OFF)) || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_ONCE memtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
default_memtag
是 SKU 的默認 memtag 開/關設置。如果memtag
為真,則引導加載程序設置 MTE 標記保留,在較低的異常級別中啟用標記檢查,並通過 DT 將標記保留區域傳達給內核。如果memtag
為 false,則引導加載程序將 arm64.nomte 附加到內核命令行。
如果memtag_kernel
為真,則引導加載程序將kasan=on
附加到內核命令行。
Bootloader必須在每次啟動時清除MISC_MEMTAG_MODE_MEMTAG_ONCE
和MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
。
如果引導加載程序支持fastboot oem mte
,則 on 將MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
設置為(1, 0, 0)
,並將 off 設置為(0, 0, 1)
,同時保留其他標誌。
您應該配置您的產品以構建mtectrl
二進製文件以支持用戶空間。然後,設置ro.arm64.memtag.bootctl_supported
系統屬性以向系統指示您的引導加載程序支持 memtag 消息。
用戶界面
設置ro.arm64.memtag.bootctl_supported
屬性後,開發人員選項菜單中的按鈕允許用戶在啟用 MTE 的情況下重新啟動一次。目標受眾是希望使用 MTE 測試其應用程序的應用程序開發人員。 系統屬性
對於高級用途,系統屬性arm64.memtag.bootctl
可以採用逗號分隔的以下值列表:
- memtag:持久啟用用戶空間 MTE(設置
MISC_MEMTAG_MODE_MEMTAG
) - memtag-once:啟用用戶空間 MTE 一次(設置
MISC_MEMTAG_MODE_MEMTAG_ONCE
) - memtag-kernel:啟用內核空間 MTE(設置
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) - memtag-kernel-once:啟用內核空間 MTE 一次(
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) - memtag-off:禁用 MTE(設置
MISC_MEMTAG_MODE_MEMTAG_OFF
)
必須重新啟動系統才能使新設置生效(因為它由引導加載程序應用)。
,Android 13 為用戶空間引入了 ABI,以將請求的 MTE 模式傳達給引導加載程序。這可用於在具有硬件支持但未默認啟用 MTE 的設備上啟用 MTE,或在附帶 MTE 的設備上禁用 MTE。
引導加載程序支持
要支持此 ABI,您的引導加載程序需要從misc
分區讀取misc_memtag_message
(在bootloader_message.h中定義)。如果找到有效的misc_memtag_message
( MISC_VIRTUAL_AB_MAGIC_HEADER
匹配,並且支持版本號),則引導加載程序計算
memtag = (default_memtag && !(misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_OFF)) || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_ONCE memtag_kernel = misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL || misc.memtag_mode & MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
default_memtag
是 SKU 的默認 memtag 開/關設置。如果memtag
為真,則引導加載程序設置 MTE 標記保留,在較低的異常級別中啟用標記檢查,並通過 DT 將標記保留區域傳達給內核。如果memtag
為 false,則引導加載程序將 arm64.nomte 附加到內核命令行。
如果memtag_kernel
為真,則引導加載程序將kasan=on
附加到內核命令行。
Bootloader必須在每次啟動時清除MISC_MEMTAG_MODE_MEMTAG_ONCE
和MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
。
如果引導加載程序支持fastboot oem mte
,則 on 將MISC_MEMTAG_MODE_{MEMTAG, MEMTAG_ONLY, MEMTAG_OFF}
設置為(1, 0, 0)
,並將 off 設置為(0, 0, 1)
,同時保留其他標誌。
您應該配置您的產品以構建mtectrl
二進製文件以支持用戶空間。然後,設置ro.arm64.memtag.bootctl_supported
系統屬性以向系統指示您的引導加載程序支持 memtag 消息。
用戶界面
設置ro.arm64.memtag.bootctl_supported
屬性後,開發人員選項菜單中的按鈕允許用戶在啟用 MTE 的情況下重新啟動一次。目標受眾是希望使用 MTE 測試其應用程序的應用程序開發人員。 系統屬性
對於高級用途,系統屬性arm64.memtag.bootctl
可以採用逗號分隔的以下值列表:
- memtag:持久啟用用戶空間 MTE(設置
MISC_MEMTAG_MODE_MEMTAG
) - memtag-once:啟用用戶空間 MTE 一次(設置
MISC_MEMTAG_MODE_MEMTAG_ONCE
) - memtag-kernel:啟用內核空間 MTE(設置
MISC_MEMTAG_MODE_MEMTAG_KERNEL
) - memtag-kernel-once:啟用內核空間 MTE 一次(
MISC_MEMTAG_MODE_MEMTAG_KERNEL_ONCE
) - memtag-off:禁用 MTE(設置
MISC_MEMTAG_MODE_MEMTAG_OFF
)
必須重新啟動系統才能使新設置生效(因為它由引導加載程序應用)。