Skip to content

Commit 3fa4d41

Browse files
committed
feat(ebpf): extend string data filtering for LSM events
- Only for LSM related events.
1 parent 74cd85e commit 3fa4d41

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

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

@@ -2435,6 +2453,9 @@ int BPF_KPROBE(trace_security_sb_mount)
24352453
save_str_to_buf(&p.event->args_buf, (void *) type, 2);
24362454
save_to_submit_buf(&p.event->args_buf, &flags, sizeof(unsigned long), 3);
24372455

2456+
if (!evaluate_data_filters(&p, 1))
2457+
return 0;
2458+
24382459
return events_perf_submit(&p, 0);
24392460
}
24402461

@@ -2469,6 +2490,9 @@ int BPF_KPROBE(trace_security_inode_unlink)
24692490
save_to_submit_buf(&p.event->args_buf, &unlinked_file_id.device, sizeof(dev_t), 2);
24702491
save_to_submit_buf(&p.event->args_buf, &unlinked_file_id.ctime, sizeof(u64), 3);
24712492

2493+
if (!evaluate_data_filters(&p, 0))
2494+
return 0;
2495+
24722496
return events_perf_submit(&p, 0);
24732497
}
24742498

@@ -2668,6 +2692,9 @@ int BPF_KPROBE(trace_security_inode_symlink)
26682692
save_str_to_buf(&p.event->args_buf, dentry_path, 0);
26692693
save_str_to_buf(&p.event->args_buf, (void *) old_name, 1);
26702694

2695+
if (!evaluate_data_filters(&p, 0))
2696+
return 0;
2697+
26712698
return events_perf_submit(&p, 0);
26722699
}
26732700

@@ -3694,6 +3721,9 @@ int BPF_KPROBE(trace_ret_do_mmap)
36943721
save_to_submit_buf(&p.event->args_buf, &prot, sizeof(unsigned long), 8);
36953722
save_to_submit_buf(&p.event->args_buf, &mmap_flags, sizeof(unsigned long), 9);
36963723

3724+
if (!evaluate_data_filters(&p, 1))
3725+
return 0;
3726+
36973727
return events_perf_submit(&p, 0);
36983728
}
36993729

@@ -3727,6 +3757,9 @@ int BPF_KPROBE(trace_security_mmap_file)
37273757
save_to_submit_buf(&p.event->args_buf, &inode_nr, sizeof(unsigned long), 3);
37283758
save_to_submit_buf(&p.event->args_buf, &ctime, sizeof(u64), 4);
37293759

3760+
if (!evaluate_data_filters(&p, 0))
3761+
return 0;
3762+
37303763
events_perf_submit(&p, 0);
37313764
}
37323765

@@ -3795,6 +3828,9 @@ int BPF_KPROBE(trace_security_file_mprotect)
37953828
save_to_submit_buf(&p.event->args_buf, &pkey, sizeof(int), 6);
37963829
}
37973830

3831+
if (!evaluate_data_filters(&p, 0))
3832+
return 0;
3833+
37983834
events_perf_submit(&p, 0);
37993835
}
38003836

@@ -4037,6 +4073,9 @@ int BPF_KPROBE(trace_security_bpf_map)
40374073
// 2nd argument == map_name (const char *)
40384074
save_str_to_buf(&p.event->args_buf, (void *) __builtin_preserve_access_index(&map->name), 1);
40394075

4076+
if (!evaluate_data_filters(&p, 1))
4077+
return 0;
4078+
40404079
return events_perf_submit(&p, 0);
40414080
}
40424081

@@ -4092,6 +4131,9 @@ int BPF_KPROBE(trace_security_bpf_prog)
40924131
save_to_submit_buf(&p.event->args_buf, &prog_id, sizeof(u32), 3);
40934132
save_to_submit_buf(&p.event->args_buf, &is_load, sizeof(bool), 4);
40944133

4134+
if (!evaluate_data_filters(&p, 1))
4135+
return 0;
4136+
40954137
events_perf_submit(&p, 0);
40964138

40974139
return 0;
@@ -4233,6 +4275,9 @@ int BPF_KPROBE(trace_security_kernel_read_file)
42334275
save_to_submit_buf(&p.event->args_buf, &type_id, sizeof(int), 3);
42344276
save_to_submit_buf(&p.event->args_buf, &ctime, sizeof(u64), 4);
42354277

4278+
if (!evaluate_data_filters(&p, 0))
4279+
return 0;
4280+
42364281
return events_perf_submit(&p, 0);
42374282
}
42384283

@@ -4257,6 +4302,10 @@ int BPF_KPROBE(trace_security_kernel_post_read_file)
42574302
save_str_to_buf(&p.event->args_buf, file_path, 0);
42584303
save_to_submit_buf(&p.event->args_buf, &size, sizeof(loff_t), 1);
42594304
save_to_submit_buf(&p.event->args_buf, &type_id, sizeof(int), 2);
4305+
4306+
if (!evaluate_data_filters(&p, 0))
4307+
return 0;
4308+
42604309
events_perf_submit(&p, 0);
42614310
}
42624311

@@ -4305,6 +4354,9 @@ int BPF_KPROBE(trace_security_inode_mknod)
43054354
save_to_submit_buf(&p.event->args_buf, &mode, sizeof(unsigned short), 1);
43064355
save_to_submit_buf(&p.event->args_buf, &dev, sizeof(dev_t), 2);
43074356

4357+
if (!evaluate_data_filters(&p, 0))
4358+
return 0;
4359+
43084360
return events_perf_submit(&p, 0);
43094361
}
43104362

@@ -4547,6 +4599,9 @@ int tracepoint__module__module_load(struct bpf_raw_tracepoint_args *ctx)
45474599
save_str_to_buf(&p.event->args_buf, (void *) version, 1);
45484600
save_str_to_buf(&p.event->args_buf, (void *) srcversion, 2);
45494601

4602+
if (!evaluate_data_filters(&p, 3))
4603+
return 0;
4604+
45504605
return events_perf_submit(&p, 0);
45514606
}
45524607

@@ -4655,6 +4710,10 @@ int BPF_KPROBE(trace_load_elf_phdrs)
46554710
save_str_to_buf(&p.event->args_buf, (void *) elf_pathname, 0);
46564711
save_to_submit_buf(&p.event->args_buf, &proc_info->interpreter.id.device, sizeof(dev_t), 1);
46574712
save_to_submit_buf(&p.event->args_buf, &proc_info->interpreter.id.inode, sizeof(unsigned long), 2);
4713+
4714+
if (!evaluate_data_filters(&p, 0))
4715+
return 0;
4716+
46584717
events_perf_submit(&p, 0);
46594718

46604719
return 0;
@@ -4762,6 +4821,9 @@ int BPF_KPROBE(trace_security_inode_rename)
47624821
void *new_dentry_path = get_dentry_path_str(new_dentry);
47634822
save_str_to_buf(&p.event->args_buf, new_dentry_path, 1);
47644823

4824+
if (!evaluate_data_filters(&p, 0))
4825+
return 0;
4826+
47654827
return events_perf_submit(&p, 0);
47664828
}
47674829

@@ -4900,6 +4962,9 @@ statfunc int common_utimes(struct pt_regs *ctx)
49004962
save_to_submit_buf(&p.event->args_buf, &atime, sizeof(u64), 3);
49014963
save_to_submit_buf(&p.event->args_buf, &mtime, sizeof(u64), 4);
49024964

4965+
if (!evaluate_data_filters(&p, 0))
4966+
return 0;
4967+
49034968
return events_perf_submit(&p, 0);
49044969
}
49054970

@@ -4937,6 +5002,9 @@ int BPF_KPROBE(trace_do_truncate)
49375002
save_to_submit_buf(&p.event->args_buf, &dev, sizeof(dev_t), 2);
49385003
save_to_submit_buf(&p.event->args_buf, &length, sizeof(u64), 3);
49395004

5005+
if (!evaluate_data_filters(&p, 0))
5006+
return 0;
5007+
49405008
return events_perf_submit(&p, 0);
49415009
}
49425010

@@ -5127,6 +5195,9 @@ int BPF_KPROBE(trace_ret_inotify_find_inode)
51275195
save_to_submit_buf(&p.event->args_buf, &inode_nr, sizeof(unsigned long), 1);
51285196
save_to_submit_buf(&p.event->args_buf, &dev, sizeof(dev_t), 2);
51295197

5198+
if (!evaluate_data_filters(&p, 0))
5199+
return 0;
5200+
51305201
return events_perf_submit(&p, 0);
51315202
}
51325203

@@ -5281,6 +5352,9 @@ int BPF_KPROBE(trace_security_path_notify)
52815352
save_to_submit_buf(&p.event->args_buf, &mask, sizeof(u64), 3);
52825353
save_to_submit_buf(&p.event->args_buf, &obj_type, sizeof(unsigned int), 4);
52835354

5355+
if (!evaluate_data_filters(&p, 0))
5356+
return 0;
5357+
52845358
return events_perf_submit(&p, 0);
52855359
}
52865360

@@ -5384,6 +5458,9 @@ int BPF_KPROBE(trace_chmod_common)
53845458
save_str_to_buf(&p.event->args_buf, file_path, 0);
53855459
save_to_submit_buf(&p.event->args_buf, &mode, sizeof(umode_t), 1);
53865460

5461+
if (!evaluate_data_filters(&p, 0))
5462+
return 0;
5463+
53875464
return events_perf_submit(&p, 0);
53885465
}
53895466

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)