diff options
-rw-r--r-- | arch/powerpc/net/bpf_jit_comp.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c index d110e288d7ac..d3fa80d04e6b 100644 --- a/arch/powerpc/net/bpf_jit_comp.c +++ b/arch/powerpc/net/bpf_jit_comp.c | |||
@@ -361,6 +361,11 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, | |||
361 | protocol)); | 361 | protocol)); |
362 | break; | 362 | break; |
363 | case BPF_ANC | SKF_AD_IFINDEX: | 363 | case BPF_ANC | SKF_AD_IFINDEX: |
364 | case BPF_ANC | SKF_AD_HATYPE: | ||
365 | BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, | ||
366 | ifindex) != 4); | ||
367 | BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, | ||
368 | type) != 2); | ||
364 | PPC_LD_OFFS(r_scratch1, r_skb, offsetof(struct sk_buff, | 369 | PPC_LD_OFFS(r_scratch1, r_skb, offsetof(struct sk_buff, |
365 | dev)); | 370 | dev)); |
366 | PPC_CMPDI(r_scratch1, 0); | 371 | PPC_CMPDI(r_scratch1, 0); |
@@ -368,14 +373,18 @@ static int bpf_jit_build_body(struct bpf_prog *fp, u32 *image, | |||
368 | PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]); | 373 | PPC_BCC(COND_EQ, addrs[ctx->pc_ret0]); |
369 | } else { | 374 | } else { |
370 | /* Exit, returning 0; first pass hits here. */ | 375 | /* Exit, returning 0; first pass hits here. */ |
371 | PPC_BCC_SHORT(COND_NE, (ctx->idx*4)+12); | 376 | PPC_BCC_SHORT(COND_NE, ctx->idx * 4 + 12); |
372 | PPC_LI(r_ret, 0); | 377 | PPC_LI(r_ret, 0); |
373 | PPC_JMP(exit_addr); | 378 | PPC_JMP(exit_addr); |
374 | } | 379 | } |
375 | BUILD_BUG_ON(FIELD_SIZEOF(struct net_device, | 380 | if (code == (BPF_ANC | SKF_AD_IFINDEX)) { |
376 | ifindex) != 4); | 381 | PPC_LWZ_OFFS(r_A, r_scratch1, |
377 | PPC_LWZ_OFFS(r_A, r_scratch1, | ||
378 | offsetof(struct net_device, ifindex)); | 382 | offsetof(struct net_device, ifindex)); |
383 | } else { | ||
384 | PPC_LHZ_OFFS(r_A, r_scratch1, | ||
385 | offsetof(struct net_device, type)); | ||
386 | } | ||
387 | |||
379 | break; | 388 | break; |
380 | case BPF_ANC | SKF_AD_MARK: | 389 | case BPF_ANC | SKF_AD_MARK: |
381 | BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, mark) != 4); | 390 | BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, mark) != 4); |