arm64: fix endianness annotation for 'struct jit_ctx' and friends
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>
Wed, 28 Jun 2017 14:58:03 +0000 (16:58 +0200)
committerWill Deacon <will.deacon@arm.com>
Fri, 30 Jun 2017 16:11:28 +0000 (17:11 +0100)
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.

Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
arch/arm64/net/bpf_jit_comp.c

index 71f930501ade7cec2d1f230aa638ad3fc9112ee8..bd2ac9912087d0c6a315e9350a6f012d9db79e90 100644 (file)
@@ -68,7 +68,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)
@@ -128,7 +128,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);
@@ -871,7 +871,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);