diff --git a/net/core/filter.c b/net/core/filter.c index da391e2b0788..790923ebaa7f 100644 --- a/net/core/filter.c +++ b/net/core/filter.c @@ -85,6 +85,7 @@ #include #include #include +#include "../../kernel/bpf/disasm.h" #include "dev.h" @@ -1265,6 +1266,26 @@ bool sk_filter_charge(struct sock *sk, struct sk_filter *fp) return true; } +static void printk_wrapper(void *_, const char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vprintk(fmt, args); + va_end(args); +} + +static void show_prog(struct bpf_prog *fp) +{ + struct bpf_insn_cbs cbs = { + .cb_print = printk_wrapper + }; + int i, len = fp->len; + + for (i = 0; i < len; i++) + print_bpf_insn(&cbs, &fp->insnsi[i], true); +} + static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp) { struct sock_filter *old_prog; @@ -1325,6 +1346,8 @@ static struct bpf_prog *bpf_migrate_filter(struct bpf_prog *fp) if (err) goto out_err_free; + show_prog(fp); + kfree(old_prog); return fp;