std-ownership

Build Status Rust Benchmark Discord chat

An ownership model that is used to replace the Ring in Linux. It’s 10x faster than Ring in Syscall.

Overview

The ownership system allows users to customize safety checks to guarantee system and application security.

Quick Start

In the examples module, you can run

cargo run --example ownership

API

If you’d like to customize checks to forbid other applications from directly accessing “mysql.ibd”, you can implement trait Resource for MySQL like below:

#[derive(Debug, Clone, Copy)]
pub struct MySQL<'a> {
    sys_files: &'a str,
    disk: Disk
}

impl<'a> MySQL<'a> {
    #[must_use]
    pub fn new() -> Self {
        Self { 
            sys_files: "mysql.ibd",
            disk: Disk::new(1024)
        }
    }

    #[inline]
    pub fn sys_files(&self) -> &'a str {
        &self.sys_files
    }

    #[inline]
    pub fn disk(&self) -> Disk {
        self.disk
    }
}

impl<'a> Resource for MySQL<'a> {
    #[inline]
    fn id(&self) -> u8 {
        3 //it will be replaced with auto id
    }

    #[inline]
    fn check(&self, table_name: &[u8]) -> bool {
        if !self.disk().check(table_name) {
            return false;
        }
        for file in self.sys_files().split(',').collect::<Vec<&str>>() {
            if file == str::from_utf8(table_name).unwrap() {
                return false;
            }
        }
        true
    }
}

Performance

1w Concurrency

It’s surprising! The ownership model is 10x faster than Ring in Syscall.

Ownership Borrow:

ownership

Geteuid(Syscall):

geteuid