]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blobdiff - arch/x86/kernel/unwind_guess.c
x86/unwind: Fix guess-unwinder regression
[mirror_ubuntu-artful-kernel.git] / arch / x86 / kernel / unwind_guess.c
index b80e8bf43cc63b4350185ab1125ee85f1c43d05f..22881ddcbb9fc0c0a23ee7faf0578727b09a23f6 100644 (file)
@@ -7,11 +7,13 @@
 
 unsigned long unwind_get_return_address(struct unwind_state *state)
 {
-       unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
+       unsigned long addr;
 
        if (unwind_done(state))
                return 0;
 
+       addr = READ_ONCE_NOCHECK(*state->sp);
+
        return ftrace_graph_ret_addr(state->task, &state->graph_idx,
                                     addr, state->sp);
 }
@@ -25,11 +27,12 @@ bool unwind_next_frame(struct unwind_state *state)
                return false;
 
        do {
-               unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
+               for (state->sp++; state->sp < info->end; state->sp++) {
+                       unsigned long addr = READ_ONCE_NOCHECK(*state->sp);
 
-               for (state->sp++; state->sp < info->end; state->sp++)
                        if (__kernel_text_address(addr))
                                return true;
+               }
 
                state->sp = info->next_sp;