mirror of
https://github.com/kata-containers/kata-containers.git
synced 2025-06-28 08:17:37 +00:00
config: Protect file_mem_backend against annotation attacks
This one could theoretically be used to overwrite data on the host. It seems somewhat less risky than the earlier ones for a number of reasons, but worth protecting a little anyway. Fixes: #901 Signed-off-by: Christophe de Dinechin <dinechin@redhat.com>
This commit is contained in:
parent
aae9656d8b
commit
4e89b885d2
@ -221,6 +221,9 @@ vhost_user_store_path = "@DEFVHOSTUSERSTOREPATH@"
|
|||||||
# This option will be ignored if VM templating is enabled.
|
# This option will be ignored if VM templating is enabled.
|
||||||
#file_mem_backend = ""
|
#file_mem_backend = ""
|
||||||
|
|
||||||
|
# List of valid annotations values for the file_mem_backend annotation (default: empty)
|
||||||
|
# file_mem_backend_list = [ "/dev/shm" ]
|
||||||
|
|
||||||
# Enable swap of vm memory. Default false.
|
# Enable swap of vm memory. Default false.
|
||||||
# The behaviour is undefined if mem_prealloc is also set to true
|
# The behaviour is undefined if mem_prealloc is also set to true
|
||||||
#enable_swap = true
|
#enable_swap = true
|
||||||
|
@ -226,6 +226,9 @@ vhost_user_store_path = "@DEFVHOSTUSERSTOREPATH@"
|
|||||||
# This option will be ignored if VM templating is enabled.
|
# This option will be ignored if VM templating is enabled.
|
||||||
#file_mem_backend = ""
|
#file_mem_backend = ""
|
||||||
|
|
||||||
|
# List of valid annotations values for the file_mem_backend annotation (default: empty)
|
||||||
|
# file_mem_backend_list = [ "/dev/shm" ]
|
||||||
|
|
||||||
# Enable swap of vm memory. Default false.
|
# Enable swap of vm memory. Default false.
|
||||||
# The behaviour is undefined if mem_prealloc is also set to true
|
# The behaviour is undefined if mem_prealloc is also set to true
|
||||||
#enable_swap = true
|
#enable_swap = true
|
||||||
|
@ -665,6 +665,7 @@ func newQemuHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) {
|
|||||||
IOMMU: h.IOMMU,
|
IOMMU: h.IOMMU,
|
||||||
IOMMUPlatform: h.getIOMMUPlatform(),
|
IOMMUPlatform: h.getIOMMUPlatform(),
|
||||||
FileBackedMemRootDir: h.FileBackedMemRootDir,
|
FileBackedMemRootDir: h.FileBackedMemRootDir,
|
||||||
|
FileBackedMemRootList: h.FileBackedMemRootList,
|
||||||
Mlock: !h.Swap,
|
Mlock: !h.Swap,
|
||||||
Debug: h.Debug,
|
Debug: h.Debug,
|
||||||
DisableNestingChecks: h.DisableNestingChecks,
|
DisableNestingChecks: h.DisableNestingChecks,
|
||||||
@ -824,6 +825,7 @@ func newClhHypervisorConfig(h hypervisor) (vc.HypervisorConfig, error) {
|
|||||||
MemPrealloc: h.MemPrealloc,
|
MemPrealloc: h.MemPrealloc,
|
||||||
HugePages: h.HugePages,
|
HugePages: h.HugePages,
|
||||||
FileBackedMemRootDir: h.FileBackedMemRootDir,
|
FileBackedMemRootDir: h.FileBackedMemRootDir,
|
||||||
|
FileBackedMemRootList: h.FileBackedMemRootList,
|
||||||
Mlock: !h.Swap,
|
Mlock: !h.Swap,
|
||||||
Debug: h.Debug,
|
Debug: h.Debug,
|
||||||
DisableNestingChecks: h.DisableNestingChecks,
|
DisableNestingChecks: h.DisableNestingChecks,
|
||||||
|
@ -330,6 +330,9 @@ type HypervisorConfig struct {
|
|||||||
// File based memory backend root directory
|
// File based memory backend root directory
|
||||||
FileBackedMemRootDir string
|
FileBackedMemRootDir string
|
||||||
|
|
||||||
|
// FileBackedMemRootList is the list of valid root directories values for annotations
|
||||||
|
FileBackedMemRootList []string
|
||||||
|
|
||||||
// customAssets is a map of assets.
|
// customAssets is a map of assets.
|
||||||
// Each value in that map takes precedence over the configured assets.
|
// Each value in that map takes precedence over the configured assets.
|
||||||
// For example, if there is a value for the "kernel" key in this map,
|
// For example, if there is a value for the "kernel" key in this map,
|
||||||
|
@ -236,6 +236,7 @@ func (s *Sandbox) dumpConfig(ss *persistapi.SandboxState) {
|
|||||||
MemPrealloc: sconfig.HypervisorConfig.MemPrealloc,
|
MemPrealloc: sconfig.HypervisorConfig.MemPrealloc,
|
||||||
HugePages: sconfig.HypervisorConfig.HugePages,
|
HugePages: sconfig.HypervisorConfig.HugePages,
|
||||||
FileBackedMemRootDir: sconfig.HypervisorConfig.FileBackedMemRootDir,
|
FileBackedMemRootDir: sconfig.HypervisorConfig.FileBackedMemRootDir,
|
||||||
|
FileBackedMemRootList: sconfig.HypervisorConfig.FileBackedMemRootList,
|
||||||
Realtime: sconfig.HypervisorConfig.Realtime,
|
Realtime: sconfig.HypervisorConfig.Realtime,
|
||||||
Mlock: sconfig.HypervisorConfig.Mlock,
|
Mlock: sconfig.HypervisorConfig.Mlock,
|
||||||
DisableNestingChecks: sconfig.HypervisorConfig.DisableNestingChecks,
|
DisableNestingChecks: sconfig.HypervisorConfig.DisableNestingChecks,
|
||||||
@ -503,6 +504,7 @@ func loadSandboxConfig(id string) (*SandboxConfig, error) {
|
|||||||
MemPrealloc: hconf.MemPrealloc,
|
MemPrealloc: hconf.MemPrealloc,
|
||||||
HugePages: hconf.HugePages,
|
HugePages: hconf.HugePages,
|
||||||
FileBackedMemRootDir: hconf.FileBackedMemRootDir,
|
FileBackedMemRootDir: hconf.FileBackedMemRootDir,
|
||||||
|
FileBackedMemRootList: hconf.FileBackedMemRootList,
|
||||||
Realtime: hconf.Realtime,
|
Realtime: hconf.Realtime,
|
||||||
Mlock: hconf.Mlock,
|
Mlock: hconf.Mlock,
|
||||||
DisableNestingChecks: hconf.DisableNestingChecks,
|
DisableNestingChecks: hconf.DisableNestingChecks,
|
||||||
|
@ -116,6 +116,9 @@ type HypervisorConfig struct {
|
|||||||
// File based memory backend root directory
|
// File based memory backend root directory
|
||||||
FileBackedMemRootDir string
|
FileBackedMemRootDir string
|
||||||
|
|
||||||
|
// FileBackedMemRootList is the list of valid root directories values for annotations
|
||||||
|
FileBackedMemRootList []string
|
||||||
|
|
||||||
// BlockDeviceCacheSet specifies cache-related options will be set to block devices or not.
|
// BlockDeviceCacheSet specifies cache-related options will be set to block devices or not.
|
||||||
BlockDeviceCacheSet bool
|
BlockDeviceCacheSet bool
|
||||||
|
|
||||||
|
@ -375,7 +375,7 @@ func addHypervisorConfigOverrides(ocispec specs.Spec, config *vc.SandboxConfig,
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := addHypervisorMemoryOverrides(ocispec, config); err != nil {
|
if err := addHypervisorMemoryOverrides(ocispec, config, runtime); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -497,7 +497,7 @@ func addHypervisorConfigOverrides(ocispec specs.Spec, config *vc.SandboxConfig,
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func addHypervisorMemoryOverrides(ocispec specs.Spec, sbConfig *vc.SandboxConfig) error {
|
func addHypervisorMemoryOverrides(ocispec specs.Spec, sbConfig *vc.SandboxConfig, runtime RuntimeConfig) error {
|
||||||
if value, ok := ocispec.Annotations[vcAnnotations.DefaultMemory]; ok {
|
if value, ok := ocispec.Annotations[vcAnnotations.DefaultMemory]; ok {
|
||||||
memorySz, err := strconv.ParseUint(value, 10, 32)
|
memorySz, err := strconv.ParseUint(value, 10, 32)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -561,6 +561,9 @@ func addHypervisorMemoryOverrides(ocispec specs.Spec, sbConfig *vc.SandboxConfig
|
|||||||
}
|
}
|
||||||
|
|
||||||
if value, ok := ocispec.Annotations[vcAnnotations.FileBackedMemRootDir]; ok {
|
if value, ok := ocispec.Annotations[vcAnnotations.FileBackedMemRootDir]; ok {
|
||||||
|
if !regexpContains(runtime.HypervisorConfig.FileBackedMemRootList, value) {
|
||||||
|
return fmt.Errorf("file_mem_backend value %v required from annotation is not valid", value)
|
||||||
|
}
|
||||||
sbConfig.HypervisorConfig.FileBackedMemRootDir = value
|
sbConfig.HypervisorConfig.FileBackedMemRootDir = value
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user