int bpf_prog1(struct pt_regs *ctx) { int sc_nr = (int)PT_REGS_PARM1(ctx); /* dispatch into next BPF program depending on syscall number */ bpf_tail_call(ctx, &progs, sc_nr); /* fall through -> unknown syscall */ if (sc_nr >= __NR_getuid && sc_nr <= __NR_getsid) { char fmt[] = "syscall=%d (one of get/set uid/pid/gid)\n"; bpf_trace_printk(fmt, sizeof(fmt), sc_nr); } return 0; }
int bpf_prog1(struct pt_regs *ctx) { struct seccomp_data sd; bpf_probe_read(&sd, sizeof(sd), (void *)PT_REGS_PARM1(ctx)); /* dispatch into next BPF program depending on syscall number */ bpf_tail_call(ctx, &progs, sd.nr); /* fall through -> unknown syscall */ if (sd.nr >= __NR_getuid && sd.nr <= __NR_getsid) { char fmt[] = "syscall=%d (one of get/set uid/pid/gid)\n"; bpf_trace_printk(fmt, sizeof(fmt), sd.nr); } return 0; }
static int main_prog (struct __sk_buff *skb) { int from = skb->cb[0]; int me = 0; if (from == 0) me = 1; else me = 2; char msg [] = "In module of container: %d\n"; bpf_trace_printk(msg, sizeof(msg), me); if (me == 2) { bpf_redirect(skb->ifindex, 1); } skb->cb[0] = me; bpf_tail_call(skb, &jmp_table, 0); return 0; }