]> Git Repo - linux.git/commitdiff
ARM: 9276/1: Refactor dump_instr()
authorZhen Lei <[email protected]>
Mon, 28 Nov 2022 11:42:42 +0000 (12:42 +0100)
committerRussell King (Oracle) <[email protected]>
Mon, 28 Nov 2022 11:57:36 +0000 (11:57 +0000)
1. Rename local variable 'val16' to 'tmp'. So that the processing
   statements of thumb and arm can be aligned.
2. Fix two sparse check warnings: (add __user for type conversion)
   warning: incorrect type in initializer (different address spaces)
      expected unsigned short [noderef] __user *register __p
      got unsigned short [usertype] *
3. Prepare for the next patch to avoid repeated judgment.
   Before:
   if (!user_mode(regs)) {
           if (thumb)
           else
   } else {
           if (thumb)
           else
   }

   After:
   if (thumb) {
           if (user_mode(regs))
           else
   } else {
           if (user_mode(regs))
           else
   }

Signed-off-by: Zhen Lei <[email protected]>
Signed-off-by: Russell King (Oracle) <[email protected]>
arch/arm/kernel/traps.c

index 20b2db6dcd1ced712c8627cffd629751fdcbe7ff..a92e0763739584e1090a29fa04d19c841afaf76c 100644 (file)
@@ -178,19 +178,20 @@ static void dump_instr(const char *lvl, struct pt_regs *regs)
        for (i = -4; i < 1 + !!thumb; i++) {
                unsigned int val, bad;
 
-               if (!user_mode(regs)) {
-                       if (thumb) {
-                               u16 val16;
-                               bad = get_kernel_nofault(val16, &((u16 *)addr)[i]);
-                               val = val16;
-                       } else {
-                               bad = get_kernel_nofault(val, &((u32 *)addr)[i]);
-                       }
+               if (thumb) {
+                       u16 tmp;
+
+                       if (user_mode(regs))
+                               bad = get_user(tmp, &((u16 __user *)addr)[i]);
+                       else
+                               bad = get_kernel_nofault(tmp, &((u16 *)addr)[i]);
+
+                       val = tmp;
                } else {
-                       if (thumb)
-                               bad = get_user(val, &((u16 *)addr)[i]);
+                       if (user_mode(regs))
+                               bad = get_user(val, &((u32 __user *)addr)[i]);
                        else
-                               bad = get_user(val, &((u32 *)addr)[i]);
+                               bad = get_kernel_nofault(val, &((u32 *)addr)[i]);
                }
 
                if (!bad)
This page took 0.054092 seconds and 4 git commands to generate.