aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--pkg/build/android.go48
-rw-r--r--pkg/build/build.go2
-rw-r--r--syz-ci/manager.go1
-rw-r--r--syz-ci/syz-ci.go3
4 files changed, 47 insertions, 7 deletions
diff --git a/pkg/build/android.go b/pkg/build/android.go
index 3b1f38561..bade7142f 100644
--- a/pkg/build/android.go
+++ b/pkg/build/android.go
@@ -12,13 +12,46 @@ import (
"regexp"
"time"
+ "github.com/google/syzkaller/pkg/config"
"github.com/google/syzkaller/pkg/osutil"
)
type android struct{}
+type BuildParams struct {
+ DefconfigFragment string `json:"defconfig_fragment"`
+ BuildTarget string `json:"build_target"`
+ BuildScript string `json:"build_script"`
+ VendorBootImage string `json:"vendor_boot_image"`
+}
+
var ccCompilerRegexp = regexp.MustCompile(`#define\s+CONFIG_CC_VERSION_TEXT\s+"(.*)"`)
+func parseConfig(conf []byte) (*BuildParams, error) {
+ buildCfg := new(BuildParams)
+ if err := config.LoadData(conf, buildCfg); err != nil {
+ return nil, fmt.Errorf("failed to parse build config: %w", err)
+ }
+
+ if buildCfg.DefconfigFragment == "" {
+ return nil, fmt.Errorf("defconfig fragment not specified for Android build")
+ }
+
+ if buildCfg.BuildTarget == "" {
+ return nil, fmt.Errorf("build target not specified for Android build")
+ }
+
+ if buildCfg.BuildScript == "" {
+ return nil, fmt.Errorf("build script not specified for Android build")
+ }
+
+ if buildCfg.VendorBootImage == "" {
+ return nil, fmt.Errorf("vendor boot image not specified for Android build")
+ }
+
+ return buildCfg, nil
+}
+
func (a android) readCompiler(kernelDir string) (string, error) {
bytes, err := os.ReadFile(filepath.Join(kernelDir, "out", "mixed", "device-kernel", "private",
"gs-google", "include", "generated", "autoconf.h"))
@@ -41,14 +74,16 @@ func (a android) build(params Params) (ImageDetails, error) {
return details, fmt.Errorf("sysctl file is not supported for android images")
}
+ buildCfg, err := parseConfig(params.Build)
+ if err != nil {
+ return details, fmt.Errorf("error parsing android configs: %w", err)
+ }
+
// Build kernel.
- cmd := osutil.Command("./build_cloudripper.sh")
+ cmd := osutil.Command(fmt.Sprintf("./%v", buildCfg.BuildScript))
cmd.Dir = params.KernelDir
- // No cloudripper kasan config; currently only slider has a kasan config.
- defconfigFragment := filepath.Join("private", "gs-google", "build.config.slider.kasan")
- buildTarget := "cloudripper_gki_kasan"
cmd.Env = append(cmd.Env, "OUT_DIR=out", "DIST_DIR=dist", fmt.Sprintf("GKI_DEFCONFIG_FRAGMENT=%v",
- defconfigFragment), fmt.Sprintf("BUILD_TARGET=%v", buildTarget))
+ buildCfg.DefconfigFragment), fmt.Sprintf("BUILD_TARGET=%v", buildCfg.BuildTarget))
if _, err := osutil.Run(time.Hour, cmd); err != nil {
return details, fmt.Errorf("failed to build kernel: %s", err)
@@ -59,7 +94,6 @@ func (a android) build(params Params) (ImageDetails, error) {
vmlinux := filepath.Join(buildDistDir, "vmlinux")
config := filepath.Join(params.KernelDir, "out", "mixed", "device-kernel", "private", "gs-google", ".config")
- var err error
details.CompilerID, err = a.readCompiler(params.KernelDir)
if err != nil {
return details, fmt.Errorf("failed to read compiler: %v", err)
@@ -78,7 +112,7 @@ func (a android) build(params Params) (ImageDetails, error) {
}
defer imageFile.Close()
- if err := a.embedImages(imageFile, buildDistDir, "boot.img", "dtbo.img", "vendor_kernel_boot.img",
+ if err := a.embedImages(imageFile, buildDistDir, "boot.img", "dtbo.img", buildCfg.VendorBootImage,
"vendor_dlkm.img"); err != nil {
return details, fmt.Errorf("failed to embed images: %v", err)
}
diff --git a/pkg/build/build.go b/pkg/build/build.go
index 2ee0d3aa6..f4cee5d88 100644
--- a/pkg/build/build.go
+++ b/pkg/build/build.go
@@ -6,6 +6,7 @@ package build
import (
"bytes"
+ "encoding/json"
"fmt"
"os"
"path/filepath"
@@ -35,6 +36,7 @@ type Params struct {
SysctlFile string
Config []byte
Tracer debugtracer.DebugTracer
+ Build json.RawMessage
}
// Information that is returned from the Image function.
diff --git a/syz-ci/manager.go b/syz-ci/manager.go
index 2af4e1558..e4c368269 100644
--- a/syz-ci/manager.go
+++ b/syz-ci/manager.go
@@ -331,6 +331,7 @@ func (mgr *Manager) build(kernelCommit *vcs.Commit) error {
CmdlineFile: mgr.mgrcfg.KernelCmdline,
SysctlFile: mgr.mgrcfg.KernelSysctl,
Config: mgr.configData,
+ Build: mgr.mgrcfg.Build,
}
details, err := build.Image(params)
info := mgr.createBuildInfo(kernelCommit, details.CompilerID)
diff --git a/syz-ci/syz-ci.go b/syz-ci/syz-ci.go
index e9b51d267..0e5fe6b6e 100644
--- a/syz-ci/syz-ci.go
+++ b/syz-ci/syz-ci.go
@@ -165,6 +165,9 @@ type ManagerConfig struct {
Ccache string `json:"ccache"`
Userspace string `json:"userspace"`
KernelConfig string `json:"kernel_config"`
+ // Build-type-specific parameters.
+ // Parameters for concrete types are in Config type in pkg/build/TYPE.go, e.g. pkg/build/android.go.
+ Build json.RawMessage `json:"build"`
// Baseline config for bisection, see pkg/bisect.KernelConfig.BaselineConfig.
KernelBaselineConfig string `json:"kernel_baseline_config"`
// File with kernel cmdline values (optional).