From 070590fb533afee77bc8e0a0ae376928bbbfb34b Mon Sep 17 00:00:00 2001 From: Julio Montes Date: Thu, 22 Jul 2021 08:46:02 -0500 Subject: [PATCH 1/2] vendor: update govmm Bring read-only nvdimm support Shortlog: 335fa81 qemu: fix golangci-lint errors 61b6378 .github/workflows: reimplement github actions CI 9d6e797 go: support go modules 0d21263 qemu: support read-only nvdimm ff34d28 qemu: Consistent parameter building Signed-off-by: Julio Montes --- src/runtime/go.mod | 2 +- src/runtime/go.sum | 4 +- .../kata-containers/govmm/qemu/qemu.go | 369 +++++++++--------- src/runtime/vendor/modules.txt | 2 +- 4 files changed, 192 insertions(+), 185 deletions(-) diff --git a/src/runtime/go.mod b/src/runtime/go.mod index d9c9646a0f..b122f66ddf 100644 --- a/src/runtime/go.mod +++ b/src/runtime/go.mod @@ -24,7 +24,7 @@ require ( github.com/gogo/protobuf v1.3.2 github.com/hashicorp/go-multierror v1.0.0 github.com/intel-go/cpuid v0.0.0-20210602155658-5747e5cec0d9 - github.com/kata-containers/govmm v0.0.0-20210622075516-263136e69ac8 + github.com/kata-containers/govmm v0.0.0-20210722115311-0173713ea912 github.com/mdlayher/vsock v0.0.0-20191108225356-d9c65923cb8f github.com/opencontainers/runc v1.0.0-rc93 github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d diff --git a/src/runtime/go.sum b/src/runtime/go.sum index e9a72498e1..d55ec18aba 100644 --- a/src/runtime/go.sum +++ b/src/runtime/go.sum @@ -467,8 +467,8 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/kata-containers/govmm v0.0.0-20210622075516-263136e69ac8 h1:ZQ/qgoFsgmvk7AikgW1pI4dFaXfkUEVn+KK63ju3vgU= -github.com/kata-containers/govmm v0.0.0-20210622075516-263136e69ac8/go.mod h1:VmAHbsL5lLfzHW/MNL96NVLF840DNEV5i683kISgFKk= +github.com/kata-containers/govmm v0.0.0-20210722115311-0173713ea912 h1:Ejn4L5OXYbdgnh1ghmlKvTPEC1b415PQDsNhzA2kWLQ= +github.com/kata-containers/govmm v0.0.0-20210722115311-0173713ea912/go.mod h1:A6QaNB6N6PRQ9mTRpFtUxiF5T5CJpzLALjxBrUQPlFI= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= diff --git a/src/runtime/vendor/github.com/kata-containers/govmm/qemu/qemu.go b/src/runtime/vendor/github.com/kata-containers/govmm/qemu/qemu.go index 1eddc79e2a..2ebd6e4826 100644 --- a/src/runtime/vendor/github.com/kata-containers/govmm/qemu/qemu.go +++ b/src/runtime/vendor/github.com/kata-containers/govmm/qemu/qemu.go @@ -277,6 +277,9 @@ type Object struct { // ReducedPhysBits is the reduction in the guest physical address space // This is only relevant for sev-guest objects ReducedPhysBits uint32 + + // ReadOnly specifies whether `MemPath` is opened read-only or read/write (default) + ReadOnly bool } // Valid returns true if the Object structure is valid and complete. @@ -308,56 +311,61 @@ func (object Object) QemuParams(config *Config) []string { switch object.Type { case MemoryBackendFile: objectParams = append(objectParams, string(object.Type)) - objectParams = append(objectParams, fmt.Sprintf(",id=%s", object.ID)) - objectParams = append(objectParams, fmt.Sprintf(",mem-path=%s", object.MemPath)) - objectParams = append(objectParams, fmt.Sprintf(",size=%d", object.Size)) + objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID)) + objectParams = append(objectParams, fmt.Sprintf("mem-path=%s", object.MemPath)) + objectParams = append(objectParams, fmt.Sprintf("size=%d", object.Size)) deviceParams = append(deviceParams, string(object.Driver)) - deviceParams = append(deviceParams, fmt.Sprintf(",id=%s", object.DeviceID)) - deviceParams = append(deviceParams, fmt.Sprintf(",memdev=%s", object.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", object.DeviceID)) + deviceParams = append(deviceParams, fmt.Sprintf("memdev=%s", object.ID)) + + if object.ReadOnly { + objectParams = append(objectParams, "readonly=on") + deviceParams = append(deviceParams, "unarmed=on") + } case TDXGuest: objectParams = append(objectParams, string(object.Type)) - objectParams = append(objectParams, fmt.Sprintf(",id=%s", object.ID)) + objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID)) if object.Debug { - objectParams = append(objectParams, ",debug=on") + objectParams = append(objectParams, "debug=on") } deviceParams = append(deviceParams, string(object.Driver)) - deviceParams = append(deviceParams, fmt.Sprintf(",id=%s", object.DeviceID)) - deviceParams = append(deviceParams, fmt.Sprintf(",file=%s", object.File)) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", object.DeviceID)) + deviceParams = append(deviceParams, fmt.Sprintf("file=%s", object.File)) case SEVGuest: objectParams = append(objectParams, string(object.Type)) - objectParams = append(objectParams, fmt.Sprintf(",id=%s", object.ID)) - objectParams = append(objectParams, fmt.Sprintf(",cbitpos=%d", object.CBitPos)) - objectParams = append(objectParams, fmt.Sprintf(",reduced-phys-bits=%d", object.ReducedPhysBits)) + objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID)) + objectParams = append(objectParams, fmt.Sprintf("cbitpos=%d", object.CBitPos)) + objectParams = append(objectParams, fmt.Sprintf("reduced-phys-bits=%d", object.ReducedPhysBits)) driveParams = append(driveParams, "if=pflash,format=raw,readonly=on") - driveParams = append(driveParams, fmt.Sprintf(",file=%s", object.File)) + driveParams = append(driveParams, fmt.Sprintf("file=%s", object.File)) case SecExecGuest: objectParams = append(objectParams, string(object.Type)) - objectParams = append(objectParams, fmt.Sprintf(",id=%s", object.ID)) + objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID)) case PEFGuest: objectParams = append(objectParams, string(object.Type)) - objectParams = append(objectParams, fmt.Sprintf(",id=%s", object.ID)) + objectParams = append(objectParams, fmt.Sprintf("id=%s", object.ID)) deviceParams = append(deviceParams, string(object.Driver)) - deviceParams = append(deviceParams, fmt.Sprintf(",id=%s", object.DeviceID)) - deviceParams = append(deviceParams, fmt.Sprintf(",host-path=%s", object.File)) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", object.DeviceID)) + deviceParams = append(deviceParams, fmt.Sprintf("host-path=%s", object.File)) } if len(deviceParams) > 0 { qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) } if len(objectParams) > 0 { qemuParams = append(qemuParams, "-object") - qemuParams = append(qemuParams, strings.Join(objectParams, "")) + qemuParams = append(qemuParams, strings.Join(objectParams, ",")) } if len(driveParams) > 0 { qemuParams = append(qemuParams, "-drive") - qemuParams = append(qemuParams, strings.Join(driveParams, "")) + qemuParams = append(qemuParams, strings.Join(driveParams, ",")) } return qemuParams @@ -473,34 +481,34 @@ func (fsdev FSDevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, fsdev.deviceName(config)) if s := fsdev.Transport.disableModern(config, fsdev.DisableModern); s != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",%s", s)) + deviceParams = append(deviceParams, s) } - deviceParams = append(deviceParams, fmt.Sprintf(",fsdev=%s", fsdev.ID)) - deviceParams = append(deviceParams, fmt.Sprintf(",mount_tag=%s", fsdev.MountTag)) + deviceParams = append(deviceParams, fmt.Sprintf("fsdev=%s", fsdev.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("mount_tag=%s", fsdev.MountTag)) if fsdev.Transport.isVirtioPCI(config) && fsdev.ROMFile != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", fsdev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", fsdev.ROMFile)) } if fsdev.Transport.isVirtioCCW(config) { if config.Knobs.IOMMUPlatform { deviceParams = append(deviceParams, ",iommu_platform=on") } - deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", fsdev.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", fsdev.DevNo)) } fsParams = append(fsParams, string(fsdev.FSDriver)) - fsParams = append(fsParams, fmt.Sprintf(",id=%s", fsdev.ID)) - fsParams = append(fsParams, fmt.Sprintf(",path=%s", fsdev.Path)) - fsParams = append(fsParams, fmt.Sprintf(",security_model=%s", fsdev.SecurityModel)) + fsParams = append(fsParams, fmt.Sprintf("id=%s", fsdev.ID)) + fsParams = append(fsParams, fmt.Sprintf("path=%s", fsdev.Path)) + fsParams = append(fsParams, fmt.Sprintf("security_model=%s", fsdev.SecurityModel)) if fsdev.Multidev != "" { - fsParams = append(fsParams, fmt.Sprintf(",multidevs=%s", fsdev.Multidev)) + fsParams = append(fsParams, fmt.Sprintf("multidevs=%s", fsdev.Multidev)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) qemuParams = append(qemuParams, "-fsdev") - qemuParams = append(qemuParams, strings.Join(fsParams, "")) + qemuParams = append(qemuParams, strings.Join(fsParams, ",")) return qemuParams } @@ -599,41 +607,41 @@ func (cdev CharDevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, cdev.deviceName(config)) if cdev.Driver == VirtioSerial { if s := cdev.Transport.disableModern(config, cdev.DisableModern); s != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",%s", s)) + deviceParams = append(deviceParams, s) } } if cdev.Bus != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",bus=%s", cdev.Bus)) + deviceParams = append(deviceParams, fmt.Sprintf("bus=%s", cdev.Bus)) } - deviceParams = append(deviceParams, fmt.Sprintf(",chardev=%s", cdev.ID)) - deviceParams = append(deviceParams, fmt.Sprintf(",id=%s", cdev.DeviceID)) + deviceParams = append(deviceParams, fmt.Sprintf("chardev=%s", cdev.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", cdev.DeviceID)) if cdev.Name != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",name=%s", cdev.Name)) + deviceParams = append(deviceParams, fmt.Sprintf("name=%s", cdev.Name)) } if cdev.Driver == VirtioSerial && cdev.Transport.isVirtioPCI(config) && cdev.ROMFile != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", cdev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", cdev.ROMFile)) } if cdev.Driver == VirtioSerial && cdev.Transport.isVirtioCCW(config) { if config.Knobs.IOMMUPlatform { - deviceParams = append(deviceParams, ",iommu_platform=on") + deviceParams = append(deviceParams, "iommu_platform=on") } - deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", cdev.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", cdev.DevNo)) } cdevParams = append(cdevParams, string(cdev.Backend)) - cdevParams = append(cdevParams, fmt.Sprintf(",id=%s", cdev.ID)) + cdevParams = append(cdevParams, fmt.Sprintf("id=%s", cdev.ID)) if cdev.Backend == Socket { - cdevParams = append(cdevParams, fmt.Sprintf(",path=%s,server=on,wait=off", cdev.Path)) + cdevParams = append(cdevParams, fmt.Sprintf("path=%s,server=on,wait=off", cdev.Path)) } else { - cdevParams = append(cdevParams, fmt.Sprintf(",path=%s", cdev.Path)) + cdevParams = append(cdevParams, fmt.Sprintf("path=%s", cdev.Path)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) qemuParams = append(qemuParams, "-chardev") - qemuParams = append(qemuParams, strings.Join(cdevParams, "")) + qemuParams = append(qemuParams, strings.Join(cdevParams, ",")) return qemuParams } @@ -829,7 +837,7 @@ func (netdev NetDevice) Valid() bool { // multi-queue option mq needs to be activated. See comment in libvirt code at // https://github.com/libvirt/libvirt/blob/6e7e965dcd3d885739129b1454ce19e819b54c25/src/qemu/qemu_command.c#L3633 func (netdev NetDevice) mqParameter(config *Config) string { - p := []string{",mq=on"} + p := []string{"mq=on"} if netdev.Transport.isVirtioPCI(config) { // https://www.linux-kvm.org/page/Multiqueue @@ -842,10 +850,10 @@ func (netdev NetDevice) mqParameter(config *Config) string { // The agent implementation should do this to ensure that it is // always set vectors := len(netdev.FDs)*2 + 2 - p = append(p, fmt.Sprintf(",vectors=%d", vectors)) + p = append(p, fmt.Sprintf("vectors=%d", vectors)) } - return strings.Join(p, "") + return strings.Join(p, ",") } // QemuDeviceParams returns the -device parameters for this network device @@ -858,21 +866,21 @@ func (netdev NetDevice) QemuDeviceParams(config *Config) []string { } deviceParams = append(deviceParams, fmt.Sprintf("driver=%s", driver)) - deviceParams = append(deviceParams, fmt.Sprintf(",netdev=%s", netdev.ID)) - deviceParams = append(deviceParams, fmt.Sprintf(",mac=%s", netdev.MACAddress)) + deviceParams = append(deviceParams, fmt.Sprintf("netdev=%s", netdev.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("mac=%s", netdev.MACAddress)) if netdev.Bus != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",bus=%s", netdev.Bus)) + deviceParams = append(deviceParams, fmt.Sprintf("bus=%s", netdev.Bus)) } if netdev.Addr != "" { addr, err := strconv.Atoi(netdev.Addr) if err == nil && addr >= 0 { - deviceParams = append(deviceParams, fmt.Sprintf(",addr=%x", addr)) + deviceParams = append(deviceParams, fmt.Sprintf("addr=%x", addr)) } } if s := netdev.Transport.disableModern(config, netdev.DisableModern); s != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",%s", s)) + deviceParams = append(deviceParams, s) } if len(netdev.FDs) > 0 { @@ -881,14 +889,14 @@ func (netdev NetDevice) QemuDeviceParams(config *Config) []string { } if netdev.Transport.isVirtioPCI(config) && netdev.ROMFile != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", netdev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", netdev.ROMFile)) } if netdev.Transport.isVirtioCCW(config) { if config.Knobs.IOMMUPlatform { - deviceParams = append(deviceParams, ",iommu_platform=on") + deviceParams = append(deviceParams, "iommu_platform=on") } - deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", netdev.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", netdev.DevNo)) } return deviceParams @@ -904,17 +912,17 @@ func (netdev NetDevice) QemuNetdevParams(config *Config) []string { } netdevParams = append(netdevParams, netdevType) - netdevParams = append(netdevParams, fmt.Sprintf(",id=%s", netdev.ID)) + netdevParams = append(netdevParams, fmt.Sprintf("id=%s", netdev.ID)) if netdev.VHost { - netdevParams = append(netdevParams, ",vhost=on") + netdevParams = append(netdevParams, "vhost=on") if len(netdev.VhostFDs) > 0 { var fdParams []string qemuFDs := config.appendFDs(netdev.VhostFDs) for _, fd := range qemuFDs { fdParams = append(fdParams, fmt.Sprintf("%d", fd)) } - netdevParams = append(netdevParams, fmt.Sprintf(",vhostfds=%s", strings.Join(fdParams, ":"))) + netdevParams = append(netdevParams, fmt.Sprintf("vhostfds=%s", strings.Join(fdParams, ":"))) } } @@ -926,15 +934,15 @@ func (netdev NetDevice) QemuNetdevParams(config *Config) []string { fdParams = append(fdParams, fmt.Sprintf("%d", fd)) } - netdevParams = append(netdevParams, fmt.Sprintf(",fds=%s", strings.Join(fdParams, ":"))) + netdevParams = append(netdevParams, fmt.Sprintf("fds=%s", strings.Join(fdParams, ":"))) } else { - netdevParams = append(netdevParams, fmt.Sprintf(",ifname=%s", netdev.IFName)) + netdevParams = append(netdevParams, fmt.Sprintf("ifname=%s", netdev.IFName)) if netdev.DownScript != "" { - netdevParams = append(netdevParams, fmt.Sprintf(",downscript=%s", netdev.DownScript)) + netdevParams = append(netdevParams, fmt.Sprintf("downscript=%s", netdev.DownScript)) } if netdev.Script != "" { - netdevParams = append(netdevParams, fmt.Sprintf(",script=%s", netdev.Script)) + netdevParams = append(netdevParams, fmt.Sprintf("script=%s", netdev.Script)) } } return netdevParams @@ -955,7 +963,7 @@ func (netdev NetDevice) QemuParams(config *Config) []string { netdevParams = netdev.QemuNetdevParams(config) if netdevParams != nil { qemuParams = append(qemuParams, "-netdev") - qemuParams = append(qemuParams, strings.Join(netdevParams, "")) + qemuParams = append(qemuParams, strings.Join(netdevParams, ",")) } } @@ -963,7 +971,7 @@ func (netdev NetDevice) QemuParams(config *Config) []string { deviceParams = netdev.QemuDeviceParams(config) if deviceParams != nil { qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) } } @@ -1010,25 +1018,25 @@ func (dev SerialDevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, dev.deviceName(config)) if s := dev.Transport.disableModern(config, dev.DisableModern); s != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",%s", s)) + deviceParams = append(deviceParams, s) } - deviceParams = append(deviceParams, fmt.Sprintf(",id=%s", dev.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", dev.ID)) if dev.Transport.isVirtioPCI(config) && dev.ROMFile != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", dev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", dev.ROMFile)) if dev.Driver == VirtioSerial && dev.MaxPorts != 0 { - deviceParams = append(deviceParams, fmt.Sprintf(",max_ports=%d", dev.MaxPorts)) + deviceParams = append(deviceParams, fmt.Sprintf("max_ports=%d", dev.MaxPorts)) } } if dev.Transport.isVirtioCCW(config) { if config.Knobs.IOMMUPlatform { - deviceParams = append(deviceParams, ",iommu_platform=on") + deviceParams = append(deviceParams, "iommu_platform=on") } - deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", dev.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", dev.DevNo)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1133,46 +1141,46 @@ func (blkdev BlockDevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, blkdev.deviceName(config)) if s := blkdev.Transport.disableModern(config, blkdev.DisableModern); s != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",%s", s)) + deviceParams = append(deviceParams, s) } - deviceParams = append(deviceParams, fmt.Sprintf(",drive=%s", blkdev.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("drive=%s", blkdev.ID)) if !blkdev.SCSI { - deviceParams = append(deviceParams, ",scsi=off") + deviceParams = append(deviceParams, "scsi=off") } if !blkdev.WCE { - deviceParams = append(deviceParams, ",config-wce=off") + deviceParams = append(deviceParams, "config-wce=off") } if blkdev.Transport.isVirtioPCI(config) && blkdev.ROMFile != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", blkdev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", blkdev.ROMFile)) } if blkdev.Transport.isVirtioCCW(config) { - deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", blkdev.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", blkdev.DevNo)) } if blkdev.ShareRW { - deviceParams = append(deviceParams, fmt.Sprintf(",share-rw=on")) + deviceParams = append(deviceParams, "share-rw=on") } - deviceParams = append(deviceParams, fmt.Sprintf(",serial=%s", blkdev.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("serial=%s", blkdev.ID)) blkParams = append(blkParams, fmt.Sprintf("id=%s", blkdev.ID)) - blkParams = append(blkParams, fmt.Sprintf(",file=%s", blkdev.File)) - blkParams = append(blkParams, fmt.Sprintf(",aio=%s", blkdev.AIO)) - blkParams = append(blkParams, fmt.Sprintf(",format=%s", blkdev.Format)) - blkParams = append(blkParams, fmt.Sprintf(",if=%s", blkdev.Interface)) + blkParams = append(blkParams, fmt.Sprintf("file=%s", blkdev.File)) + blkParams = append(blkParams, fmt.Sprintf("aio=%s", blkdev.AIO)) + blkParams = append(blkParams, fmt.Sprintf("format=%s", blkdev.Format)) + blkParams = append(blkParams, fmt.Sprintf("if=%s", blkdev.Interface)) if blkdev.ReadOnly { - blkParams = append(blkParams, ",readonly") + blkParams = append(blkParams, "readonly") } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) qemuParams = append(qemuParams, "-drive") - qemuParams = append(qemuParams, strings.Join(blkParams, "")) + qemuParams = append(qemuParams, strings.Join(blkParams, ",")) return qemuParams } @@ -1232,14 +1240,14 @@ func (dev LoaderDevice) Valid() bool { // QemuParams returns the qemu parameters built out of this loader device. func (dev LoaderDevice) QemuParams(config *Config) []string { var qemuParams []string - var devParams []string + var deviceParams []string - devParams = append(devParams, "loader") - devParams = append(devParams, fmt.Sprintf("file=%s", dev.File)) - devParams = append(devParams, fmt.Sprintf("id=%s", dev.ID)) + deviceParams = append(deviceParams, "loader") + deviceParams = append(deviceParams, fmt.Sprintf("file=%s", dev.File)) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", dev.ID)) qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(devParams, ",")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1330,7 +1338,7 @@ func (vhostuserDev VhostUserDevice) Valid() bool { func (vhostuserDev VhostUserDevice) QemuNetParams(config *Config) []string { var qemuParams []string var netParams []string - var devParams []string + var deviceParams []string driver := vhostuserDev.deviceName(config) if driver == "" { @@ -1342,18 +1350,18 @@ func (vhostuserDev VhostUserDevice) QemuNetParams(config *Config) []string { netParams = append(netParams, fmt.Sprintf("chardev=%s", vhostuserDev.CharDevID)) netParams = append(netParams, "vhostforce") - devParams = append(devParams, driver) - devParams = append(devParams, fmt.Sprintf("netdev=%s", vhostuserDev.TypeDevID)) - devParams = append(devParams, fmt.Sprintf("mac=%s", vhostuserDev.Address)) + deviceParams = append(deviceParams, driver) + deviceParams = append(deviceParams, fmt.Sprintf("netdev=%s", vhostuserDev.TypeDevID)) + deviceParams = append(deviceParams, fmt.Sprintf("mac=%s", vhostuserDev.Address)) if vhostuserDev.Transport.isVirtioPCI(config) && vhostuserDev.ROMFile != "" { - devParams = append(devParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) } qemuParams = append(qemuParams, "-netdev") qemuParams = append(qemuParams, strings.Join(netParams, ",")) qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(devParams, ",")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1361,23 +1369,23 @@ func (vhostuserDev VhostUserDevice) QemuNetParams(config *Config) []string { // QemuSCSIParams builds QEMU device parameters for a VhostUserSCSI device func (vhostuserDev VhostUserDevice) QemuSCSIParams(config *Config) []string { var qemuParams []string - var devParams []string + var deviceParams []string driver := vhostuserDev.deviceName(config) if driver == "" { return nil } - devParams = append(devParams, driver) - devParams = append(devParams, fmt.Sprintf("id=%s", vhostuserDev.TypeDevID)) - devParams = append(devParams, fmt.Sprintf("chardev=%s", vhostuserDev.CharDevID)) + deviceParams = append(deviceParams, driver) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", vhostuserDev.TypeDevID)) + deviceParams = append(deviceParams, fmt.Sprintf("chardev=%s", vhostuserDev.CharDevID)) if vhostuserDev.Transport.isVirtioPCI(config) && vhostuserDev.ROMFile != "" { - devParams = append(devParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(devParams, ",")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1385,24 +1393,24 @@ func (vhostuserDev VhostUserDevice) QemuSCSIParams(config *Config) []string { // QemuBlkParams builds QEMU device parameters for a VhostUserBlk device func (vhostuserDev VhostUserDevice) QemuBlkParams(config *Config) []string { var qemuParams []string - var devParams []string + var deviceParams []string driver := vhostuserDev.deviceName(config) if driver == "" { return nil } - devParams = append(devParams, driver) - devParams = append(devParams, "logical_block_size=4096") - devParams = append(devParams, "size=512M") - devParams = append(devParams, fmt.Sprintf("chardev=%s", vhostuserDev.CharDevID)) + deviceParams = append(deviceParams, driver) + deviceParams = append(deviceParams, "logical_block_size=4096") + deviceParams = append(deviceParams, "size=512M") + deviceParams = append(deviceParams, fmt.Sprintf("chardev=%s", vhostuserDev.CharDevID)) if vhostuserDev.Transport.isVirtioPCI(config) && vhostuserDev.ROMFile != "" { - devParams = append(devParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(devParams, ",")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1410,31 +1418,31 @@ func (vhostuserDev VhostUserDevice) QemuBlkParams(config *Config) []string { // QemuFSParams builds QEMU device parameters for a VhostUserFS device func (vhostuserDev VhostUserDevice) QemuFSParams(config *Config) []string { var qemuParams []string - var devParams []string + var deviceParams []string driver := vhostuserDev.deviceName(config) if driver == "" { return nil } - devParams = append(devParams, driver) - devParams = append(devParams, fmt.Sprintf("chardev=%s", vhostuserDev.CharDevID)) - devParams = append(devParams, fmt.Sprintf("tag=%s", vhostuserDev.Tag)) + deviceParams = append(deviceParams, driver) + deviceParams = append(deviceParams, fmt.Sprintf("chardev=%s", vhostuserDev.CharDevID)) + deviceParams = append(deviceParams, fmt.Sprintf("tag=%s", vhostuserDev.Tag)) if vhostuserDev.CacheSize != 0 { - devParams = append(devParams, fmt.Sprintf("cache-size=%dM", vhostuserDev.CacheSize)) + deviceParams = append(deviceParams, fmt.Sprintf("cache-size=%dM", vhostuserDev.CacheSize)) } if vhostuserDev.SharedVersions { - devParams = append(devParams, "versiontable=/dev/shm/fuse_shared_versions") + deviceParams = append(deviceParams, "versiontable=/dev/shm/fuse_shared_versions") } if vhostuserDev.Transport.isVirtioCCW(config) { - devParams = append(devParams, fmt.Sprintf("devno=%s", vhostuserDev.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", vhostuserDev.DevNo)) } if vhostuserDev.Transport.isVirtioPCI(config) && vhostuserDev.ROMFile != "" { - devParams = append(devParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", vhostuserDev.ROMFile)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(devParams, ",")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1443,7 +1451,7 @@ func (vhostuserDev VhostUserDevice) QemuFSParams(config *Config) []string { func (vhostuserDev VhostUserDevice) QemuParams(config *Config) []string { var qemuParams []string var charParams []string - var devParams []string + var deviceParams []string charParams = append(charParams, "socket") charParams = append(charParams, fmt.Sprintf("id=%s", vhostuserDev.CharDevID)) @@ -1454,19 +1462,19 @@ func (vhostuserDev VhostUserDevice) QemuParams(config *Config) []string { switch vhostuserDev.VhostUserType { case VhostUserNet: - devParams = vhostuserDev.QemuNetParams(config) + deviceParams = vhostuserDev.QemuNetParams(config) case VhostUserSCSI: - devParams = vhostuserDev.QemuSCSIParams(config) + deviceParams = vhostuserDev.QemuSCSIParams(config) case VhostUserBlk: - devParams = vhostuserDev.QemuBlkParams(config) + deviceParams = vhostuserDev.QemuBlkParams(config) case VhostUserFS: - devParams = vhostuserDev.QemuFSParams(config) + deviceParams = vhostuserDev.QemuFSParams(config) default: return nil } - if devParams != nil { - return append(qemuParams, devParams...) + if deviceParams != nil { + return append(qemuParams, deviceParams...) } return nil @@ -1639,26 +1647,26 @@ func (vfioDev VFIODevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, fmt.Sprintf("%s,host=%s", driver, vfioDev.BDF)) if vfioDev.Transport.isVirtioPCI(config) { if vfioDev.VendorID != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",x-pci-vendor-id=%s", vfioDev.VendorID)) + deviceParams = append(deviceParams, fmt.Sprintf("x-pci-vendor-id=%s", vfioDev.VendorID)) } if vfioDev.DeviceID != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",x-pci-device-id=%s", vfioDev.DeviceID)) + deviceParams = append(deviceParams, fmt.Sprintf("x-pci-device-id=%s", vfioDev.DeviceID)) } if vfioDev.ROMFile != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", vfioDev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", vfioDev.ROMFile)) } } if vfioDev.Bus != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",bus=%s", vfioDev.Bus)) + deviceParams = append(deviceParams, fmt.Sprintf("bus=%s", vfioDev.Bus)) } if vfioDev.Transport.isVirtioCCW(config) { - deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", vfioDev.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", vfioDev.DevNo)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1715,35 +1723,35 @@ func (scsiCon SCSIController) Valid() bool { // QemuParams returns the qemu parameters built out of this SCSIController device. func (scsiCon SCSIController) QemuParams(config *Config) []string { var qemuParams []string - var devParams []string + var deviceParams []string driver := scsiCon.deviceName(config) - devParams = append(devParams, fmt.Sprintf("%s,id=%s", driver, scsiCon.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("%s,id=%s", driver, scsiCon.ID)) if scsiCon.Bus != "" { - devParams = append(devParams, fmt.Sprintf("bus=%s", scsiCon.Bus)) + deviceParams = append(deviceParams, fmt.Sprintf("bus=%s", scsiCon.Bus)) } if scsiCon.Addr != "" { - devParams = append(devParams, fmt.Sprintf("addr=%s", scsiCon.Addr)) + deviceParams = append(deviceParams, fmt.Sprintf("addr=%s", scsiCon.Addr)) } if s := scsiCon.Transport.disableModern(config, scsiCon.DisableModern); s != "" { - devParams = append(devParams, s) + deviceParams = append(deviceParams, s) } if scsiCon.IOThread != "" { - devParams = append(devParams, fmt.Sprintf("iothread=%s", scsiCon.IOThread)) + deviceParams = append(deviceParams, fmt.Sprintf("iothread=%s", scsiCon.IOThread)) } if scsiCon.Transport.isVirtioPCI(config) && scsiCon.ROMFile != "" { - devParams = append(devParams, fmt.Sprintf("romfile=%s", scsiCon.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", scsiCon.ROMFile)) } if scsiCon.Transport.isVirtioCCW(config) { if config.Knobs.IOMMUPlatform { - devParams = append(devParams, ",iommu_platform=on") + deviceParams = append(deviceParams, "iommu_platform=on") } - devParams = append(devParams, fmt.Sprintf("devno=%s", scsiCon.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", scsiCon.DevNo)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(devParams, ",")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1813,36 +1821,36 @@ func (bridgeDev BridgeDevice) Valid() bool { // QemuParams returns the qemu parameters built out of this bridge device. func (bridgeDev BridgeDevice) QemuParams(config *Config) []string { var qemuParams []string - var deviceParam []string + var deviceParams []string var driver DeviceDriver switch bridgeDev.Type { case PCIEBridge: driver = PCIePCIBridgeDriver - deviceParam = append(deviceParam, fmt.Sprintf("%s,bus=%s,id=%s", driver, bridgeDev.Bus, bridgeDev.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("%s,bus=%s,id=%s", driver, bridgeDev.Bus, bridgeDev.ID)) default: driver = PCIBridgeDriver shpc := "off" if bridgeDev.SHPC { shpc = "on" } - deviceParam = append(deviceParam, fmt.Sprintf("%s,bus=%s,id=%s,chassis_nr=%d,shpc=%s", driver, bridgeDev.Bus, bridgeDev.ID, bridgeDev.Chassis, shpc)) + deviceParams = append(deviceParams, fmt.Sprintf("%s,bus=%s,id=%s,chassis_nr=%d,shpc=%s", driver, bridgeDev.Bus, bridgeDev.ID, bridgeDev.Chassis, shpc)) } if bridgeDev.Addr != "" { addr, err := strconv.Atoi(bridgeDev.Addr) if err == nil && addr >= 0 { - deviceParam = append(deviceParam, fmt.Sprintf(",addr=%x", addr)) + deviceParams = append(deviceParams, fmt.Sprintf("addr=%x", addr)) } } var transport VirtioTransport if transport.isVirtioPCI(config) && bridgeDev.ROMFile != "" { - deviceParam = append(deviceParam, fmt.Sprintf(",romfile=%s", bridgeDev.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", bridgeDev.ROMFile)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParam, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1905,30 +1913,30 @@ func (vsock VSOCKDevice) QemuParams(config *Config) []string { var qemuParams []string driver := vsock.deviceName(config) - deviceParams = append(deviceParams, string(driver)) + deviceParams = append(deviceParams, driver) if s := vsock.Transport.disableModern(config, vsock.DisableModern); s != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",%s", s)) + deviceParams = append(deviceParams, s) } if vsock.VHostFD != nil { qemuFDs := config.appendFDs([]*os.File{vsock.VHostFD}) - deviceParams = append(deviceParams, fmt.Sprintf(",vhostfd=%d", qemuFDs[0])) + deviceParams = append(deviceParams, fmt.Sprintf("vhostfd=%d", qemuFDs[0])) } - deviceParams = append(deviceParams, fmt.Sprintf(",id=%s", vsock.ID)) - deviceParams = append(deviceParams, fmt.Sprintf(",%s=%d", VSOCKGuestCID, vsock.ContextID)) + deviceParams = append(deviceParams, fmt.Sprintf("id=%s", vsock.ID)) + deviceParams = append(deviceParams, fmt.Sprintf("%s=%d", VSOCKGuestCID, vsock.ContextID)) if vsock.Transport.isVirtioPCI(config) && vsock.ROMFile != "" { - deviceParams = append(deviceParams, fmt.Sprintf(",romfile=%s", vsock.ROMFile)) + deviceParams = append(deviceParams, fmt.Sprintf("romfile=%s", vsock.ROMFile)) } if vsock.Transport.isVirtioCCW(config) { if config.Knobs.IOMMUPlatform { - deviceParams = append(deviceParams, ",iommu_platform=on") + deviceParams = append(deviceParams, "iommu_platform=on") } - deviceParams = append(deviceParams, fmt.Sprintf(",devno=%s", vsock.DevNo)) + deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", vsock.DevNo)) } qemuParams = append(qemuParams, "-device") - qemuParams = append(qemuParams, strings.Join(deviceParams, "")) + qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) return qemuParams } @@ -1995,7 +2003,7 @@ func (v RngDevice) QemuParams(config *Config) []string { if v.Transport.isVirtioCCW(config) { if config.Knobs.IOMMUPlatform { - deviceParams = append(deviceParams, ",iommu_platform=on") + deviceParams = append(deviceParams, "iommu_platform=on") } deviceParams = append(deviceParams, fmt.Sprintf("devno=%s", v.DevNo)) } @@ -2080,7 +2088,7 @@ func (b BalloonDevice) QemuParams(config *Config) []string { deviceParams = append(deviceParams, "deflate-on-oom=off") } if s := b.Transport.disableModern(config, b.DisableModern); s != "" { - deviceParams = append(deviceParams, string(s)) + deviceParams = append(deviceParams, s) } qemuParams = append(qemuParams, "-device") qemuParams = append(qemuParams, strings.Join(deviceParams, ",")) @@ -2331,16 +2339,16 @@ func (fwcfg FwCfg) QemuParams(config *Config) []string { fwcfgParams = append(fwcfgParams, fmt.Sprintf("name=%s", f.Name)) if f.File != "" { - fwcfgParams = append(fwcfgParams, fmt.Sprintf(",file=%s", f.File)) + fwcfgParams = append(fwcfgParams, fmt.Sprintf("file=%s", f.File)) } if f.Str != "" { - fwcfgParams = append(fwcfgParams, fmt.Sprintf(",string=%s", f.Str)) + fwcfgParams = append(fwcfgParams, fmt.Sprintf("string=%s", f.Str)) } } qemuParams = append(qemuParams, "-fw_cfg") - qemuParams = append(qemuParams, strings.Join(fwcfgParams, "")) + qemuParams = append(qemuParams, strings.Join(fwcfgParams, ",")) } return qemuParams @@ -2530,15 +2538,15 @@ func (config *Config) appendMachine() { machineParams = append(machineParams, config.Machine.Type) if config.Machine.Acceleration != "" { - machineParams = append(machineParams, fmt.Sprintf(",accel=%s", config.Machine.Acceleration)) + machineParams = append(machineParams, fmt.Sprintf("accel=%s", config.Machine.Acceleration)) } if config.Machine.Options != "" { - machineParams = append(machineParams, fmt.Sprintf(",%s", config.Machine.Options)) + machineParams = append(machineParams, config.Machine.Options) } config.qemuParams = append(config.qemuParams, "-machine") - config.qemuParams = append(config.qemuParams, strings.Join(machineParams, "")) + config.qemuParams = append(config.qemuParams, strings.Join(machineParams, ",")) } } @@ -2555,17 +2563,16 @@ func (config *Config) appendQMPSockets() { continue } - qmpParams := append([]string{}, fmt.Sprintf("%s:", q.Type)) - qmpParams = append(qmpParams, q.Name) + qmpParams := append([]string{}, fmt.Sprintf("%s:%s", q.Type, q.Name)) if q.Server { - qmpParams = append(qmpParams, ",server=on") + qmpParams = append(qmpParams, "server=on") if q.NoWait { - qmpParams = append(qmpParams, ",wait=off") + qmpParams = append(qmpParams, "wait=off") } } config.qemuParams = append(config.qemuParams, "-qmp") - config.qemuParams = append(config.qemuParams, strings.Join(qmpParams, "")) + config.qemuParams = append(config.qemuParams, strings.Join(qmpParams, ",")) } } @@ -2593,15 +2600,15 @@ func (config *Config) appendMemory() { memoryParams = append(memoryParams, config.Memory.Size) if config.Memory.Slots > 0 { - memoryParams = append(memoryParams, fmt.Sprintf(",slots=%d", config.Memory.Slots)) + memoryParams = append(memoryParams, fmt.Sprintf("slots=%d", config.Memory.Slots)) } if config.Memory.MaxMem != "" { - memoryParams = append(memoryParams, fmt.Sprintf(",maxmem=%s", config.Memory.MaxMem)) + memoryParams = append(memoryParams, fmt.Sprintf("maxmem=%s", config.Memory.MaxMem)) } config.qemuParams = append(config.qemuParams, "-m") - config.qemuParams = append(config.qemuParams, strings.Join(memoryParams, "")) + config.qemuParams = append(config.qemuParams, strings.Join(memoryParams, ",")) } } @@ -2612,15 +2619,15 @@ func (config *Config) appendCPUs() error { SMPParams = append(SMPParams, fmt.Sprintf("%d", config.SMP.CPUs)) if config.SMP.Cores > 0 { - SMPParams = append(SMPParams, fmt.Sprintf(",cores=%d", config.SMP.Cores)) + SMPParams = append(SMPParams, fmt.Sprintf("cores=%d", config.SMP.Cores)) } if config.SMP.Threads > 0 { - SMPParams = append(SMPParams, fmt.Sprintf(",threads=%d", config.SMP.Threads)) + SMPParams = append(SMPParams, fmt.Sprintf("threads=%d", config.SMP.Threads)) } if config.SMP.Sockets > 0 { - SMPParams = append(SMPParams, fmt.Sprintf(",sockets=%d", config.SMP.Sockets)) + SMPParams = append(SMPParams, fmt.Sprintf("sockets=%d", config.SMP.Sockets)) } if config.SMP.MaxCPUs > 0 { @@ -2628,11 +2635,11 @@ func (config *Config) appendCPUs() error { return fmt.Errorf("MaxCPUs %d must be equal to or greater than CPUs %d", config.SMP.MaxCPUs, config.SMP.CPUs) } - SMPParams = append(SMPParams, fmt.Sprintf(",maxcpus=%d", config.SMP.MaxCPUs)) + SMPParams = append(SMPParams, fmt.Sprintf("maxcpus=%d", config.SMP.MaxCPUs)) } config.qemuParams = append(config.qemuParams, "-smp") - config.qemuParams = append(config.qemuParams, strings.Join(SMPParams, "")) + config.qemuParams = append(config.qemuParams, strings.Join(SMPParams, ",")) } return nil @@ -2648,15 +2655,15 @@ func (config *Config) appendRTC() { RTCParams = append(RTCParams, fmt.Sprintf("base=%s", string(config.RTC.Base))) if config.RTC.DriftFix != "" { - RTCParams = append(RTCParams, fmt.Sprintf(",driftfix=%s", config.RTC.DriftFix)) + RTCParams = append(RTCParams, fmt.Sprintf("driftfix=%s", config.RTC.DriftFix)) } if config.RTC.Clock != "" { - RTCParams = append(RTCParams, fmt.Sprintf(",clock=%s", config.RTC.Clock)) + RTCParams = append(RTCParams, fmt.Sprintf("clock=%s", config.RTC.Clock)) } config.qemuParams = append(config.qemuParams, "-rtc") - config.qemuParams = append(config.qemuParams, strings.Join(RTCParams, "")) + config.qemuParams = append(config.qemuParams, strings.Join(RTCParams, ",")) } func (config *Config) appendGlobalParam() { diff --git a/src/runtime/vendor/modules.txt b/src/runtime/vendor/modules.txt index 7c19b9da2a..53d2ef3eb1 100644 --- a/src/runtime/vendor/modules.txt +++ b/src/runtime/vendor/modules.txt @@ -246,7 +246,7 @@ github.com/imdario/mergo # github.com/intel-go/cpuid v0.0.0-20210602155658-5747e5cec0d9 ## explicit github.com/intel-go/cpuid -# github.com/kata-containers/govmm v0.0.0-20210622075516-263136e69ac8 +# github.com/kata-containers/govmm v0.0.0-20210722115311-0173713ea912 ## explicit github.com/kata-containers/govmm/qemu # github.com/klauspost/compress v1.11.13 From 2859600a6fad3ccf6abb95144d2e9136b93a6e6f Mon Sep 17 00:00:00 2001 From: Julio Montes Date: Thu, 22 Jul 2021 09:57:23 -0500 Subject: [PATCH 2/2] runtime: virtcontainers: make rootfs image read-only Improve security by making rootfs image read-only, nobody will be able to modify it from the guest. fixes #1916 Signed-off-by: Julio Montes --- src/runtime/virtcontainers/qemu_amd64_test.go | 1 + src/runtime/virtcontainers/qemu_arch_base.go | 1 + 2 files changed, 2 insertions(+) diff --git a/src/runtime/virtcontainers/qemu_amd64_test.go b/src/runtime/virtcontainers/qemu_amd64_test.go index 532970769c..106abf31c5 100644 --- a/src/runtime/virtcontainers/qemu_amd64_test.go +++ b/src/runtime/virtcontainers/qemu_amd64_test.go @@ -138,6 +138,7 @@ func TestQemuAmd64AppendImage(t *testing.T) { ID: "mem0", MemPath: f.Name(), Size: (uint64)(imageStat.Size()), + ReadOnly: true, }, } diff --git a/src/runtime/virtcontainers/qemu_arch_base.go b/src/runtime/virtcontainers/qemu_arch_base.go index c1716ec488..50a82bf5a3 100644 --- a/src/runtime/virtcontainers/qemu_arch_base.go +++ b/src/runtime/virtcontainers/qemu_arch_base.go @@ -406,6 +406,7 @@ func (q *qemuArchBase) appendNvdimmImage(devices []govmmQemu.Device, path string ID: "mem0", MemPath: path, Size: (uint64)(imageStat.Size()), + ReadOnly: true, } devices = append(devices, object)