]> Cypherpunks repositories - gostls13.git/commit
crypto/rand: reintroduce urandom fallback for legacy Linux kernels
authorFilippo Valsorda <filippo@golang.org>
Sat, 24 Aug 2024 19:44:23 +0000 (21:44 +0200)
committerFilippo Valsorda <filippo@golang.org>
Mon, 7 Oct 2024 15:33:50 +0000 (15:33 +0000)
commit65679cfeb4b2fa0f24ac4ed8757b8a83ab0d5690
tree70047bdb2c510dae557d2784a0394f6186056077
parent534d6a1a9c81b25bdad1052e736b2f072caa3903
crypto/rand: reintroduce urandom fallback for legacy Linux kernels

Reintroduce the urandom fallback, but this time with a robust set of
tests all pointing guns at each other, including a seccomp'd respawn
simulating the lack of getrandom, to make sure the fallback both works
and is never hit unexpectedly.

Unlike the Go 1.23 fallback, the new one only triggers on ENOSYS (which
is cached by unix.GetRandom) and doesn't handle the EAGAIN errors we
never got an explanation for.

We still crash the program from Read if we have to go to /dev/urandom
and we fail to open it.

For #67001
Updates #66821

Tested on legacy SlowBots (without plan9 and illumos, which don't work):
TRY=aix-ppc64,dragonfly-amd64,freebsd-amd64,freebsd-386,netbsd-amd64

Cq-Include-Trybots: luci.golang.try:gotip-darwin-amd64_14,gotip-solaris-amd64,gotip-js-wasm,gotip-wasip1-wasm_wasmtime,gotip-wasip1-wasm_wazero,gotip-windows-amd64,gotip-windows-386,gotip-linux-386,gotip-linux-amd64-longtest-race,gotip-linux-amd64-boringcrypto
Change-Id: Idecc96a18cd6363087f5b2a4671c6fd1c41a3b0e
Reviewed-on: https://go-review.googlesource.com/c/go/+/608175
Reviewed-by: Daniel McCarney <daniel@binaryparadox.net>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Reviewed-by: Roland Shoemaker <roland@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
src/crypto/rand/internal/seccomp/seccomp_linux.go [new file with mode: 0644]
src/crypto/rand/internal/seccomp/seccomp_unsupported.go [new file with mode: 0644]
src/crypto/rand/rand.go
src/crypto/rand/rand_aix.go
src/crypto/rand/rand_getrandom.go
src/crypto/rand/rand_linux_test.go [new file with mode: 0644]
src/crypto/rand/rand_test.go
src/go/build/deps_test.go