unix: fix potential overflow in Mkdev on Linux

Daniel Swarbrick reports the following go vet warning after CL 50550:

  .../dev_linux.go:38: (major & 0xfffff000) (32 bits) too small for shift of 32

Fix it by converting major and minor to uint64 before the bitwise-and.

Change-Id: If37540be81f2c78a58fd5e5dcce7b770ce7b8afe
Reviewed-on: https://go-review.googlesource.com/63090
Reviewed-by: Ian Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
Tobias Klauser 2017-09-12 13:21:58 +02:00 коммит произвёл Ian Lance Taylor
Родитель a5054c7c13
Коммит 7a85bfad8b
1 изменённых файлов: 4 добавлений и 4 удалений

Просмотреть файл

@ -34,9 +34,9 @@ func Minor(dev uint64) uint32 {
// Mkdev returns a Linux device number generated from the given major and minor // Mkdev returns a Linux device number generated from the given major and minor
// components. // components.
func Mkdev(major, minor uint32) uint64 { func Mkdev(major, minor uint32) uint64 {
dev := uint64((major & 0x00000fff) << 8) dev := (uint64(major) & 0x00000fff) << 8
dev |= uint64((major & 0xfffff000) << 32) dev |= (uint64(major) & 0xfffff000) << 32
dev |= uint64((minor & 0x000000ff) << 0) dev |= (uint64(minor) & 0x000000ff) << 0
dev |= uint64((minor & 0xffffff00) << 12) dev |= (uint64(minor) & 0xffffff00) << 12
return dev return dev
} }