From a7eb42fbeb471db98aa410215606861ac36006d9 Mon Sep 17 00:00:00 2001 From: jD91mZM2 Date: Wed, 29 Aug 2018 17:47:25 +0200 Subject: [PATCH 1/2] Send readable event from fevent This fixes one problem with openssl on relibc, since relibc correctly respects readable/writable status unlike the newlib implementation which always says it's readable. --- src/main.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/main.rs b/src/main.rs index 7605bb8060..5850889f3a 100644 --- a/src/main.rs +++ b/src/main.rs @@ -18,7 +18,8 @@ use syscall::data::{Packet, Stat}; //TODO: Use a CSPRNG, allow write of entropy struct RandScheme { - prng: ChaChaRng + socket: File, + prng: ChaChaRng } impl SchemeMut for RandScheme { @@ -66,6 +67,17 @@ impl SchemeMut for RandScheme { Ok(0) } + fn fevent(&mut self, id: usize, _flags: usize) -> Result { + self.socket.write(&syscall::Packet { + a: syscall::SYS_FEVENT, + b: id, + c: syscall::EVENT_READ, + d: 1, + ..Default::default() + })?; + Ok(0) + } + fn fcntl(&mut self, _id: usize, _cmd: usize, _arg: usize) -> Result { Ok(0) } @@ -80,7 +92,7 @@ fn main(){ // Daemonize if unsafe { syscall::clone(0).unwrap() } == 0 { - let mut socket = File::create(":rand").expect("rand: failed to create rand scheme"); + let socket = File::create(":rand").expect("rand: failed to create rand scheme"); let mut rng = ChaChaRng::new_unseeded(); @@ -99,15 +111,15 @@ fn main(){ println!("rand: unseeded"); } - let mut scheme = RandScheme{prng: rng}; + let mut scheme = RandScheme{socket, prng: rng}; syscall::setrens(0, 0).expect("randd: failed to enter null namespace"); loop { let mut packet = Packet::default(); - socket.read(&mut packet).expect("rand: failed to read events from rand scheme"); + scheme.socket.read(&mut packet).expect("rand: failed to read events from rand scheme"); scheme.handle(&mut packet); - socket.write(&packet).expect("rand: failed to write responses to rand scheme"); + scheme.socket.write(&packet).expect("rand: failed to write responses to rand scheme"); } } } From 34cfe146de146f97086b76f71238668636fde07e Mon Sep 17 00:00:00 2001 From: jD91mZM2 Date: Wed, 29 Aug 2018 17:59:03 +0200 Subject: [PATCH 2/2] Fix compilation --- src/main.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main.rs b/src/main.rs index 5850889f3a..4e0f1d1972 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,6 +7,7 @@ extern crate rand; use std::fs::File; use std::io::{Read, Write}; +use std::os::unix::io::AsRawFd; use rand::chacha::ChaChaRng; use rand::Rng; @@ -68,7 +69,7 @@ impl SchemeMut for RandScheme { } fn fevent(&mut self, id: usize, _flags: usize) -> Result { - self.socket.write(&syscall::Packet { + syscall::write(self.socket.as_raw_fd(), &syscall::Packet { a: syscall::SYS_FEVENT, b: id, c: syscall::EVENT_READ,