summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/flags/flags.go34
-rw-r--r--internal/ioriotng.go22
-rw-r--r--internal/types/types.go4
-rw-r--r--ioriotng.bpf.c2
-rw-r--r--maps.bpf.h1
5 files changed, 40 insertions, 23 deletions
diff --git a/internal/flags/flags.go b/internal/flags/flags.go
index 674f22f..1ba9d60 100644
--- a/internal/flags/flags.go
+++ b/internal/flags/flags.go
@@ -2,17 +2,22 @@ package flags
import (
"flag"
+ "fmt"
"unsafe"
bpf "github.com/aquasecurity/libbpfgo"
)
type Flags struct {
- UidFilter int
+ UidFilter int
+ FdEventMapSize int
+ OpenEventMapSize int
}
func New() (flags Flags) {
flag.IntVar(&flags.UidFilter, "uid", 0, "Filter for processes with UID")
+ flag.IntVar(&flags.FdEventMapSize, "fdMapSize", 4096, "BPF FD event map size")
+ flag.IntVar(&flags.OpenEventMapSize, "openMapSize", 1024, "BPF open event map size")
flag.Parse()
return flags
}
@@ -32,3 +37,30 @@ func (flags Flags) SetBPF(bpfModule *bpf.Module) error {
key := uint32(1)
return flagsMap.Update(unsafe.Pointer(&key), unsafe.Pointer(&flagsValues))
}
+
+func (flags Flags) ResizeBPFMaps(bpfModule *bpf.Module) error {
+ if err := resizeBPFMap(bpfModule, "open_event_map", uint32(flags.OpenEventMapSize)); err != nil {
+ return err
+ }
+ if err := resizeBPFMap(bpfModule, "fd_event_map", uint32(flags.FdEventMapSize)); err != nil {
+ return err
+ }
+ return nil
+}
+
+func resizeBPFMap(module *bpf.Module, name string, size uint32) error {
+ m, err := module.GetMap("open_event_map")
+ if err != nil {
+ return err
+ }
+
+ if err = m.SetMaxEntries(size); err != nil {
+ return err
+ }
+
+ if actual := m.MaxEntries(); actual != size {
+ return fmt.Errorf("map resize failed, expected %v, actual %v", size, actual)
+ }
+
+ return nil
+}
diff --git a/internal/ioriotng.go b/internal/ioriotng.go
index 890ac73..d840ea5 100644
--- a/internal/ioriotng.go
+++ b/internal/ioriotng.go
@@ -23,23 +23,6 @@ type BpfMapper interface {
String() string
}
-func resizeMap(module *bpf.Module, name string, size uint32) error {
- m, err := module.GetMap("open_event_map")
- if err != nil {
- return err
- }
-
- if err = m.SetMaxEntries(size); err != nil {
- return err
- }
-
- if actual := m.MaxEntries(); actual != size {
- return fmt.Errorf("map resize failed, expected %v, actual %v", size, actual)
- }
-
- return nil
-}
-
func Run(flags flags.Flags) {
// To consider for implementation!
log.Println(debugfs.TracepointsWithFd())
@@ -50,10 +33,7 @@ func Run(flags flags.Flags) {
}
defer bpfModule.Close()
- if err = resizeMap(bpfModule, "open_event_map", 8192); err != nil {
- log.Fatal(err)
- }
- if err = resizeMap(bpfModule, "fd_event_map", 8192); err != nil {
+ if err := flags.ResizeBPFMaps(bpfModule); err != nil {
log.Fatal(err)
}
diff --git a/internal/types/types.go b/internal/types/types.go
index c9e2101..6e8cd3b 100644
--- a/internal/types/types.go
+++ b/internal/types/types.go
@@ -5,6 +5,7 @@ import "fmt"
type OpenEvent struct {
FD int32
TID uint32
+ Time uint64
Filename [256]byte // TODO, use same value as in ioriot.bpf.h
Comm [16]byte
}
@@ -12,7 +13,8 @@ type OpenEvent struct {
func (e OpenEvent) String() string {
filename := e.Filename[:]
comm := e.Comm[:]
- return fmt.Sprintf("tid:%d fd:%d filename:%s, comm:%s", e.TID, e.FD, string(filename), string(comm))
+ return fmt.Sprintf("%v tid:%d fd:%d filename:%s, comm:%s",
+ e.Time, e.TID, e.FD, string(filename), string(comm))
}
type FdEvent struct {
diff --git a/ioriotng.bpf.c b/ioriotng.bpf.c
index ebb8458..9c01d9f 100644
--- a/ioriotng.bpf.c
+++ b/ioriotng.bpf.c
@@ -17,9 +17,11 @@ int handle_enter_open(struct trace_event_raw_sys_enter *ctx) {
return 0;
u32 tid = bpf_get_current_pid_tgid();
+ u64 time = bpf_ktime_get_ns();
struct open_event open_event = {};
open_event.tid = tid;
+ open_event.time = time;
bpf_probe_read_user_str(open_event.filename, sizeof(open_event.filename), (void *)ctx->args[0]);
bpf_get_current_comm(&open_event.comm, sizeof(open_event.comm));
diff --git a/maps.bpf.h b/maps.bpf.h
index d402428..c369037 100644
--- a/maps.bpf.h
+++ b/maps.bpf.h
@@ -18,6 +18,7 @@ struct {
struct open_event {
__s32 fd;
__u32 tid;
+ __u64 time;
char filename[MAX_FILENAME_LENGTH];
char comm[MAX_PROGNAME_LENGTH];
};