aboutsummaryrefslogtreecommitdiffstats
path: root/vm/proxyapp
diff options
context:
space:
mode:
authorkalder <61064868+kalder@users.noreply.github.com>2023-02-21 09:58:02 -0800
committerGitHub <noreply@github.com>2023-02-21 09:58:02 -0800
commit42a4d50890beed97e5e9868be922faa6285f4a12 (patch)
treeb43c0bccd67d2c29fd84be2e4aace85ac52ba6c3 /vm/proxyapp
parentd21349bc193bde842fa86a8b4d7f34a4ebad3c17 (diff)
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.
Diffstat (limited to 'vm/proxyapp')
-rw-r--r--vm/proxyapp/proxyappclient.go29
-rw-r--r--vm/proxyapp/proxyrpc/proxyrpc.go6
2 files changed, 25 insertions, 10 deletions
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{
diff --git a/vm/proxyapp/proxyrpc/proxyrpc.go b/vm/proxyapp/proxyrpc/proxyrpc.go
index 95bc77ce0..10c81f9c2 100644
--- a/vm/proxyapp/proxyrpc/proxyrpc.go
+++ b/vm/proxyapp/proxyrpc/proxyrpc.go
@@ -18,8 +18,10 @@ type ProxyAppInterface interface {
}
type CreatePoolParams struct {
- Debug bool
- Param string
+ Debug bool
+ Param string
+ Image string
+ ImageData []byte
}
type CreatePoolResult struct {