aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/net/bpf_jit_32.c5
-rw-r--r--arch/powerpc/net/bpf_jit_comp.c12
-rw-r--r--arch/sparc/net/bpf_jit_comp.c6
-rw-r--r--arch/x86/net/bpf_jit_comp.c9
-rw-r--r--include/linux/filter.h10
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;
926out: 925out:
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 }
741out: 736out:
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
51extern void bpf_jit_compile(struct sk_filter *fp); 51extern void bpf_jit_compile(struct sk_filter *fp);
52extern void bpf_jit_free(struct sk_filter *fp); 52extern void bpf_jit_free(struct sk_filter *fp);
53
54static 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
55static inline void bpf_jit_compile(struct sk_filter *fp) 65static inline void bpf_jit_compile(struct sk_filter *fp)