#wrapper #typed #key #protection #region #memory #mprotect

pkey_mprotect

类型化的 pkey_mprotect 包装器

8个版本

0.2.3 2022年6月20日
0.2.2 2022年3月24日
0.2.0 2022年2月25日
0.1.3 2021年12月16日

#413 in 内存管理

每月下载 43次

自定义许可证

14KB
259

pkey_mprotect

类型化的 pkey_mprotect 包装器。

仅在支持内存保护键的Linux CPU上工作

MSRV:1.59(由于const panics和asm!宏)

示例

use pkey_mprotect::*;

struct Keys {
    my_key: [u8; 32],
}

fn main() {
    // Protection keys instance is needed to create regions.
    // NOTE: You probably should always reuse it because there
    // are only 15 available keys in system
    let pkey = ProtectionKeys::new(true).unwrap();

    // Protected region is a thread-safe wrapper around mmaped
    // memory which was secured with `pkey_mprotect`
    let region = pkey.make_region(Keys {
        my_key: [42; 32],
    }).unwrap();

    // To read the data you must lock the region. Access is 
    // granted only for the duration of the guards lifetime
    {
        let region = region.lock();
        println!("{:?}", region.my_key);
    }
}

依赖项

~0.4–1MB
~21K SLoC