示例#1
0
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;
}
示例#2
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;
}
示例#3
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;
}