Last active
August 29, 2015 14:11
-
-
Save minux/c7c997669fec1cf391f9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/src/runtime/os1_nacl.go b/src/runtime/os1_nacl.go | |
index 0a446c4..7b1988e 100644 | |
--- a/src/runtime/os1_nacl.go | |
+++ b/src/runtime/os1_nacl.go | |
@@ -46,11 +46,8 @@ func crash() { | |
*(*int32)(nil) = 0 | |
} | |
-//go:nosplit | |
-func getRandomData(r []byte) { | |
- // TODO: does nacl have a random source we can use? | |
- extendRandom(r, 0) | |
-} | |
+//go:noescape | |
+func getRandomData([]byte) | |
func goenvs() { | |
goenvs_unix() | |
diff --git a/src/runtime/sys_nacl_386.s b/src/runtime/sys_nacl_386.s | |
index 85c8175..242040d 100644 | |
--- a/src/runtime/sys_nacl_386.s | |
+++ b/src/runtime/sys_nacl_386.s | |
@@ -362,3 +362,12 @@ ret: | |
// 36(BP) is saved EFLAGS, never to be seen again | |
MOVL 32(BP), BP // saved PC | |
JMP BP | |
+ | |
+// func getRandomData([]byte) | |
+TEXT runtime·getRandomData(SB),NOSPLIT,$8-12 | |
+ MOVL buf+0(FP), AX | |
+ MOVL AX, 0(SP) | |
+ MOVL len+4(FP), AX | |
+ MOVL AX, 4(SP) | |
+ NACL_SYSCALL(SYS_get_random_bytes) | |
+ RET | |
diff --git a/src/runtime/sys_nacl_amd64p32.s b/src/runtime/sys_nacl_amd64p32.s | |
index f5624ca..a1398da 100644 | |
--- a/src/runtime/sys_nacl_amd64p32.s | |
+++ b/src/runtime/sys_nacl_amd64p32.s | |
@@ -412,6 +412,13 @@ nog: | |
// cannot do real signal handling yet, because gsignal has not been allocated. | |
MOVL $1, DI; NACL_SYSCALL(SYS_exit) | |
+// func getRandomData([]byte) | |
+TEXT runtime·getRandomData(SB),NOSPLIT,$0-12 | |
+ MOVL buf+0(FP), DI | |
+ MOVL len+4(FP), SI | |
+ NACL_SYSCALL(SYS_get_random_bytes) | |
+ RET | |
+ | |
TEXT runtime·nacl_sysinfo(SB),NOSPLIT,$16 | |
/* | |
MOVL di+0(FP), DI | |
diff --git a/src/runtime/sys_nacl_arm.s b/src/runtime/sys_nacl_arm.s | |
index ded95a8..1bae0b3 100644 | |
--- a/src/runtime/sys_nacl_arm.s | |
+++ b/src/runtime/sys_nacl_arm.s | |
@@ -301,6 +301,13 @@ nog: | |
TEXT runtime·nacl_sysinfo(SB),NOSPLIT,$16 | |
RET | |
+// func getRandomData([]byte) | |
+TEXT runtime·getRandomData(SB),NOSPLIT,$0-12 | |
+ MOVW buf+0(FP), R0 | |
+ MOVW len+4(FP), R1 | |
+ NACL_SYSCALL(SYS_get_random_bytes) | |
+ RET | |
+ | |
TEXT runtime·casp1(SB),NOSPLIT,$0 | |
B runtime·cas(SB) | |
diff --git a/src/runtime/syscall_nacl.h b/src/runtime/syscall_nacl.h | |
index b33852e..834ecfc 100644 | |
--- a/src/runtime/syscall_nacl.h | |
+++ b/src/runtime/syscall_nacl.h | |
@@ -8,10 +8,10 @@ | |
#define SYS_read 12 | |
#define SYS_write 13 | |
#define SYS_lseek 14 | |
-#define SYS_ioctl 15 | |
#define SYS_stat 16 | |
#define SYS_fstat 17 | |
#define SYS_chmod 18 | |
+#define SYS_isatty 19 | |
#define SYS_brk 20 | |
#define SYS_mmap 21 | |
#define SYS_munmap 22 | |
@@ -69,3 +69,16 @@ | |
#define SYS_test_crash 110 | |
#define SYS_test_syscall_1 111 | |
#define SYS_test_syscall_2 112 | |
+#define SYS_futex_wait_abs 120 | |
+#define SYS_futex_wake 121 | |
+#define SYS_pread 130 | |
+#define SYS_pwrite 131 | |
+#define SYS_truncate 140 | |
+#define SYS_lstat 141 | |
+#define SYS_link 142 | |
+#define SYS_rename 143 | |
+#define SYS_symlink 144 | |
+#define SYS_access 145 | |
+#define SYS_readlink 146 | |
+#define SYS_utimes 147 | |
+#define SYS_get_random_bytes 150 | |
diff --git a/src/syscall/fs_nacl.go b/src/syscall/fs_nacl.go | |
index 6e6ce2a..ca8c75a 100644 | |
--- a/src/syscall/fs_nacl.go | |
+++ b/src/syscall/fs_nacl.go | |
@@ -772,29 +772,24 @@ func (f *zeroFile) pread(b []byte, offset int64) (int, error) { | |
return len(b), nil | |
} | |
-type randomFile struct { | |
- naclFD int | |
-} | |
+type randomFile struct{} | |
func openRandom() (devFile, error) { | |
- fd, err := openNamedService("SecureRandom", O_RDONLY) | |
- if err != nil { | |
- return nil, err | |
- } | |
- return &randomFile{naclFD: fd}, nil | |
+ return randomFile{}, nil | |
} | |
-func (f *randomFile) close() error { | |
- naclClose(f.naclFD) | |
- f.naclFD = -1 | |
+func (f randomFile) close() error { | |
return nil | |
} | |
-func (f *randomFile) pread(b []byte, offset int64) (int, error) { | |
- return naclRead(f.naclFD, b) | |
+func (f randomFile) pread(b []byte, offset int64) (int, error) { | |
+ if err := naclGetRandomBytes(b); err != nil { | |
+ return 0, err | |
+ } | |
+ return len(b), nil | |
} | |
-func (f *randomFile) pwrite(b []byte, offset int64) (int, error) { | |
+func (f randomFile) pwrite(b []byte, offset int64) (int, error) { | |
return 0, EPERM | |
} | |
diff --git a/src/syscall/syscall_nacl.go b/src/syscall/syscall_nacl.go | |
index c2788b2..f8f63ef 100644 | |
--- a/src/syscall/syscall_nacl.go | |
+++ b/src/syscall/syscall_nacl.go | |
@@ -14,6 +14,7 @@ import ( | |
//sys naclFstat(fd int, stat *Stat_t) (err error) = sys_fstat | |
//sys naclRead(fd int, b []byte) (n int, err error) = sys_read | |
//sys naclSeek(fd int, off *int64, whence int) (err error) = sys_lseek | |
+//sys naclGetRandomBytes(b []byte) (err error) = sys_get_random_bytes | |
const direntSize = 8 + 8 + 2 + 256 | |
diff --git a/src/syscall/tables_nacl.go b/src/syscall/tables_nacl.go | |
index 08f4ced..098955e 100644 | |
--- a/src/syscall/tables_nacl.go | |
+++ b/src/syscall/tables_nacl.go | |
@@ -15,10 +15,10 @@ const ( | |
sys_read = 12 | |
sys_write = 13 | |
sys_lseek = 14 | |
- sys_ioctl = 15 | |
sys_stat = 16 | |
sys_fstat = 17 | |
sys_chmod = 18 | |
+ sys_isatty = 19 | |
sys_brk = 20 | |
sys_mmap = 21 | |
sys_munmap = 22 | |
@@ -76,6 +76,19 @@ const ( | |
sys_test_crash = 110 | |
sys_test_syscall_1 = 111 | |
sys_test_syscall_2 = 112 | |
+ sys_futex_wait_abs = 120 | |
+ sys_futex_wake = 121 | |
+ sys_pread = 130 | |
+ sys_pwrite = 131 | |
+ sys_truncate = 140 | |
+ sys_lstat = 141 | |
+ sys_link = 142 | |
+ sys_rename = 143 | |
+ sys_symlink = 144 | |
+ sys_access = 145 | |
+ sys_readlink = 146 | |
+ sys_utimes = 147 | |
+ sys_get_random_bytes = 150 | |
) | |
// TODO: Auto-generate some day. (Hard-coded in binaries so not likely to change.) | |
diff --git a/src/syscall/zsyscall_nacl_386.go b/src/syscall/zsyscall_nacl_386.go | |
index 32eed33..6e3220c 100644 | |
--- a/src/syscall/zsyscall_nacl_386.go | |
+++ b/src/syscall/zsyscall_nacl_386.go | |
@@ -61,3 +61,19 @@ func naclSeek(fd int, off *int64, whence int) (err error) { | |
} | |
return | |
} | |
+ | |
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | |
+ | |
+func naclGetRandomBytes(b []byte) (err error) { | |
+ var _p0 unsafe.Pointer | |
+ if len(b) > 0 { | |
+ _p0 = unsafe.Pointer(&b[0]) | |
+ } else { | |
+ _p0 = unsafe.Pointer(&_zero) | |
+ } | |
+ _, _, e1 := Syscall(sys_get_random_bytes, uintptr(_p0), uintptr(len(b)), 0) | |
+ if e1 != 0 { | |
+ err = e1 | |
+ } | |
+ return | |
+} | |
diff --git a/src/syscall/zsyscall_nacl_amd64p32.go b/src/syscall/zsyscall_nacl_amd64p32.go | |
index 8bc81fa..6f06b30 100644 | |
--- a/src/syscall/zsyscall_nacl_amd64p32.go | |
+++ b/src/syscall/zsyscall_nacl_amd64p32.go | |
@@ -61,3 +61,19 @@ func naclSeek(fd int, off *int64, whence int) (err error) { | |
} | |
return | |
} | |
+ | |
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | |
+ | |
+func naclGetRandomBytes(b []byte) (err error) { | |
+ var _p0 unsafe.Pointer | |
+ if len(b) > 0 { | |
+ _p0 = unsafe.Pointer(&b[0]) | |
+ } else { | |
+ _p0 = unsafe.Pointer(&_zero) | |
+ } | |
+ _, _, e1 := Syscall(sys_get_random_bytes, uintptr(_p0), uintptr(len(b)), 0) | |
+ if e1 != 0 { | |
+ err = e1 | |
+ } | |
+ return | |
+} | |
diff --git a/src/syscall/zsyscall_nacl_arm.go b/src/syscall/zsyscall_nacl_arm.go | |
index adbaed0..ccaca3c 100644 | |
--- a/src/syscall/zsyscall_nacl_arm.go | |
+++ b/src/syscall/zsyscall_nacl_arm.go | |
@@ -61,3 +61,19 @@ func naclSeek(fd int, off *int64, whence int) (err error) { | |
} | |
return | |
} | |
+ | |
+// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT | |
+ | |
+func naclGetRandomBytes(b []byte) (err error) { | |
+ var _p0 unsafe.Pointer | |
+ if len(b) > 0 { | |
+ _p0 = unsafe.Pointer(&b[0]) | |
+ } else { | |
+ _p0 = unsafe.Pointer(&_zero) | |
+ } | |
+ _, _, e1 := Syscall(sys_get_random_bytes, uintptr(_p0), uintptr(len(b)), 0) | |
+ if e1 != 0 { | |
+ err = e1 | |
+ } | |
+ return | |
+} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment