From 8b2327b0e270c9c1ee734e04ca3a2ae9bb6911d3 Mon Sep 17 00:00:00 2001 From: Justin Cormack Date: Fri, 4 Aug 2017 14:01:18 +0100 Subject: [PATCH] Support rngd on arm64 Although it does not do anything, as there is no CPU rng on arm64 at present. Signed-off-by: Justin Cormack --- pkg/rngd/Makefile | 1 - pkg/rngd/cmd/rngd/main.go | 25 +++++++++++++++++++++++++ pkg/rngd/cmd/rngd/rng_linux_amd64.go | 25 ------------------------- pkg/rngd/cmd/rngd/rng_linux_arm64.go | 21 +++++++++++++++++++++ pkg/rngd/cmd/rngd/rng_unsupported.go | 2 +- 5 files changed, 47 insertions(+), 27 deletions(-) create mode 100644 pkg/rngd/cmd/rngd/rng_linux_arm64.go diff --git a/pkg/rngd/Makefile b/pkg/rngd/Makefile index 7221dd5a6..0f5b8696a 100644 --- a/pkg/rngd/Makefile +++ b/pkg/rngd/Makefile @@ -1,5 +1,4 @@ IMAGE=rngd DEPS:=$(wildcard cmd/rngd/*.go) $(shell find cmd/rngd/vendor) -ARCHES=x86_64 include ../package.mk diff --git a/pkg/rngd/cmd/rngd/main.go b/pkg/rngd/cmd/rngd/main.go index ecea2c2d1..93136d233 100644 --- a/pkg/rngd/cmd/rngd/main.go +++ b/pkg/rngd/cmd/rngd/main.go @@ -2,10 +2,14 @@ package main +// int rndaddentropy; +import "C" + import ( "flag" "log" "os" + "unsafe" "golang.org/x/sys/unix" ) @@ -69,3 +73,24 @@ func main() { } } } + +type randInfo struct { + entropyCount int + size int + buf uint64 +} + +func writeEntropy(random *os.File) (int, error) { + r, err := rand() + if err != nil { + // assume can fail occasionally + return 0, nil + } + const entropy = 64 // they are good random numbers, Brent + info := randInfo{entropy, 8, r} + ret, _, err := unix.Syscall(unix.SYS_IOCTL, uintptr(random.Fd()), uintptr(C.rndaddentropy), uintptr(unsafe.Pointer(&info))) + if ret == 0 { + return 8, nil + } + return 0, err +} diff --git a/pkg/rngd/cmd/rngd/rng_linux_amd64.go b/pkg/rngd/cmd/rngd/rng_linux_amd64.go index ad3a5ffed..8db57dbf2 100644 --- a/pkg/rngd/cmd/rngd/rng_linux_amd64.go +++ b/pkg/rngd/cmd/rngd/rng_linux_amd64.go @@ -37,10 +37,6 @@ import "C" import ( "errors" "flag" - "os" - "unsafe" - - "golang.org/x/sys/unix" ) var disableRdrand = flag.Bool("disable-rdrand", false, "Disable use of RDRAND") @@ -48,12 +44,6 @@ var disableRdseed = flag.Bool("disable-rdseed", false, "Disable use of RDSEED") var hasRdrand, hasRdseed bool -type randInfo struct { - entropyCount int - size int - buf uint64 -} - func initRand() bool { hasRdrand = C.hasrdrand() == 1 && !*disableRdrand hasRdseed = C.hasrdseed() == 1 && !*disableRdseed @@ -72,18 +62,3 @@ func rand() (uint64, error) { } return 0, errors.New("No randomness available") } - -func writeEntropy(random *os.File) (int, error) { - r, err := rand() - if err != nil { - // assume can fail occasionally - return 0, nil - } - const entropy = 64 // they are good random numbers, Brent - info := randInfo{entropy, 8, r} - ret, _, err := unix.Syscall(unix.SYS_IOCTL, uintptr(random.Fd()), uintptr(C.rndaddentropy), uintptr(unsafe.Pointer(&info))) - if ret == 0 { - return 8, nil - } - return 0, err -} diff --git a/pkg/rngd/cmd/rngd/rng_linux_arm64.go b/pkg/rngd/cmd/rngd/rng_linux_arm64.go new file mode 100644 index 000000000..df9d0ff28 --- /dev/null +++ b/pkg/rngd/cmd/rngd/rng_linux_arm64.go @@ -0,0 +1,21 @@ +package main + +// #include +// +// int rndaddentropy = RNDADDENTROPY; +// +import "C" + +import ( + "errors" +) + +// No standard RNG on arm64 + +func initRand() bool { + return false +} + +func rand() (uint64, error) { + return 0, errors.New("No randomness available") +} diff --git a/pkg/rngd/cmd/rngd/rng_unsupported.go b/pkg/rngd/cmd/rngd/rng_unsupported.go index 9d3ca3735..423670bd7 100644 --- a/pkg/rngd/cmd/rngd/rng_unsupported.go +++ b/pkg/rngd/cmd/rngd/rng_unsupported.go @@ -1,4 +1,4 @@ -// +build !linux !amd64 +// +build !linux !amd64,!arm64 package main