diff options
Diffstat (limited to 'arch/powerpc/net/bpf_jit_comp.c')
| -rw-r--r-- | arch/powerpc/net/bpf_jit_comp.c | 10 | 
1 files changed, 7 insertions, 3 deletions
| diff --git a/arch/powerpc/net/bpf_jit_comp.c b/arch/powerpc/net/bpf_jit_comp.c index 6dcdadefd8d0..82e82cadcde5 100644 --- a/arch/powerpc/net/bpf_jit_comp.c +++ b/arch/powerpc/net/bpf_jit_comp.c @@ -390,12 +390,16 @@ static int bpf_jit_build_body(struct sk_filter *fp, u32 *image,  		case BPF_ANC | SKF_AD_VLAN_TAG:  		case BPF_ANC | SKF_AD_VLAN_TAG_PRESENT:  			BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, vlan_tci) != 2); +			BUILD_BUG_ON(VLAN_TAG_PRESENT != 0x1000); +  			PPC_LHZ_OFFS(r_A, r_skb, offsetof(struct sk_buff,  							  vlan_tci)); -			if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) -				PPC_ANDI(r_A, r_A, VLAN_VID_MASK); -			else +			if (code == (BPF_ANC | SKF_AD_VLAN_TAG)) { +				PPC_ANDI(r_A, r_A, ~VLAN_TAG_PRESENT); +			} else {  				PPC_ANDI(r_A, r_A, VLAN_TAG_PRESENT); +				PPC_SRWI(r_A, r_A, 12); +			}  			break;  		case BPF_ANC | SKF_AD_QUEUE:  			BUILD_BUG_ON(FIELD_SIZEOF(struct sk_buff, |