From 97b96d22f86da0a5af24f8743bbda7d5133db5ea Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Tue, 16 Feb 2016 19:40:02 -0800 Subject: [PATCH 1/3] Seed the servers random number generator --- nomad/server.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nomad/server.go b/nomad/server.go index 2c70216cf967..2af167beae5e 100644 --- a/nomad/server.go +++ b/nomad/server.go @@ -5,6 +5,7 @@ import ( "errors" "fmt" "log" + "math/rand" "net" "net/rpc" "os" @@ -247,6 +248,9 @@ func NewServer(config *Config) (*Server, error) { // Emit metrics go s.heartbeatStats() + // Seed the global random. + rand.Seed(time.Now().UnixNano()) + // Done return s, nil } From f89a993ec6b91636a3384dd568898245fbc273a1 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Wed, 17 Feb 2016 11:47:02 -0800 Subject: [PATCH 2/3] Use crypto random seed --- nomad/server.go | 5 +++-- nomad/util.go | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/nomad/server.go b/nomad/server.go index 2af167beae5e..edc90f2ebe18 100644 --- a/nomad/server.go +++ b/nomad/server.go @@ -5,7 +5,6 @@ import ( "errors" "fmt" "log" - "math/rand" "net" "net/rpc" "os" @@ -249,7 +248,9 @@ func NewServer(config *Config) (*Server, error) { go s.heartbeatStats() // Seed the global random. - rand.Seed(time.Now().UnixNano()) + if err := seedRandom(); err != nil { + return nil, err + } // Done return s, nil diff --git a/nomad/util.go b/nomad/util.go index a47154356df2..635a09172bad 100644 --- a/nomad/util.go +++ b/nomad/util.go @@ -2,6 +2,8 @@ package nomad import ( "fmt" + "math" + "math/big" "math/rand" "net" "os" @@ -10,6 +12,8 @@ import ( "strconv" "time" + crand "crypto/rand" + "github.com/hashicorp/serf/serf" ) @@ -127,3 +131,15 @@ func rateScaledInterval(rate float64, min time.Duration, n int) time.Duration { } return interval } + +// seedRandom seeds the global random variable using a cryptographically random +// seed. It returns an error if determing the random seed fails. +func seedRandom() error { + n, err := crand.Int(crand.Reader, big.NewInt(math.MaxInt64)) + if err != nil { + return err + } + rand.Seed(n.Int64()) + return nil +} + From 3c4bd0af2bdc383b689854a5354a256c7feb60e4 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Wed, 17 Feb 2016 11:48:52 -0800 Subject: [PATCH 3/3] Remove blank line --- nomad/util.go | 1 - 1 file changed, 1 deletion(-) diff --git a/nomad/util.go b/nomad/util.go index 635a09172bad..1c7dba0bd482 100644 --- a/nomad/util.go +++ b/nomad/util.go @@ -142,4 +142,3 @@ func seedRandom() error { rand.Seed(n.Int64()) return nil } -