diff options
author | Luc Van Oostenryck <luc.vanoostenryck@gmail.com> | 2017-06-28 16:58:11 +0200 |
---|---|---|
committer | Will Deacon <will.deacon@arm.com> | 2017-06-29 11:02:42 +0100 |
commit | 57c138357d5922878b3bc5207bd59b8512ee80e6 (patch) | |
tree | a4a33d37062318c9cf4cffac7c69ce0c3b9fe82a /arch/arm64 | |
parent | 65de142143206c7ffd98b0fcb062a79b3c6f1934 (diff) | |
download | lwn-57c138357d5922878b3bc5207bd59b8512ee80e6.tar.gz lwn-57c138357d5922878b3bc5207bd59b8512ee80e6.zip |
arm64: fix endianness annotation for aarch64_insn_write()
aarch64_insn_write() is used to write an instruction.
As on ARM64 in-memory instructions are always stored
in little-endian order, this function, taking the instruction
opcode in native order, correctly convert it to little-endian
before sending it to an helper function __aarch64_insn_write()
which will do the effective write.
This is all good, but the variable and argument holding the
converted value are not annotated for a little-endian value
but left for native values.
Fix this by adjusting the prototype of the helper and
directly using the result of cpu_to_le32() without passing
by an intermediate variable (which was not a distinct one
but the same as the one holding the native value).
Signed-off-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Diffstat (limited to 'arch/arm64')
-rw-r--r-- | arch/arm64/kernel/insn.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/arm64/kernel/insn.c b/arch/arm64/kernel/insn.c index d4d80b32cb69..60a2f03d76bc 100644 --- a/arch/arm64/kernel/insn.c +++ b/arch/arm64/kernel/insn.c @@ -126,7 +126,7 @@ int __kprobes aarch64_insn_read(void *addr, u32 *insnp) return ret; } -static int __kprobes __aarch64_insn_write(void *addr, u32 insn) +static int __kprobes __aarch64_insn_write(void *addr, __le32 insn) { void *waddr = addr; unsigned long flags = 0; @@ -145,8 +145,7 @@ static int __kprobes __aarch64_insn_write(void *addr, u32 insn) int __kprobes aarch64_insn_write(void *addr, u32 insn) { - insn = cpu_to_le32(insn); - return __aarch64_insn_write(addr, insn); + return __aarch64_insn_write(addr, cpu_to_le32(insn)); } static bool __kprobes __aarch64_insn_hotpatch_safe(u32 insn) |