]> git.ipfire.org Git - thirdparty/wireguard-go.git/commitdiff
setupapi: actually fix padding by rounding up to sizeof(void*)
authorJason A. Donenfeld <Jason@zx2c4.com>
Fri, 19 Apr 2019 01:19:00 +0000 (10:19 +0900)
committerJason A. Donenfeld <Jason@zx2c4.com>
Fri, 19 Apr 2019 01:19:00 +0000 (10:19 +0900)
tun/wintun/setupapi/setupapi_windows.go

index 1731f4b83b630d73adf7794aabec91aa07f82ad7..8524558257c64e5d652bd3f9f5c242b0c366f59c 100644 (file)
@@ -157,7 +157,7 @@ func SetupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoDa
        data := (*DrvInfoDetailData)(unsafe.Pointer(&buf[0]))
 
        // unsafe.Sizeof(data) >= sizeof(SP_DRVINFO_DETAIL_DATA) due to Go trailing padding. SetupAPI expects exactly sizeof(SP_DRVINFO_DETAIL_DATA).
-       sizeAPI := unsafe.Offsetof(data.hardwareID) + unsafe.Sizeof(data.hardwareID)
+       sizeAPI := ((unsafe.Sizeof(uintptr(0)) - 1) | (unsafe.Offsetof(data.hardwareID) + unsafe.Sizeof(data.hardwareID) - 1) + 1)
        data.size = uint32(sizeAPI)
 
        err := setupDiGetDriverInfoDetail(deviceInfoSet, deviceInfoData, driverInfoData, data, bufCapacity, &bufLen)