File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -21,8 +21,13 @@ import (
2121 "os"
2222
2323 "github.com/containerd/containerd/cmd/containerd/command"
24+ "github.com/containerd/containerd/pkg/seed"
2425)
2526
27+ func init () {
28+ seed .WithTimeAndRand ()
29+ }
30+
2631func main () {
2732 app := command .App ()
2833 if err := app .Run (os .Args ); err != nil {
Original file line number Diff line number Diff line change @@ -21,11 +21,16 @@ import (
2121 "os"
2222
2323 "github.com/containerd/containerd/cmd/ctr/app"
24+ "github.com/containerd/containerd/pkg/seed"
2425 "github.com/urfave/cli"
2526)
2627
2728var pluginCmds = []cli.Command {}
2829
30+ func init () {
31+ seed .WithTimeAndRand ()
32+ }
33+
2934func main () {
3035 app := app .New ()
3136 app .Commands = append (app .Commands , pluginCmds ... )
Original file line number Diff line number Diff line change 1+ /*
2+ Copyright The containerd Authors.
3+
4+ Licensed under the Apache License, Version 2.0 (the "License");
5+ you may not use this file except in compliance with the License.
6+ You may obtain a copy of the License at
7+
8+ http://www.apache.org/licenses/LICENSE-2.0
9+
10+ Unless required by applicable law or agreed to in writing, software
11+ distributed under the License is distributed on an "AS IS" BASIS,
12+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ See the License for the specific language governing permissions and
14+ limitations under the License.
15+ */
16+
17+ package seed
18+
19+ import (
20+ "math/rand"
21+ "time"
22+ )
23+
24+ // WithTimeAndRand seeds the global math rand generator with nanoseconds
25+ // XOR'ed with a crypto component if available for uniqueness.
26+ func WithTimeAndRand () {
27+ var (
28+ b [4 ]byte
29+ u int64
30+ )
31+
32+ tryReadRandom (b [:])
33+
34+ // Set higher 32 bits, bottom 32 will be set with nanos
35+ u |= (int64 (b [0 ]) << 56 ) | (int64 (b [1 ]) << 48 ) | (int64 (b [2 ]) << 40 ) | (int64 (b [3 ]) << 32 )
36+
37+ rand .Seed (u ^ time .Now ().UnixNano ())
38+ }
Original file line number Diff line number Diff line change 1+ /*
2+ Copyright The containerd Authors.
3+
4+ Licensed under the Apache License, Version 2.0 (the "License");
5+ you may not use this file except in compliance with the License.
6+ You may obtain a copy of the License at
7+
8+ http://www.apache.org/licenses/LICENSE-2.0
9+
10+ Unless required by applicable law or agreed to in writing, software
11+ distributed under the License is distributed on an "AS IS" BASIS,
12+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+ See the License for the specific language governing permissions and
14+ limitations under the License.
15+ */
16+
17+ package seed
18+
19+ import "golang.org/x/sys/unix"
20+
21+ func tryReadRandom (p []byte ) {
22+ // Ignore errors, just decreases uniqueness of seed
23+ unix .Getrandom (p , unix .GRND_NONBLOCK )
24+ }
Original file line number Diff line number Diff line change 1+ // +build !linux
2+
3+ /*
4+ Copyright The containerd Authors.
5+
6+ Licensed under the Apache License, Version 2.0 (the "License");
7+ you may not use this file except in compliance with the License.
8+ You may obtain a copy of the License at
9+
10+ http://www.apache.org/licenses/LICENSE-2.0
11+
12+ Unless required by applicable law or agreed to in writing, software
13+ distributed under the License is distributed on an "AS IS" BASIS,
14+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+ See the License for the specific language governing permissions and
16+ limitations under the License.
17+ */
18+
19+ package seed
20+
21+ import (
22+ "crypto/rand"
23+ "io"
24+ )
25+
26+ func tryReadRandom (p []byte ) {
27+ io .ReadFull (rand .Reader , p )
28+ }
You can’t perform that action at this time.
0 commit comments