// Copyright 2017 syzkaller project authors. All rights reserved.
// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.

package host

import (
	"fmt"
	"strings"
	"syscall"

	"github.com/google/syzkaller/prog"
)

func isSupported(c *prog.Syscall, target *prog.Target, sandbox string) (bool, string) {
	if strings.HasPrefix(c.CallName, "ioctl$VMM_") {
		return isSupportedVMM()
	}
	return true, ""
}

func isSupportedVMM() (bool, string) {
	device := "/dev/vmm"
	fd, err := syscall.Open(device, syscall.O_RDONLY, 0)
	if fd == -1 {
		return false, fmt.Sprintf("open(%v) failed: %v", device, err)
	}
	syscall.Close(fd)
	return true, ""
}

func init() {
	checkFeature[FeatureCoverage] = unconditionallyEnabled
	checkFeature[FeatureComparisons] = unconditionallyEnabled
	checkFeature[FeatureNetworkInjection] = unconditionallyEnabled
	checkFeature[FeatureSandboxSetuid] = unconditionallyEnabled
}
