From 42a4d50890beed97e5e9868be922faa6285f4a12 Mon Sep 17 00:00:00 2001 From: kalder <61064868+kalder@users.noreply.github.com> Date: Tue, 21 Feb 2023 09:58:02 -0800 Subject: vm/proxyapp: pass kernel image data to ProxyApp (#3696) We need the kernel built by Syzkaller to start the VM. If transfer_file_content is set, pass the image data in addition to the path. It's sent in the CreatePool RPC, since future CreateInstance RPCs should use the same image. --- vm/proxyapp/proxyappclient.go | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) (limited to 'vm/proxyapp/proxyappclient.go') diff --git a/vm/proxyapp/proxyappclient.go b/vm/proxyapp/proxyappclient.go index 946556f24..daf73df0e 100644 --- a/vm/proxyapp/proxyappclient.go +++ b/vm/proxyapp/proxyappclient.go @@ -118,7 +118,7 @@ func (p *pool) init(params *proxyAppParams, cfg *Config) error { p.proxy.doLogPooling(params.LogOutput) - count, err := p.proxy.CreatePool(string(cfg.ProxyAppConfig), p.env.Debug) + count, err := p.proxy.CreatePool(cfg, p.env.Image, p.env.Debug) if err != nil || count == 0 || (p.count != 0 && p.count != count) { if err == nil { err = fmt.Errorf("wrong pool size %v, prev was %v", count, p.count) @@ -163,7 +163,7 @@ func (p *pool) Create(workdir string, index int) (vmimpl.Instance, error) { return nil, fmt.Errorf("can't create instance using nil pool") } - return proxy.CreateInstance(workdir, index) + return proxy.CreateInstance(workdir, p.env.Image, index) } // Close is not used now. Its support require wide code changes. @@ -342,15 +342,28 @@ func (proxy *ProxyApp) doLogPooling(writer io.Writer) { }() } -func (proxy *ProxyApp) CreatePool(config string, debug bool) (int, error) { +func (proxy *ProxyApp) CreatePool(config *Config, image string, debug bool) (int, error) { var reply proxyrpc.CreatePoolResult + params := proxyrpc.CreatePoolParams{ + Debug: debug, + Param: string(config.ProxyAppConfig), + Image: image, + } + + if config.TransferFileContent { + imageData, err := os.ReadFile(image) + if err != nil { + return 0, fmt.Errorf("read image on host: %v", err) + } + + params.ImageData = imageData + } + err := proxy.Call( "ProxyVM.CreatePool", - proxyrpc.CreatePoolParams{ - Debug: debug, - Param: config, - }, + params, &reply) + if err != nil { return 0, err } @@ -358,7 +371,7 @@ func (proxy *ProxyApp) CreatePool(config string, debug bool) (int, error) { return reply.Count, nil } -func (proxy *ProxyApp) CreateInstance(workdir string, index int) (vmimpl.Instance, error) { +func (proxy *ProxyApp) CreateInstance(workdir, image string, index int) (vmimpl.Instance, error) { var reply proxyrpc.CreateInstanceResult params := proxyrpc.CreateInstanceParams{ -- cgit mrf-deployment