Skip to content

Commit 46c632c

Browse files
committed
fix(container): Propagate engine initialization errors to the caller
If the specific container engine worker fails during initialization, the error is silently skipped making it hard to troubleshoot the real problem. Instead, accumulate and bubble up all the errors to the async handler.
1 parent c7c0968 commit 46c632c

3 files changed

Lines changed: 29 additions & 7 deletions

File tree

plugins/container/go-worker/main_exe.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,10 @@ func main() {
7070
fmt.Println("Starting worker")
7171
cstr := C.CString(initCfg)
7272
enabledSocks := C.CString("")
73-
ptr := StartWorker((*[0]byte)(C.echo_cb), cstr, &enabledSocks)
73+
errmsg := C.CString("")
74+
ptr := StartWorker((*[0]byte)(C.echo_cb), cstr, &enabledSocks, &errmsg)
7475
if ptr == nil {
75-
fmt.Println("Failed to start worker; nothing configured?")
76+
fmt.Println(fmt.Sprintf("Failed to start worker; nothing configured? %s", C.GoString(errmsg)))
7677
os.Exit(1)
7778
}
7879
socks := C.GoString(enabledSocks)

plugins/container/go-worker/worker_api.go

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,13 +11,15 @@ import "C"
1111
import (
1212
"context"
1313
"encoding/json"
14-
"github.com/falcosecurity/plugin-sdk-go/pkg/ptr"
15-
"github.com/falcosecurity/plugins/plugins/container/go-worker/pkg/config"
16-
"github.com/falcosecurity/plugins/plugins/container/go-worker/pkg/container"
1714
"runtime"
1815
"runtime/cgo"
16+
"strings"
1917
"sync"
2018
"unsafe"
19+
20+
"github.com/falcosecurity/plugin-sdk-go/pkg/ptr"
21+
"github.com/falcosecurity/plugins/plugins/container/go-worker/pkg/config"
22+
"github.com/falcosecurity/plugins/plugins/container/go-worker/pkg/container"
2123
)
2224

2325
type PluginCtx struct {
@@ -29,7 +31,7 @@ type PluginCtx struct {
2931
}
3032

3133
//export StartWorker
32-
func StartWorker(cb C.async_cb, initCfg *C.cchar_t, enabledSocks **C.cchar_t) unsafe.Pointer {
34+
func StartWorker(cb C.async_cb, initCfg *C.cchar_t, enabledSocks **C.cchar_t, errmsg **C.cchar_t) unsafe.Pointer {
3335
var (
3436
pluginCtx PluginCtx
3537
ctx context.Context
@@ -61,11 +63,15 @@ func StartWorker(cb C.async_cb, initCfg *C.cchar_t, enabledSocks **C.cchar_t) un
6163
return nil
6264
}
6365

66+
var errs strings.Builder
6467
containerEngines := make([]container.Engine, 0)
6568
enabledEngines := make(map[string][]string)
69+
6670
for _, generator := range generators {
6771
engine, err := generator(ctx)
6872
if err != nil {
73+
errs.WriteString(err.Error())
74+
errs.WriteByte('\n')
6975
continue
7076
}
7177
containerEngines = append(containerEngines, engine)
@@ -82,6 +88,10 @@ func StartWorker(cb C.async_cb, initCfg *C.cchar_t, enabledSocks **C.cchar_t) un
8288
}
8389
}
8490

91+
if errs.Len() > 0 {
92+
*errmsg = C.CString(errs.String())
93+
}
94+
8595
pluginCtx.fetchCh = make(chan string, fetchChSize)
8696

8797
// Always append the dummy engine that is required to

plugins/container/src/caps/async/async.cpp

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,22 @@ bool my_plugin::start_async_events(
4343
m_logger.log("starting async go-worker",
4444
falcosecurity::_internal::SS_PLUGIN_LOG_SEV_DEBUG);
4545
nlohmann::json j(m_cfg);
46+
4647
const char *enabled_engines = nullptr;
48+
const char *err = nullptr;
49+
4750
m_async_ctx = StartWorker(generate_async_event<ASYNC_HANDLER_GO_WORKER>,
48-
j.dump().c_str(), &enabled_engines);
51+
j.dump().c_str(), &enabled_engines, &err);
4952
m_logger.log(fmt::format("attached engine sockets: {}", enabled_engines),
5053
falcosecurity::_internal::SS_PLUGIN_LOG_SEV_DEBUG);
54+
55+
if(err)
56+
{
57+
m_logger.log(fmt::format("failed to start async go-worker: {}", err),
58+
falcosecurity::_internal::SS_PLUGIN_LOG_SEV_ERROR);
59+
free((void *)err);
60+
}
61+
5162
free((void *)enabled_engines);
5263

5364
// Merge back pre-existing containers to our cache

0 commit comments

Comments
 (0)