On 03/15/2019 03:51 PM, Naveen N. Rao wrote: > Yauheni Kaliuta pointed out that PTR_TO_STACK store/load verifier test > was failing on powerpc64 BE, and rightfully indicated that the PPC_LD() > macro is not masking away the last two bits of the offset per the ISA, > resulting in the generation of 'lwa' instruction instead of the intended > 'ld' instruction. > > Segher also pointed out that we can't simply mask away the last two bits > as that will result in loading/storing from/to a memory location that > was not intended. > > This patch addresses this by using ldx/stdx if the offset is not > word-aligned. We load the offset into a temporary register (TMP_REG_2) > and use that as the index register in a subsequent ldx/stdx. We fix > PPC_LD() macro to mask off the last two bits, but enhance PPC_BPF_LL() > and PPC_BPF_STL() to factor in the offset value and generate the proper > instruction sequence. We also convert all existing users of PPC_LD() and > PPC_STD() to use these macros. All existing uses of these macros have > been audited to ensure that TMP_REG_2 can be clobbered. > > Fixes: 156d0e290e96 ("powerpc/ebpf/jit: Implement JIT compiler for extended BPF") > Cc: stable@xxxxxxxxxxxxxxx # v4.9+ > > Reported-by: Yauheni Kaliuta <yauheni.kaliuta@xxxxxxxxxx> > Signed-off-by: Naveen N. Rao <naveen.n.rao@xxxxxxxxxxxxxxxxxx> Applied, thanks!