arm64: fix endianness annotation for 'struct jit_ctx' and friends
Subsystems (3)
PATCH 1/1 arm64: fix endianness annotation for 'struct jit_ctx' and friends
struct jit_ctx::image is used the store a pointer to the jitted intructions, which are always little-endian. These instructions are thus correctly converted from native order to little-endian before being stored but the pointer 'image' is declared as for native order values.
Fix this by declaring the field as __le32* instead of u32*. Same for the pointer used in jit_fill_hole() to initialize the image.
--- arch/arm64/net/bpf_jit_comp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
arch/arm64/net/bpf_jit_comp.c +3 -3
@@ -70,7 +70,7 @@ struct jit_ctx {int idx;int epilogue_offset;int *offset; -u32 *image; +__le32 *image; };static inline void emit (const u32 insn,struct jit_ctx *ctx)
@@ -130,7 +130,7 @@ static inline int bpf2a64_offset(int bpf_to, int bpf_from,static void jit_fill_hole (void *area,unsigned int size) { -u32 *ptr; +__le32 *ptr;/* We are guaranteed to have aligned memory. */ for (ptr = area; size >=sizeof (u32); size -=sizeof (u32)) *ptr++ =cpu_to_le32 (AARCH64_BREAK_FAULT );
@@ -874,7 +874,7 @@ struct bpf_prog *bpf_int_jit_compile(struct bpf_prog *prog)/* 2. Now, the actual pass. */ - ctx.image = (u32 *)image_ptr; + ctx.image = (__le32 *)image_ptr; ctx.idx =0 ;build_prologue (&ctx);
Signature · 1 line
2.13.0
PATCH 1/1 arm64: fix endianness annotation for 'struct jit_ctx' and friends
Quoted 6 lines · Luc Van Oostenryck
struct
jit_ctx::imageis used the store a pointer to the jitted intructions, which are always little-endian. These instructions are thus correctly converted from native order to little-endian before being stored but the pointer 'image' is declared as for native order values.
Quoted 8 lines
Fix this by declaring the field as __le32* instead of u32*. Same for the pointer used in
jit_fill_hole()to initialize the image.Signed-off-by Luc Van Oostenryck <[email protected]>--- arch/arm64/net/bpf_jit_comp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)
Happy to take this via the arm64 tree, along with the other sparse fixes (modulo review comments).
Ok with you, David?
Will
PATCH 1/1 arm64: fix endianness annotation for 'struct jit_ctx' and friends
Quoted 2 lines · Will Deacon
Happy to take this via the arm64 tree, along with the other sparse fixes (modulo review comments).
For info, together with the other endianness fixes I sent, this fixes all the 'easy to fix' endianness annotations.
It remains:
- 2 or 3 small issues, just needing a cast, maybe with __force.
- Problems with probes. Those could probably be fixed by redefining [k]probe_opcode_t as __le32 instead of u32 but I didn't looked at the consequences.
- 3 or 4 'impossible to solve properly by design' where things like the following is done:
if (kvm_vcpu_is_be(vcpu)) {
switch (len) {
case 1:
return data & 0xff;
case 2:
return be16_to_cpu(data & 0xffff);
case 4:
return be32_to_cpu(data & 0xffffffff);
default:
return be64_to_cpu(data);
}
} else {
...This is done for kvm emulate & the kvm vgics
Cheers,
-- Luc