-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Adds flag to exec events indicating a memfd target #161
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -17,6 +17,9 @@ | |
#include "PathResolver.h" | ||
#include "Varlen.h" | ||
|
||
#define S_ISUID 0004000 | ||
#define S_ISGID 0002000 | ||
|
||
// Limits on large things we send up as variable length parameters. | ||
// | ||
// These should be kept _well_ under half the size of the event_buffer_map or | ||
|
@@ -115,6 +118,15 @@ int BPF_PROG(sched_process_exec, | |
size = read_kernel_str_or_empty_str(field->data, PATH_MAX, binprm->filename); | ||
ebpf_vl_field__set_size(&event->vl_fields, field, size); | ||
|
||
// memfd exec | ||
char buf [7]; | ||
bpf_probe_read_kernel_str(buf, 7, binprm->file->f_path.dentry->d_iname); | ||
if (buf[0] == 'm' && buf[1] == 'e' && buf[2] == 'm' && buf[3] == 'f' && buf[4] == 'd' && buf[5] == ':' ) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. For readability, I'd recommend just writing a 4 line implementation of |
||
event->is_memfd = 1; | ||
|
||
event->is_setuid = (binprm->file->f_inode->i_mode & S_ISUID) ? true : false; | ||
event->is_setgid = (binprm->file->f_inode->i_mode & S_ISGID) ? true : false; | ||
|
||
bpf_ringbuf_output(&ringbuf, event, EVENT_SIZE(event), 0); | ||
|
||
out: | ||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -174,6 +174,16 @@ static void out_newline() | |
printf("\n"); | ||
} | ||
|
||
static void out_bool_flag(const char *name, bool value) | ||
{ | ||
printf("\"%s\":%s", name, value ? "true" : "false"); | ||
} | ||
|
||
static void out_named_object_start(const char *name) | ||
{ | ||
printf("\"%s\":{", name); | ||
} | ||
|
||
static void out_object_start() | ||
{ | ||
printf("{"); | ||
|
@@ -446,6 +456,15 @@ static void out_process_exec(struct ebpf_process_exec_event *evt) | |
out_cred_info("creds", &evt->creds); | ||
out_comma(); | ||
|
||
out_named_object_start("red_flags"); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. IMO the nesting here is unnecessary, I say just keep them at the top level. |
||
out_bool_flag("is_memfd", evt->is_memfd); | ||
out_comma(); | ||
out_bool_flag("is_setuid", evt->is_setuid); | ||
out_comma(); | ||
out_bool_flag("is_setgid", evt->is_setgid); | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. IMO |
||
out_object_end(); | ||
out_comma(); | ||
|
||
out_tty_dev("ctty", &evt->ctty); | ||
|
||
struct ebpf_varlen_field *field; | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nit: needs code format, CI won't pass without it.