Commit 7a85bfad authored by Tobias Klauser's avatar Tobias Klauser Committed by Ian Lance Taylor

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/63090Reviewed-by: 's avatarIan Lance Taylor <iant@golang.org>
Run-TryBot: Ian Lance Taylor <iant@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
parent a5054c7c
...@@ -34,9 +34,9 @@ func Minor(dev uint64) uint32 { ...@@ -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
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment