diff options
-rw-r--r-- | arch/arm/net/bpf_jit_32.c | 5 | ||||
-rw-r--r-- | arch/powerpc/net/bpf_jit_comp.c | 12 | ||||
-rw-r--r-- | arch/sparc/net/bpf_jit_comp.c | 6 | ||||
-rw-r--r-- | arch/x86/net/bpf_jit_comp.c | 9 | ||||
-rw-r--r-- | include/linux/filter.h | 10 |
5 files changed, 19 insertions, 23 deletions
diff --git a/arch/arm/net/bpf_jit_32.c b/arch/arm/net/bpf_jit_32.c index a0bd8a755bdf..1a643ee8e082 100644 --- a/arch/arm/net/bpf_jit_32.c +++ b/arch/arm/net/bpf_jit_32.c | |||
@@ -918,9 +918,8 @@ void bpf_jit_compile(struct sk_filter *fp) | |||
918 | #endif | 918 | #endif |
919 | 919 | ||
920 | if (bpf_jit_enable > 1) | 920 | if (bpf_jit_enable > 1) |
921 | print_hex_dump(KERN_INFO, "BPF JIT code: ", | 921 | /* there are 2 passes here */ |
922 | DUMP_PREFIX_ADDRESS, 16, 4, ctx.target, | 922 | bpf_jit_dump(fp->len, alloc_size, 2, ctx.target); |
923 | alloc_size, false); | ||
924 | 923 | ||
925 | fp->bpf_func = (void *)ctx.target; | 924 | fp->bpf_func = (void *)ctx.target; |
926 | out: | 925 | out: |
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c index e834f1ec23c8..c427ae36374a 100644 --- a/arch/powerpc/net/bpf_jit_comp.c +++ b/arch/powerpc/net/bpf_jit_comp.c | |||
@@ -671,16 +671,12 @@ void bpf_jit_compile(struct sk_filter *fp) | |||
671 | } | 671 | } |
672 | 672 | ||
673 | if (bpf_jit_enable > 1) | 673 | if (bpf_jit_enable > 1) |
674 | pr_info("flen=%d proglen=%u pass=%d image=%p\n", | 674 | /* Note that we output the base address of the code_base |
675 | flen, proglen, pass, image); | 675 | * rather than image, since opcodes are in code_base. |
676 | */ | ||
677 | bpf_jit_dump(flen, proglen, pass, code_base); | ||
676 | 678 | ||
677 | if (image) { | 679 | if (image) { |
678 | if (bpf_jit_enable > 1) | ||
679 | print_hex_dump(KERN_ERR, "JIT code: ", | ||
680 | DUMP_PREFIX_ADDRESS, | ||
681 | 16, 1, code_base, | ||
682 | proglen, false); | ||
683 | |||
684 | bpf_flush_icache(code_base, code_base + (proglen/4)); | 680 | bpf_flush_icache(code_base, code_base + (proglen/4)); |
685 | /* Function descriptor nastiness: Address + TOC */ | 681 | /* Function descriptor nastiness: Address + TOC */ |
686 | ((u64 *)image)[0] = (u64)code_base; | 682 | ((u64 *)image)[0] = (u64)code_base; |
diff --git a/arch/sparc/net/bpf_jit_comp.c b/arch/sparc/net/bpf_jit_comp.c index 3109ca684a99..d36a85ebb5e0 100644 --- a/arch/sparc/net/bpf_jit_comp.c +++ b/arch/sparc/net/bpf_jit_comp.c | |||
@@ -795,13 +795,9 @@ cond_branch: f_offset = addrs[i + filter[i].jf]; | |||
795 | } | 795 | } |
796 | 796 | ||
797 | if (bpf_jit_enable > 1) | 797 | if (bpf_jit_enable > 1) |
798 | pr_err("flen=%d proglen=%u pass=%d image=%p\n", | 798 | bpf_jit_dump(flen, proglen, pass, image); |
799 | flen, proglen, pass, image); | ||
800 | 799 | ||
801 | if (image) { | 800 | if (image) { |
802 | if (bpf_jit_enable > 1) | ||
803 | print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_ADDRESS, | ||
804 | 16, 1, image, proglen, false); | ||
805 | bpf_flush_icache(image, image + proglen); | 801 | bpf_flush_icache(image, image + proglen); |
806 | fp->bpf_func = (void *)image; | 802 | fp->bpf_func = (void *)image; |
807 | } | 803 | } |
diff --git a/arch/x86/net/bpf_jit_comp.c b/arch/x86/net/bpf_jit_comp.c index 3cbe45381bbb..f66b54086ce5 100644 --- a/arch/x86/net/bpf_jit_comp.c +++ b/arch/x86/net/bpf_jit_comp.c | |||
@@ -725,17 +725,12 @@ cond_branch: f_offset = addrs[i + filter[i].jf] - addrs[i]; | |||
725 | } | 725 | } |
726 | oldproglen = proglen; | 726 | oldproglen = proglen; |
727 | } | 727 | } |
728 | |||
728 | if (bpf_jit_enable > 1) | 729 | if (bpf_jit_enable > 1) |
729 | pr_err("flen=%d proglen=%u pass=%d image=%p\n", | 730 | bpf_jit_dump(flen, proglen, pass, image); |
730 | flen, proglen, pass, image); | ||
731 | 731 | ||
732 | if (image) { | 732 | if (image) { |
733 | if (bpf_jit_enable > 1) | ||
734 | print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_ADDRESS, | ||
735 | 16, 1, image, proglen, false); | ||
736 | |||
737 | bpf_flush_icache(image, image + proglen); | 733 | bpf_flush_icache(image, image + proglen); |
738 | |||
739 | fp->bpf_func = (void *)image; | 734 | fp->bpf_func = (void *)image; |
740 | } | 735 | } |
741 | out: | 736 | out: |
diff --git a/include/linux/filter.h b/include/linux/filter.h index d2059cb4e465..d7d25083130b 100644 --- a/include/linux/filter.h +++ b/include/linux/filter.h | |||
@@ -50,6 +50,16 @@ extern int sk_get_filter(struct sock *sk, struct sock_filter __user *filter, uns | |||
50 | #ifdef CONFIG_BPF_JIT | 50 | #ifdef CONFIG_BPF_JIT |
51 | extern void bpf_jit_compile(struct sk_filter *fp); | 51 | extern void bpf_jit_compile(struct sk_filter *fp); |
52 | extern void bpf_jit_free(struct sk_filter *fp); | 52 | extern void bpf_jit_free(struct sk_filter *fp); |
53 | |||
54 | static inline void bpf_jit_dump(unsigned int flen, unsigned int proglen, | ||
55 | u32 pass, void *image) | ||
56 | { | ||
57 | pr_err("flen=%u proglen=%u pass=%u image=%p\n", | ||
58 | flen, proglen, pass, image); | ||
59 | if (image) | ||
60 | print_hex_dump(KERN_ERR, "JIT code: ", DUMP_PREFIX_ADDRESS, | ||
61 | 16, 1, image, proglen, false); | ||
62 | } | ||
53 | #define SK_RUN_FILTER(FILTER, SKB) (*FILTER->bpf_func)(SKB, FILTER->insns) | 63 | #define SK_RUN_FILTER(FILTER, SKB) (*FILTER->bpf_func)(SKB, FILTER->insns) |
54 | #else | 64 | #else |
55 | static inline void bpf_jit_compile(struct sk_filter *fp) | 65 | static inline void bpf_jit_compile(struct sk_filter *fp) |