Commit 65de1421 authored by Luc Van Oostenryck's avatar Luc Van Oostenryck Committed by Will Deacon

arm64: fix endianness annotation in aarch64_insn_read()

The function arch64_insn_read() is used to read an instruction.
On AM64 instructions are always stored in little-endian order
and thus the function correctly do a little-to-native endian
conversion to the value just read.

However, the variable used to hold the value before the conversion
is not declared for a little-endian value but for a native one.

Fix this by using the correct type for the declaration: __le32

Note: This only works because the function reading the value,
      probe_kernel_read((), takes a void pointer and void pointers
      are endian-agnostic. Otherwise probe_kernel_read() should
      also be properly annotated (or worse, need to be specialized).
Signed-off-by: default avatarLuc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
parent 6cf5d4af
...@@ -117,7 +117,7 @@ static void __kprobes patch_unmap(int fixmap) ...@@ -117,7 +117,7 @@ static void __kprobes patch_unmap(int fixmap)
int __kprobes aarch64_insn_read(void *addr, u32 *insnp) int __kprobes aarch64_insn_read(void *addr, u32 *insnp)
{ {
int ret; int ret;
u32 val; __le32 val;
ret = probe_kernel_read(&val, addr, AARCH64_INSN_SIZE); ret = probe_kernel_read(&val, addr, AARCH64_INSN_SIZE);
if (!ret) if (!ret)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment