Skip to content

Commit 57b4fbf

Browse files
committed
feat(ebpf): extend string data filtering for LSM events
- Only for LSM related events.
1 parent b64e84d commit 57b4fbf

File tree

3 files changed

+79
-1
lines changed

3 files changed

+79
-1
lines changed

pkg/ebpf/c/common/context.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ statfunc bool reset_event(event_data_t *event, u32 event_id)
259259
event->config.field_types = event_config->field_types;
260260
event->config.submit_for_policies = event_config->submit_for_policies;
261261
event->context.matched_policies = event_config->submit_for_policies;
262+
event->config.data_filter = event_config->data_filter;
262263

263264
return true;
264265
}

pkg/ebpf/c/tracee.bpf.c

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,9 @@ int syscall__execve_enter(void *ctx)
387387
&p.event->args_buf, (const char *const *) sys->args.args[2] /*envp*/, 2);
388388
}
389389

390+
if (!evaluate_data_filters(&p, 0))
391+
return 0;
392+
390393
return events_perf_submit(&p, 0);
391394
}
392395

@@ -417,6 +420,9 @@ int syscall__execve_exit(void *ctx)
417420
&p.event->args_buf, (const char *const *) sys->args.args[2] /*envp*/, 2);
418421
}
419422

423+
if (!evaluate_data_filters(&p, 0))
424+
return 0;
425+
420426
return events_perf_submit(&p, sys->ret);
421427
}
422428

@@ -447,6 +453,9 @@ int syscall__execveat_enter(void *ctx)
447453
}
448454
save_to_submit_buf(&p.event->args_buf, (void *) &sys->args.args[4] /*flags*/, sizeof(int), 4);
449455

456+
if (!evaluate_data_filters(&p, 1))
457+
return 0;
458+
450459
return events_perf_submit(&p, 0);
451460
}
452461

@@ -479,6 +488,9 @@ int syscall__execveat_exit(void *ctx)
479488
}
480489
save_to_submit_buf(&p.event->args_buf, (void *) &sys->args.args[4] /*flags*/, sizeof(int), 4);
481490

491+
if (!evaluate_data_filters(&p, 1))
492+
return 0;
493+
482494
return events_perf_submit(&p, sys->ret);
483495
}
484496

@@ -1711,6 +1723,9 @@ int BPF_KPROBE(trace_call_usermodehelper)
17111723
save_str_arr_to_buf(&p.event->args_buf, (const char *const *) envp, 2);
17121724
save_to_submit_buf(&p.event->args_buf, (void *) &wait, sizeof(int), 3);
17131725

1726+
if (!evaluate_data_filters(&p, 0))
1727+
return 0;
1728+
17141729
return events_perf_submit(&p, 0);
17151730
}
17161731

@@ -2269,6 +2284,9 @@ int BPF_KPROBE(trace_security_bprm_check)
22692284
if (p.config->options & OPT_EXEC_ENV)
22702285
save_str_arr_to_buf(&p.event->args_buf, envp, 4);
22712286

2287+
if (!evaluate_data_filters(&p, 0))
2288+
return 0;
2289+
22722290
return events_perf_submit(&p, 0);
22732291
}
22742292

@@ -2344,6 +2362,9 @@ int BPF_KPROBE(trace_security_sb_mount)
23442362
save_str_to_buf(&p.event->args_buf, (void *) type, 2);
23452363
save_to_submit_buf(&p.event->args_buf, &flags, sizeof(unsigned long), 3);
23462364

2365+
if (!evaluate_data_filters(&p, 1))
2366+
return 0;
2367+
23472368
return events_perf_submit(&p, 0);
23482369
}
23492370

@@ -2378,6 +2399,9 @@ int BPF_KPROBE(trace_security_inode_unlink)
23782399
save_to_submit_buf(&p.event->args_buf, &unlinked_file_id.device, sizeof(dev_t), 2);
23792400
save_to_submit_buf(&p.event->args_buf, &unlinked_file_id.ctime, sizeof(u64), 3);
23802401

2402+
if (!evaluate_data_filters(&p, 0))
2403+
return 0;
2404+
23812405
return events_perf_submit(&p, 0);
23822406
}
23832407

@@ -2577,6 +2601,9 @@ int BPF_KPROBE(trace_security_inode_symlink)
25772601
save_str_to_buf(&p.event->args_buf, dentry_path, 0);
25782602
save_str_to_buf(&p.event->args_buf, (void *) old_name, 1);
25792603

2604+
if (!evaluate_data_filters(&p, 0))
2605+
return 0;
2606+
25802607
return events_perf_submit(&p, 0);
25812608
}
25822609

@@ -3603,6 +3630,9 @@ int BPF_KPROBE(trace_ret_do_mmap)
36033630
save_to_submit_buf(&p.event->args_buf, &prot, sizeof(unsigned long), 8);
36043631
save_to_submit_buf(&p.event->args_buf, &mmap_flags, sizeof(unsigned long), 9);
36053632

3633+
if (!evaluate_data_filters(&p, 1))
3634+
return 0;
3635+
36063636
return events_perf_submit(&p, 0);
36073637
}
36083638

@@ -3636,6 +3666,9 @@ int BPF_KPROBE(trace_security_mmap_file)
36363666
save_to_submit_buf(&p.event->args_buf, &inode_nr, sizeof(unsigned long), 3);
36373667
save_to_submit_buf(&p.event->args_buf, &ctime, sizeof(u64), 4);
36383668

3669+
if (!evaluate_data_filters(&p, 0))
3670+
return 0;
3671+
36393672
events_perf_submit(&p, 0);
36403673
}
36413674

@@ -3704,6 +3737,9 @@ int BPF_KPROBE(trace_security_file_mprotect)
37043737
save_to_submit_buf(&p.event->args_buf, &pkey, sizeof(int), 6);
37053738
}
37063739

3740+
if (!evaluate_data_filters(&p, 0))
3741+
return 0;
3742+
37073743
events_perf_submit(&p, 0);
37083744
}
37093745

@@ -3946,6 +3982,9 @@ int BPF_KPROBE(trace_security_bpf_map)
39463982
// 2nd argument == map_name (const char *)
39473983
save_str_to_buf(&p.event->args_buf, (void *) __builtin_preserve_access_index(&map->name), 1);
39483984

3985+
if (!evaluate_data_filters(&p, 1))
3986+
return 0;
3987+
39493988
return events_perf_submit(&p, 0);
39503989
}
39513990

@@ -4001,6 +4040,9 @@ int BPF_KPROBE(trace_security_bpf_prog)
40014040
save_to_submit_buf(&p.event->args_buf, &prog_id, sizeof(u32), 3);
40024041
save_to_submit_buf(&p.event->args_buf, &is_load, sizeof(bool), 4);
40034042

4043+
if (!evaluate_data_filters(&p, 1))
4044+
return 0;
4045+
40044046
events_perf_submit(&p, 0);
40054047

40064048
return 0;
@@ -4142,6 +4184,9 @@ int BPF_KPROBE(trace_security_kernel_read_file)
41424184
save_to_submit_buf(&p.event->args_buf, &type_id, sizeof(int), 3);
41434185
save_to_submit_buf(&p.event->args_buf, &ctime, sizeof(u64), 4);
41444186

4187+
if (!evaluate_data_filters(&p, 0))
4188+
return 0;
4189+
41454190
return events_perf_submit(&p, 0);
41464191
}
41474192

@@ -4166,6 +4211,10 @@ int BPF_KPROBE(trace_security_kernel_post_read_file)
41664211
save_str_to_buf(&p.event->args_buf, file_path, 0);
41674212
save_to_submit_buf(&p.event->args_buf, &size, sizeof(loff_t), 1);
41684213
save_to_submit_buf(&p.event->args_buf, &type_id, sizeof(int), 2);
4214+
4215+
if (!evaluate_data_filters(&p, 0))
4216+
return 0;
4217+
41694218
events_perf_submit(&p, 0);
41704219
}
41714220

@@ -4214,6 +4263,9 @@ int BPF_KPROBE(trace_security_inode_mknod)
42144263
save_to_submit_buf(&p.event->args_buf, &mode, sizeof(unsigned short), 1);
42154264
save_to_submit_buf(&p.event->args_buf, &dev, sizeof(dev_t), 2);
42164265

4266+
if (!evaluate_data_filters(&p, 0))
4267+
return 0;
4268+
42174269
return events_perf_submit(&p, 0);
42184270
}
42194271

@@ -4456,6 +4508,9 @@ int tracepoint__module__module_load(struct bpf_raw_tracepoint_args *ctx)
44564508
save_str_to_buf(&p.event->args_buf, (void *) version, 1);
44574509
save_str_to_buf(&p.event->args_buf, (void *) srcversion, 2);
44584510

4511+
if (!evaluate_data_filters(&p, 3))
4512+
return 0;
4513+
44594514
return events_perf_submit(&p, 0);
44604515
}
44614516

@@ -4564,6 +4619,10 @@ int BPF_KPROBE(trace_load_elf_phdrs)
45644619
save_str_to_buf(&p.event->args_buf, (void *) elf_pathname, 0);
45654620
save_to_submit_buf(&p.event->args_buf, &proc_info->interpreter.id.device, sizeof(dev_t), 1);
45664621
save_to_submit_buf(&p.event->args_buf, &proc_info->interpreter.id.inode, sizeof(unsigned long), 2);
4622+
4623+
if (!evaluate_data_filters(&p, 0))
4624+
return 0;
4625+
45674626
events_perf_submit(&p, 0);
45684627

45694628
return 0;
@@ -4671,6 +4730,9 @@ int BPF_KPROBE(trace_security_inode_rename)
46714730
void *new_dentry_path = get_dentry_path_str(new_dentry);
46724731
save_str_to_buf(&p.event->args_buf, new_dentry_path, 1);
46734732

4733+
if (!evaluate_data_filters(&p, 0))
4734+
return 0;
4735+
46744736
return events_perf_submit(&p, 0);
46754737
}
46764738

@@ -4809,6 +4871,9 @@ statfunc int common_utimes(struct pt_regs *ctx)
48094871
save_to_submit_buf(&p.event->args_buf, &atime, sizeof(u64), 3);
48104872
save_to_submit_buf(&p.event->args_buf, &mtime, sizeof(u64), 4);
48114873

4874+
if (!evaluate_data_filters(&p, 0))
4875+
return 0;
4876+
48124877
return events_perf_submit(&p, 0);
48134878
}
48144879

@@ -4846,6 +4911,9 @@ int BPF_KPROBE(trace_do_truncate)
48464911
save_to_submit_buf(&p.event->args_buf, &dev, sizeof(dev_t), 2);
48474912
save_to_submit_buf(&p.event->args_buf, &length, sizeof(u64), 3);
48484913

4914+
if (!evaluate_data_filters(&p, 0))
4915+
return 0;
4916+
48494917
return events_perf_submit(&p, 0);
48504918
}
48514919

@@ -5036,6 +5104,9 @@ int BPF_KPROBE(trace_ret_inotify_find_inode)
50365104
save_to_submit_buf(&p.event->args_buf, &inode_nr, sizeof(unsigned long), 1);
50375105
save_to_submit_buf(&p.event->args_buf, &dev, sizeof(dev_t), 2);
50385106

5107+
if (!evaluate_data_filters(&p, 0))
5108+
return 0;
5109+
50395110
return events_perf_submit(&p, 0);
50405111
}
50415112

@@ -5190,6 +5261,9 @@ int BPF_KPROBE(trace_security_path_notify)
51905261
save_to_submit_buf(&p.event->args_buf, &mask, sizeof(u64), 3);
51915262
save_to_submit_buf(&p.event->args_buf, &obj_type, sizeof(unsigned int), 4);
51925263

5264+
if (!evaluate_data_filters(&p, 0))
5265+
return 0;
5266+
51935267
return events_perf_submit(&p, 0);
51945268
}
51955269

@@ -5293,6 +5367,9 @@ int BPF_KPROBE(trace_chmod_common)
52935367
save_str_to_buf(&p.event->args_buf, file_path, 0);
52945368
save_to_submit_buf(&p.event->args_buf, &mode, sizeof(umode_t), 1);
52955369

5370+
if (!evaluate_data_filters(&p, 0))
5371+
return 0;
5372+
52965373
return events_perf_submit(&p, 0);
52975374
}
52985375

pkg/filters/data.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func NewDataFilter() *DataFilter {
7272
}
7373
}
7474

75-
// list of events and field names allowed to have in-kernel filter
75+
// list of events and field names (and index) allowed to have in-kernel filter
7676
var allowedKernelField = map[events.ID]string{
7777
// LSM hooks
7878
events.SecurityBprmCheck: "pathname", // 0

0 commit comments

Comments
 (0)