diff --git a/src/crt0/src/lib.rs b/src/crt0/src/lib.rs
index ce61529cc46384e66b4b31c83874e5f21c5ffa5f..ceb003f96d6d443504f8dba12f29901da6807768 100644
--- a/src/crt0/src/lib.rs
+++ b/src/crt0/src/lib.rs
@@ -41,7 +41,7 @@ pub unsafe extern "C" fn _start() {
 #[repr(C)]
 pub struct Stack {
     argc: isize,
-    argv0: *const u8,
+    argv0: *const c_char,
 }
 
 impl Stack {
@@ -49,12 +49,12 @@ impl Stack {
         self.argc
     }
 
-    fn argv(&self) -> *const *const u8 {
-        &self.argv0 as *const *const u8
+    fn argv(&self) -> *const *const c_char {
+        &self.argv0 as *const _
     }
 
-    fn envp(&self) -> *const *const u8 {
-        unsafe { self.argv().offset(self.argc()) }
+    fn envp(&self) -> *const *const c_char {
+        unsafe { self.argv().offset(self.argc() + 1) }
     }
 }
 
@@ -83,7 +83,7 @@ pub unsafe extern "C" fn _start_rust(sp: &'static Stack) -> ! {
 
         let buf = platform::alloc(len as usize + 1) as *mut c_char;
         for i in 0..=len {
-            *buf.offset(i) = *item.offset(i) as c_char;
+            *buf.offset(i) = *item.offset(i);
         }
         platform::inner_environ.push(buf);
     }
@@ -97,8 +97,8 @@ pub unsafe extern "C" fn _start_rust(sp: &'static Stack) -> ! {
 
     platform::exit(main(
         argc,
-        argv as *const *const c_char,
-        envp as *const *const c_char,
+        argv,
+        envp
     ));
 }
 
diff --git a/src/platform/src/redox/mod.rs b/src/platform/src/redox/mod.rs
index 24637c02ab1c09b99fcab3890221486d7112be5c..19c02b306b518e8d0472e39ba4a4571e0b2f97d0 100644
--- a/src/platform/src/redox/mod.rs
+++ b/src/platform/src/redox/mod.rs
@@ -201,7 +201,7 @@ pub unsafe extern "C" fn execve(
 ) -> c_int {
     use alloc::Vec;
 
-    let fd = match RawFile::open(path, 0, 0) {
+    let fd = match RawFile::open(path, O_RDONLY as c_int, 0) {
         Ok(fd) => fd,
         Err(_) => return -1
     };