mirror of
https://github.com/Ponce/slackbuilds
synced 2024-10-05 23:07:14 +02:00
47dfc8d36e
Signed-off-by: Willy Sudiarto Raharjo <willysr@slackbuilds.org>
88 lines
2.5 KiB
Diff
88 lines
2.5 KiB
Diff
From f7236a195c84687edb74fec28b6c4cc98e34185c Mon Sep 17 00:00:00 2001
|
|
From: Vincent Batts <vbatts@redhat.com>
|
|
Date: Fri, 7 Aug 2015 10:18:20 -0400
|
|
Subject: [PATCH 1/4] devicemapper: fix zero-sized field access
|
|
|
|
Fixes: #15279
|
|
|
|
Due to
|
|
https://github.com/golang/go/commit/7904946eeb35faece61bbf6f5b3cc8be2f519c17
|
|
the devices field is dropped.
|
|
|
|
This solution works on go1.4 and go1.5
|
|
|
|
Signed-off-by: Vincent Batts <vbatts@redhat.com>
|
|
---
|
|
daemon/graphdriver/devmapper/deviceset.go | 14 +++++++++-----
|
|
pkg/devicemapper/devmapper_wrapper.go | 18 +++++++++++++++---
|
|
2 files changed, 24 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/daemon/graphdriver/devmapper/deviceset.go b/daemon/graphdriver/devmapper/deviceset.go
|
|
index 2eee330..a80736a 100644
|
|
--- a/daemon/graphdriver/devmapper/deviceset.go
|
|
+++ b/daemon/graphdriver/devmapper/deviceset.go
|
|
@@ -1482,12 +1482,16 @@ func (devices *DeviceSet) deactivatePool() error {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
- if d, err := devicemapper.GetDeps(devname); err == nil {
|
|
- // Access to more Debug output
|
|
- logrus.Debugf("[devmapper] devicemapper.GetDeps() %s: %#v", devname, d)
|
|
+
|
|
+ if devinfo.Exists == 0 {
|
|
+ return nil
|
|
}
|
|
- if devinfo.Exists != 0 {
|
|
- return devicemapper.RemoveDevice(devname)
|
|
+ if err := devicemapper.RemoveDevice(devname); err != nil {
|
|
+ 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
|
|
diff --git a/pkg/devicemapper/devmapper_wrapper.go b/pkg/devicemapper/devmapper_wrapper.go
|
|
index 87c2003..44ca772 100644
|
|
--- a/pkg/devicemapper/devmapper_wrapper.go
|
|
+++ b/pkg/devicemapper/devmapper_wrapper.go
|
|
@@ -38,7 +38,10 @@ static void log_with_errno_init()
|
|
*/
|
|
import "C"
|
|
|
|
-import "unsafe"
|
|
+import (
|
|
+ "reflect"
|
|
+ "unsafe"
|
|
+)
|
|
|
|
type (
|
|
CDmTask C.struct_dm_task
|
|
@@ -184,12 +187,21 @@ func dmTaskGetDepsFct(task *CDmTask) *Deps {
|
|
if Cdeps == 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{
|
|
Count: uint32(Cdeps.count),
|
|
Filler: uint32(Cdeps.filler),
|
|
}
|
|
- for _, device := range Cdeps.device {
|
|
- deps.Device = append(deps.Device, (uint64)(device))
|
|
+ for _, device := range devices {
|
|
+ deps.Device = append(deps.Device, uint64(device))
|
|
}
|
|
return deps
|
|
}
|
|
--
|
|
2.4.3
|
|
|