aboutgitcodelistschat:MatrixIRC
path: root/cooker/filter.c
diff options
context:
space:
mode:
authorAlice Frosi <afrosi@redhat.com>2023-04-06 14:58:43 +0200
committerAlice Frosi <afrosi@redhat.com>2023-04-06 14:58:43 +0200
commitbe8d1f5f3aac134218ccbeec49108844293796bc (patch)
treec15ede4ae3ec5eb1911ebe6dcfdb9bc1b18e751f /cooker/filter.c
parent89428f6c6ab2c1cea735258b4257f15f71648d0f (diff)
downloadseitan-be8d1f5f3aac134218ccbeec49108844293796bc.tar
seitan-be8d1f5f3aac134218ccbeec49108844293796bc.tar.gz
seitan-be8d1f5f3aac134218ccbeec49108844293796bc.tar.bz2
seitan-be8d1f5f3aac134218ccbeec49108844293796bc.tar.lz
seitan-be8d1f5f3aac134218ccbeec49108844293796bc.tar.xz
seitan-be8d1f5f3aac134218ccbeec49108844293796bc.tar.zst
seitan-be8d1f5f3aac134218ccbeec49108844293796bc.zip
filter: define arg_cmp and arg_type
Diffstat (limited to 'cooker/filter.c')
-rw-r--r--cooker/filter.c21
1 files changed, 10 insertions, 11 deletions
diff --git a/cooker/filter.c b/cooker/filter.c
index 29c2d64..9a2c9f1 100644
--- a/cooker/filter.c
+++ b/cooker/filter.c
@@ -158,7 +158,7 @@ static unsigned get_n_args_syscall_entry(const struct bpf_call *entry)
unsigned i, n = 0;
for (i = 0; i < 6; i++)
- if (entry->args[i].type != NO_CHECK)
+ if (entry->args[i].cmp != NO_CHECK)
n++;
return n;
}
@@ -183,6 +183,8 @@ static unsigned int get_n_args_syscall_instr(const struct syscall_entry *table)
entry = table->entry + i;
n = 0;
for (unsigned int k = 0; k < 6; k++) {
+ if (entry->args[k].cmp == NO_CHECK)
+ continue;
switch (entry->args[k].type) {
case U32:
/* For 32 bit arguments: 2 instructions,
@@ -197,8 +199,6 @@ static unsigned int get_n_args_syscall_instr(const struct syscall_entry *table)
*/
n += 4;
break;
- case NO_CHECK:
- break;
}
}
total_instr += n;
@@ -229,12 +229,11 @@ static unsigned int get_total_args_instr(const struct syscall_entry table[],
}
static bool check_args_syscall_entry(const struct bpf_call *entry){
- return entry->args[0].type != NO_CHECK ||
- entry->args[1].type != NO_CHECK ||
- entry->args[2].type != NO_CHECK ||
- entry->args[3].type != NO_CHECK ||
- entry->args[4].type != NO_CHECK ||
- entry->args[5].type != NO_CHECK;
+ return entry->args[0].cmp != NO_CHECK ||
+ entry->args[1].cmp != NO_CHECK ||
+ entry->args[2].cmp != NO_CHECK ||
+ entry->args[3].cmp != NO_CHECK ||
+ entry->args[4].cmp != NO_CHECK || entry->args[5].cmp != NO_CHECK;
}
static bool check_args_syscall(const struct syscall_entry *table)
@@ -352,10 +351,10 @@ unsigned int create_bfp_program(struct syscall_entry table[],
entry = table[i].entry + j;
next_args_off = get_n_args_syscall_entry(entry);
for (k = 0; k < 6; k++) {
+ if (entry->args[k].cmp == NO_CHECK)
+ continue;
offset = next_args_off - n_checks;
switch (entry->args[k].type) {
- case NO_CHECK:
- break;
case U64:
size += eq_u64_filter(
&filter[size], k,