Add nix derivation

This commit is contained in:
2024-04-22 14:58:27 +02:00
parent 1426ca892a
commit 308babc3ab
4 changed files with 42 additions and 22 deletions

1
.gitignore vendored
View File

@@ -1 +1,2 @@
/target /target
result

21
default.nix Normal file
View File

@@ -0,0 +1,21 @@
{ pkgs ? import <nixpkgs> { } }:
with pkgs;
let
agent_src = fetchgit {
url = "https://gitea.rixxc.de/rixxc/x25519_agent.git";
rev = "ae00fd66ece00510799cdf0397d905f2bdee2956";
hash = "sha256-vq3fNjeDCYUVJceyWCqszFDHk/GhLVhE/WeG50RoWZs=";
};
agent = callPackage "${agent_src}/default.nix" { };
in
rustPlatform.buildRustPackage {
name = "agent-harness";
src = nix-gitignore.gitignoreSource [ ] ./.;
nativeBuildInputs = [ cargo rustc ];
buildInputs = [ agent ];
cargoSha256 = "sha256-ZgwQr1goz9yPws0P1eQwhHEv2WbcJeTCLEPYOUADOtE=";
}

View File

@@ -1,16 +0,0 @@
{ pkgs ? import <nixpkgs> { } }:
with pkgs;
let
agent_src = fetchgit {
url = "https://gitea.rixxc.de/rixxc/x25519_agent.git";
rev = "d9b6dea879492dc5436e14ac8ea7367d641f6deb";
hash = "sha256-B7aFz5r8dNoAO829Ao6/1Wl5TqDh9xhfDds0ZF0cRqI=";
};
agent = callPackage "${agent_src}/default.nix" { };
in
pkgs.mkShell {
name = "agent-harness";
buildInputs = [ agent ];
}

View File

@@ -1,21 +1,23 @@
use libc::{c_int, c_void, mmap, MAP_FAILED, MAP_SHARED, PROT_READ, PROT_WRITE}; use libc::{
c_int, c_void, mmap, MAP_ANON, MAP_FAILED, MAP_PRIVATE, MAP_SHARED, PROT_READ, PROT_WRITE,
};
use std::{env, ptr}; use std::{env, ptr};
const SHARED_MEMORY_SIZE: usize = 1024; const SHARED_MEMORY_SIZE: usize = 1024;
#[link(name = "agent")] #[link(name = "agent")]
extern "C" { extern "C" {
fn agent_start(shared_memory: *mut u8, sync_memory: *mut u8); fn agent_start(shared_memory: *mut u8, sync_memory: *mut u8, private_mem: *mut u8);
} }
fn main() { fn main() {
let args: Vec<String> = env::args().collect(); let args: Vec<String> = env::args().collect();
let shared_fd: c_int = args[1] let shared_fd: c_int = args[0]
.parse() .parse()
.expect("Please provide a valid file descriptor as first argument"); .expect("Please provide a valid file descriptor as first argument");
let sync_fd: c_int = args[2] let sync_fd: c_int = args[1]
.parse() .parse()
.expect("Please provide a valid file descriptor as first argument"); .expect("Please provide a valid file descriptor as first argument");
@@ -43,8 +45,20 @@ fn main() {
} as *mut u8; } as *mut u8;
assert_ne!(sync_memory, MAP_FAILED as *mut u8); assert_ne!(sync_memory, MAP_FAILED as *mut u8);
println!("Starting agent..."); let private_mem = unsafe {
mmap(
ptr::null_mut() as *mut c_void,
32 * 100,
PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANON,
0,
0,
)
} as *mut u8;
assert_ne!(private_mem, MAP_FAILED as *mut u8);
println!("Agent: starting agent...");
unsafe { unsafe {
agent_start(shared_memory, sync_memory); agent_start(shared_memory, sync_memory, private_mem);
} }
} }