arm64: fix endianness annotation for debug-monitors.c
authorLuc Van Oostenryck <luc.vanoostenryck@gmail.com>
Wed, 28 Jun 2017 14:55:52 +0000 (16:55 +0200)
committerWill Deacon <will.deacon@arm.com>
Thu, 29 Jun 2017 10:02:41 +0000 (11:02 +0100)
Here we're reading thumb or ARM instructions, which are always
stored in memory in little-endian order. These values are thus
correctly converted to native order but the intermediate value
should be annotated as for little-endian values.

Fix this by declaring the intermediate var as __le32 or __le16.

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

index d618e25c3de11c1ef379797edd0ae296beb0422f..c7ef99904934a3a1f52997fbfe689342c11e55a2 100644 (file)
@@ -341,20 +341,22 @@ int aarch32_break_handler(struct pt_regs *regs)
 
        if (compat_thumb_mode(regs)) {
                /* get 16-bit Thumb instruction */
-               get_user(thumb_instr, (u16 __user *)pc);
-               thumb_instr = le16_to_cpu(thumb_instr);
+               __le16 instr;
+               get_user(instr, (__le16 __user *)pc);
+               thumb_instr = le16_to_cpu(instr);
                if (thumb_instr == AARCH32_BREAK_THUMB2_LO) {
                        /* get second half of 32-bit Thumb-2 instruction */
-                       get_user(thumb_instr, (u16 __user *)(pc + 2));
-                       thumb_instr = le16_to_cpu(thumb_instr);
+                       get_user(instr, (__le16 __user *)(pc + 2));
+                       thumb_instr = le16_to_cpu(instr);
                        bp = thumb_instr == AARCH32_BREAK_THUMB2_HI;
                } else {
                        bp = thumb_instr == AARCH32_BREAK_THUMB;
                }
        } else {
                /* 32-bit ARM instruction */
-               get_user(arm_instr, (u32 __user *)pc);
-               arm_instr = le32_to_cpu(arm_instr);
+               __le32 instr;
+               get_user(instr, (__le32 __user *)pc);
+               arm_instr = le32_to_cpu(instr);
                bp = (arm_instr & ~0xf0000000) == AARCH32_BREAK_ARM;
        }