1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

devicemapper: fix zero-sized field access

Fixes: #15279

Due to
7904946eeb
the devices field is dropped.

This solution works on go1.4 and go1.5

Signed-off-by: Vincent Batts <vbatts@redhat.com>
This commit is contained in:
Vincent Batts 2015-08-07 10:18:20 -04:00
parent b9094633f3
commit f83d05c3be
2 changed files with 24 additions and 8 deletions

View file

@ -1509,12 +1509,16 @@ func (devices *DeviceSet) deactivatePool() error {
if err != nil { if err != nil {
return err return err
} }
if d, err := devicemapper.GetDeps(devname); err == nil {
// Access to more Debug output if devinfo.Exists == 0 {
logrus.Debugf("[devmapper] devicemapper.GetDeps() %s: %#v", devname, d) return nil
} }
if devinfo.Exists != 0 { if err := devicemapper.RemoveDevice(devname); err != nil {
return devicemapper.RemoveDevice(devname) return err
}
if d, err := devicemapper.GetDeps(devname); err == nil {
logrus.Warnf("[devmapper] device %s still has %d active dependents", devname, d.Count)
} }
return nil return nil

View file

@ -38,7 +38,10 @@ static void log_with_errno_init()
*/ */
import "C" import "C"
import "unsafe" import (
"reflect"
"unsafe"
)
type ( type (
CDmTask C.struct_dm_task CDmTask C.struct_dm_task
@ -184,12 +187,21 @@ func dmTaskGetDepsFct(task *CDmTask) *Deps {
if Cdeps == nil { if Cdeps == nil {
return nil return nil
} }
// golang issue: https://github.com/golang/go/issues/11925
hdr := reflect.SliceHeader{
Data: uintptr(unsafe.Pointer(uintptr(unsafe.Pointer(Cdeps)) + unsafe.Sizeof(*Cdeps))),
Len: int(Cdeps.count),
Cap: int(Cdeps.count),
}
devices := *(*[]C.uint64_t)(unsafe.Pointer(&hdr))
deps := &Deps{ deps := &Deps{
Count: uint32(Cdeps.count), Count: uint32(Cdeps.count),
Filler: uint32(Cdeps.filler), Filler: uint32(Cdeps.filler),
} }
for _, device := range Cdeps.device { for _, device := range devices {
deps.Device = append(deps.Device, (uint64)(device)) deps.Device = append(deps.Device, uint64(device))
} }
return deps return deps
} }