From 0f8557831efd4a94a3e756cfc15d608f3e948721 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mauricio=20V=C3=A1squez?= Date: Wed, 4 Sep 2024 17:26:27 -0500 Subject: [PATCH] wasm: Add parameters handling to wasm MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Allow gadgets developers to interact with parameters from the wasm module: - get value of parameters Signed-off-by: Mauricio Vásquez --- docs/gadget-devel/gadget-wasm-api-raw.md | 30 ++++++++ pkg/operators/wasm/helpers.go | 5 ++ pkg/operators/wasm/params.go | 64 ++++++++++++++++++ pkg/operators/wasm/testdata/Makefile | 1 + pkg/operators/wasm/testdata/badguest.tar | Bin 156160 -> 157184 bytes pkg/operators/wasm/testdata/badguest/go.mod | 2 +- .../wasm/testdata/badguest/program.go | 13 +++- pkg/operators/wasm/testdata/params.tar | Bin 0 -> 149504 bytes pkg/operators/wasm/testdata/params/build.yaml | 1 + .../wasm/testdata/params/gadget.yaml | 11 +++ pkg/operators/wasm/testdata/params/go.mod | 8 +++ .../wasm/testdata/params/program.bpf.c | 1 + pkg/operators/wasm/testdata/params/program.go | 48 +++++++++++++ pkg/operators/wasm/wasm.go | 31 +++++++-- pkg/operators/wasm/wasm_test.go | 54 +++++++++++++++ wasmapi/go/params.go | 34 ++++++++++ 16 files changed, 295 insertions(+), 8 deletions(-) create mode 100644 pkg/operators/wasm/params.go create mode 100644 pkg/operators/wasm/testdata/params.tar create mode 100644 pkg/operators/wasm/testdata/params/build.yaml create mode 100644 pkg/operators/wasm/testdata/params/gadget.yaml create mode 100644 pkg/operators/wasm/testdata/params/go.mod create mode 100644 pkg/operators/wasm/testdata/params/program.bpf.c create mode 100644 pkg/operators/wasm/testdata/params/program.go create mode 100644 wasmapi/go/params.go diff --git a/docs/gadget-devel/gadget-wasm-api-raw.md b/docs/gadget-devel/gadget-wasm-api-raw.md index a988cea1f6e..fa9ab073b51 100644 --- a/docs/gadget-devel/gadget-wasm-api-raw.md +++ b/docs/gadget-devel/gadget-wasm-api-raw.md @@ -280,3 +280,33 @@ Parameters: Return value: - None + +### Parameters + +Parameters passed to the WASM module are defined in the metadata file as this: + +```yaml +... +params: + wasm: + param-key: + key: param-key + description: param-description + defaultValue: param-default-value + typeHint: param-type-hint + title: param-title + alias: param-alias + isMandatory: true + param-key2: + ... +``` + +#### `getParamValue(key string) string` + +Return the value of a parameter. + +Parameters: +- `key` (string): Key of the parameter. + +Return value: +- The value of the parameter. diff --git a/pkg/operators/wasm/helpers.go b/pkg/operators/wasm/helpers.go index 2daaf70d820..488943750b0 100644 --- a/pkg/operators/wasm/helpers.go +++ b/pkg/operators/wasm/helpers.go @@ -34,6 +34,11 @@ func bufFromStack(m wapi.Module, val uint64) ([]byte, error) { } func stringFromStack(m wapi.Module, val uint64) (string, error) { + // handle empty strings in a special way + if val == 0 { + return "", nil + } + buf, err := bufFromStack(m, val) if err != nil { return "", err diff --git a/pkg/operators/wasm/params.go b/pkg/operators/wasm/params.go new file mode 100644 index 00000000000..f409276b986 --- /dev/null +++ b/pkg/operators/wasm/params.go @@ -0,0 +1,64 @@ +// Copyright 2024 The Inspektor Gadget authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package wasm + +import ( + "context" + + "github.com/tetratelabs/wazero" + wapi "github.com/tetratelabs/wazero/api" +) + +func (i *wasmOperatorInstance) addParamsFuncs(env wazero.HostModuleBuilder) { + exportFunction(env, "getParamValue", i.getParamValue, + []wapi.ValueType{ + wapi.ValueTypeI64, // ParamKey + }, + []wapi.ValueType{wapi.ValueTypeI64}, // Value + ) +} + +// getParamValue returns the value of a param. +// Params: +// - stack[0] parameter key +// Return value: +// - Uint64 with the param's value, 0 on error +func (i *wasmOperatorInstance) getParamValue(ctx context.Context, m wapi.Module, stack []uint64) { + paramKeyPtr := stack[0] + + paramKey, err := stringFromStack(m, paramKeyPtr) + if err != nil { + i.logger.Warnf("getParamValue: reading string from stack: %v", err) + stack[0] = 0 + return + } + + val, ok := i.paramValues[paramKey] + if !ok { + i.logger.Warnf("getParamValue: param %q not found", paramKey) + stack[0] = 0 + return + } + + buf := []byte(val) + ret, err := i.writeToGuestMemory(ctx, buf) + if err != nil { + i.logger.Warnf("getParamValue: writing to guest memory: %v", err) + stack[0] = 0 + return + } + + stack[0] = ret +} diff --git a/pkg/operators/wasm/testdata/Makefile b/pkg/operators/wasm/testdata/Makefile index 7fdc68dedeb..48f2a42ee19 100644 --- a/pkg/operators/wasm/testdata/Makefile +++ b/pkg/operators/wasm/testdata/Makefile @@ -4,6 +4,7 @@ TEST_ARTIFACTS = \ fields \ dataarray \ badguest \ + params \ # all: $(TEST_ARTIFACTS) diff --git a/pkg/operators/wasm/testdata/badguest.tar b/pkg/operators/wasm/testdata/badguest.tar index 0fefc812be64729750cd9fd2ab891794ca750777..37bf638f14db1a315b75c49b878c7979bd89c7f6 100644 GIT binary patch delta 22097 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 delta 21100 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 D*Ozt& literal 0 HcmV?d00001 diff --git a/pkg/operators/wasm/testdata/params/build.yaml b/pkg/operators/wasm/testdata/params/build.yaml new file mode 100644 index 00000000000..9a6d0a5f808 --- /dev/null +++ b/pkg/operators/wasm/testdata/params/build.yaml @@ -0,0 +1 @@ +wasm: program.go diff --git a/pkg/operators/wasm/testdata/params/gadget.yaml b/pkg/operators/wasm/testdata/params/gadget.yaml new file mode 100644 index 00000000000..77cede446be --- /dev/null +++ b/pkg/operators/wasm/testdata/params/gadget.yaml @@ -0,0 +1,11 @@ +name: params_test +params: + wasm: + param-key: + key: param-key + description: param-description + defaultValue: param-default-value + typeHint: param-type-hint + title: param-title + alias: param-alias + isMandatory: true diff --git a/pkg/operators/wasm/testdata/params/go.mod b/pkg/operators/wasm/testdata/params/go.mod new file mode 100644 index 00000000000..b7ec2c67c5a --- /dev/null +++ b/pkg/operators/wasm/testdata/params/go.mod @@ -0,0 +1,8 @@ +module main + +go 1.22.7 + +require github.com/inspektor-gadget/inspektor-gadget v0.27.0 + +// use this to be able to compile it locally +replace github.com/inspektor-gadget/inspektor-gadget => ../../../../../ diff --git a/pkg/operators/wasm/testdata/params/program.bpf.c b/pkg/operators/wasm/testdata/params/program.bpf.c new file mode 100644 index 00000000000..5672b3f33dc --- /dev/null +++ b/pkg/operators/wasm/testdata/params/program.bpf.c @@ -0,0 +1 @@ +// TODO: a c file is always needed by the gadget to be built diff --git a/pkg/operators/wasm/testdata/params/program.go b/pkg/operators/wasm/testdata/params/program.go new file mode 100644 index 00000000000..52fb02a5905 --- /dev/null +++ b/pkg/operators/wasm/testdata/params/program.go @@ -0,0 +1,48 @@ +// Copyright 2024 The Inspektor Gadget authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// This program tries as hard as it can to break the host by calling functions +// with wrong arguments. It uses the low level functions directly as the goal is +// to test the host and not the wrapper API. Tests under dataarray and fields +// test also the higher level API. +package main + +import ( + api "github.com/inspektor-gadget/inspektor-gadget/wasmapi/go" +) + +//export gadgetStart +func gadgetStart() int { + val, err := api.GetParamValue("param-key") + if err != nil { + api.Errorf("failed to get param: %v", err) + return 1 + } + + const expected = "param-value" + if val != expected { + api.Errorf("param value should be %q, got: %q", expected, val) + return 1 + } + + _, err = api.GetParamValue("non-existing-param") + if err == nil { + api.Errorf("looking for non-existing-param succeded") + return 1 + } + + return 0 +} + +func main() {} diff --git a/pkg/operators/wasm/wasm.go b/pkg/operators/wasm/wasm.go index 0c4e4f4e0e1..109543100d7 100644 --- a/pkg/operators/wasm/wasm.go +++ b/pkg/operators/wasm/wasm.go @@ -25,6 +25,7 @@ import ( "github.com/hashicorp/go-multierror" ocispec "github.com/opencontainers/image-spec/specs-go/v1" + "github.com/spf13/viper" "github.com/tetratelabs/wazero" wapi "github.com/tetratelabs/wazero/api" "github.com/tetratelabs/wazero/imports/wasi_snapshot_preview1" @@ -65,9 +66,10 @@ func (w *wasmOperator) InstantiateImageOperator( operators.ImageOperatorInstance, error, ) { instance := &wasmOperatorInstance{ - gadgetCtx: gadgetCtx, - handleMap: map[uint32]any{}, - logger: gadgetCtx.Logger(), + gadgetCtx: gadgetCtx, + handleMap: map[uint32]any{}, + logger: gadgetCtx.Logger(), + paramValues: paramValues, } if err := instance.init(gadgetCtx, target, desc); err != nil { @@ -75,6 +77,23 @@ func (w *wasmOperator) InstantiateImageOperator( return nil, fmt.Errorf("initializing wasm: %w", err) } + var config *viper.Viper + if configVar, ok := gadgetCtx.GetVar("config"); ok { + config, _ = configVar.(*viper.Viper) + } + + if config != nil { + extraParams := map[string]*api.Param{} + err := config.UnmarshalKey("params.wasm", &extraParams) + if err != nil { + return nil, fmt.Errorf("unmarshalling extra params: %w", err) + } + + for _, v := range extraParams { + instance.extraParams = append(instance.extraParams, v) + } + } + return instance, nil } @@ -94,6 +113,9 @@ type wasmOperatorInstance struct { handleMap map[uint32]any lastHandleIndex uint32 handleLock sync.RWMutex + + extraParams api.Params + paramValues map[string]string } func (i *wasmOperatorInstance) Name() string { @@ -109,7 +131,7 @@ func (i *wasmOperatorInstance) Prepare(gadgetCtx operators.GadgetContext) error } func (i *wasmOperatorInstance) ExtraParams(gadgetCtx operators.GadgetContext) api.Params { - return nil + return i.extraParams } func (i *wasmOperatorInstance) addHandle(obj any) uint32 { @@ -190,6 +212,7 @@ func (i *wasmOperatorInstance) init( i.addLogFuncs(env) i.addDataSourceFuncs(env) i.addFieldFuncs(env) + i.addParamsFuncs(env) if _, err := env.Instantiate(ctx); err != nil { return fmt.Errorf("instantiating host module: %w", err) diff --git a/pkg/operators/wasm/wasm_test.go b/pkg/operators/wasm/wasm_test.go index 1de5e5aaeb2..c44c6472464 100644 --- a/pkg/operators/wasm/wasm_test.go +++ b/pkg/operators/wasm/wasm_test.go @@ -326,3 +326,57 @@ func TestBadGuest(t *testing.T) { err = runtime.RunGadget(gadgetCtx, nil, params) require.NoError(t, err, "running gadget") } + +func TestWasmParams(t *testing.T) { + utilstest.RequireRoot(t) + + t.Parallel() + + myOperator := simple.New("myHandler", + simple.OnStart(func(gadgetCtx operators.GadgetContext) error { + params := gadgetCtx.Params() + found := false + for _, p := range params { + if p.Key == "param-key" { + require.Equal(t, "param-description", p.Description) + require.Equal(t, "param-default-value", p.DefaultValue) + require.Equal(t, "param-type-hint", p.TypeHint) + require.Equal(t, "param-title", p.Title) + require.Equal(t, "param-alias", p.Alias) + require.True(t, p.IsMandatory) + + found = true + break + } + } + + require.True(t, found, "param not found") + return nil + }), + ) + + ctx, cancel := context.WithTimeout(context.Background(), time.Second*2) + t.Cleanup(cancel) + + ociStore, err := orasoci.NewFromTar(ctx, "testdata/params.tar") + require.NoError(t, err, "creating oci store") + + gadgetCtx := gadgetcontext.New( + ctx, + "params:latest", + gadgetcontext.WithDataOperators(ocihandler.OciHandler, myOperator), + gadgetcontext.WithOrasReadonlyTarget(ociStore), + ) + + runtime := local.New() + err = runtime.Init(nil) + require.NoError(t, err, "runtime init") + t.Cleanup(func() { runtime.Close() }) + + params := map[string]string{ + "operator.oci.verify-image": "false", + "operator.oci.wasm.param-key": "param-value", + } + err = runtime.RunGadget(gadgetCtx, nil, params) + require.NoError(t, err, "running gadget") +} diff --git a/wasmapi/go/params.go b/wasmapi/go/params.go new file mode 100644 index 00000000000..92bb66d5631 --- /dev/null +++ b/wasmapi/go/params.go @@ -0,0 +1,34 @@ +// Copyright 2024 The Inspektor Gadget authors +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package api + +import ( + "errors" +) + +//go:wasmimport env getParamValue +func getParamValue(key uint64) uint64 + +func GetParamValue(key string) (string, error) { + k := uint64(stringToBufPtr(key)) + val := bufPtr(getParamValue(k)) + if val == 0 { + return "", errors.New("error getting param value") + } + + ret := val.string() + val.free() + return ret, nil +}