• Alexei Starovoitov's avatar
    sparc: bpf_jit: fix support for ldx/stx mem and SKF_AD_VLAN_TAG · 6e2d91c6
    Alexei Starovoitov authored
    [ Upstream commit f6f2332d ]
    
    fix several issues in sparc BPF JIT compiler.
    
    ldx/stx related:
    . classic BPF instructions that access mem[] slots were not setting
      SEEN_MEM flag, so stack wasn't allocated. Fix that by advertising
      correct flags
    
    . LDX/STX instructions were missing SEEN_XREG, so register value
      could have leaked to user space. Fix it.
    
    . since stack for mem[] slots is allocated with 'sub %sp' instead
      of 'save %sp', use %sp as base register instead of %fp.
    
    . ldx mem[0] means first slot in classic BPF which should have
      -4 offset instead of 0.
    
    . sparc64 needs 2047 stack bias as per ABI to access stack
    
    . emit_stmem() was using LD32I macro instead of ST32I
    
    SKF_AD_VLAN_TAG* related:
    . SKF_AD_VLAN_TAG_PRESENT must return 1 or 0 instead of '> 0' or 0
      as per classic BPF de facto standard
    
    . SKF_AD_VLAN_TAG needs to mask the field correctly
    
    Fixes: 2809a208 ("net: filter: Just In Time compiler for sparc")
    Signed-off-by: default avatarAlexei Starovoitov <ast@plumgrid.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    6e2d91c6
bpf_jit_comp.c 20.9 KB