!50 revert to fix null pointer reference when CONFIG_KASAN is open

From: @zhouwenpei 
Reviewed-by: @hanxinke 
Signed-off-by: @hanxinke
This commit is contained in:
openeuler-ci-bot 2022-02-22 09:21:17 +00:00 committed by Gitee
commit 3177491352
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
2 changed files with 26 additions and 20 deletions

View File

@ -31,11 +31,12 @@ PID: 55429 TASK: ffff802772e3ae80 CPU: 19 COMMAND: "insmod"
Signed-off-by: Jialong Chen <chenjialong@huawei.com>
---
arm64.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 206 insertions(+), 4 deletions(-)
arm64.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
defs.h | 3 +
2 files changed, 209 insertions(+), 4 deletions(-)
diff --git a/arm64.c b/arm64.c
index 4787fa6..abd5eac 100644
index fdf77bd..cc32d9d 100644
--- a/arm64.c
+++ b/arm64.c
@@ -87,6 +87,10 @@ static void arm64_calc_VA_BITS(void);
@ -57,7 +58,7 @@ index 4787fa6..abd5eac 100644
break;
case POST_VM:
@@ -1669,6 +1674,70 @@ arm64_irq_stack_init(void)
@@ -1655,6 +1660,70 @@ arm64_irq_stack_init(void)
readmem(p, KVADDR, &(ms->irq_stacks[i]), sizeof(ulong),
"IRQ stack pointer", RETURN_ON_ERROR);
}
@ -128,7 +129,7 @@ index 4787fa6..abd5eac 100644
}
}
@@ -2187,7 +2256,7 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
@@ -2173,7 +2242,7 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
{
unsigned long high, low, fp;
unsigned long stack_mask;
@ -137,7 +138,7 @@ index 4787fa6..abd5eac 100644
struct arm64_pt_regs *ptregs;
struct machine_specific *ms = machdep->machspec;
@@ -2217,7 +2286,8 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
@@ -2203,7 +2272,8 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
if (machdep->flags & UNW_4_14) {
if ((bt->flags & BT_IRQSTACK) &&
@ -147,7 +148,7 @@ index 4787fa6..abd5eac 100644
if (arm64_on_process_stack(bt, frame->fp)) {
arm64_set_process_stack(bt);
@@ -2257,6 +2327,7 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
@@ -2243,6 +2313,7 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
* orig_sp = IRQ_STACK_TO_TASK_STACK(irq_stack_ptr); (pt_regs pointer on process stack)
*/
irq_stack_ptr = ms->irq_stacks[bt->tc->processor] + ms->irq_stack_size - 16;
@ -155,7 +156,7 @@ index 4787fa6..abd5eac 100644
if (frame->sp == irq_stack_ptr) {
orig_sp = GET_STACK_ULONG(irq_stack_ptr - 8);
@@ -2277,6 +2348,25 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
@@ -2263,6 +2334,25 @@ arm64_unwind_frame(struct bt_info *bt, struct arm64_stackframe *frame)
frame->fp, INSTACK(frame->fp, bt) ? "" : " (?)");
return FALSE;
}
@ -181,7 +182,7 @@ index 4787fa6..abd5eac 100644
}
return TRUE;
@@ -2616,6 +2706,10 @@ arm64_back_trace_cmd(struct bt_info *bt)
@@ -2602,6 +2692,10 @@ arm64_back_trace_cmd(struct bt_info *bt)
arm64_set_irq_stack(bt);
bt->flags |= BT_IRQSTACK;
}
@ -192,7 +193,7 @@ index 4787fa6..abd5eac 100644
stackframe.fp = GET_STACK_ULONG(bt->bptr - 8);
stackframe.pc = GET_STACK_ULONG(bt->bptr);
stackframe.sp = bt->bptr + 8;
@@ -2625,6 +2719,10 @@ arm64_back_trace_cmd(struct bt_info *bt)
@@ -2611,6 +2705,10 @@ arm64_back_trace_cmd(struct bt_info *bt)
arm64_set_irq_stack(bt);
bt->flags |= BT_IRQSTACK;
}
@ -203,7 +204,7 @@ index 4787fa6..abd5eac 100644
stackframe.fp = GET_STACK_ULONG(bt->hp->esp - 8);
stackframe.pc = bt->hp->eip ?
bt->hp->eip : GET_STACK_ULONG(bt->hp->esp);
@@ -2635,6 +2733,10 @@ arm64_back_trace_cmd(struct bt_info *bt)
@@ -2621,6 +2719,10 @@ arm64_back_trace_cmd(struct bt_info *bt)
arm64_set_irq_stack(bt);
bt->flags |= BT_IRQSTACK;
}
@ -214,7 +215,7 @@ index 4787fa6..abd5eac 100644
stackframe.sp = bt->stkptr;
stackframe.pc = bt->instptr;
stackframe.fp = bt->frameptr;
@@ -2696,7 +2798,8 @@ arm64_back_trace_cmd(struct bt_info *bt)
@@ -2682,7 +2784,8 @@ arm64_back_trace_cmd(struct bt_info *bt)
}
if ((bt->flags & BT_IRQSTACK) &&
@ -224,11 +225,10 @@ index 4787fa6..abd5eac 100644
bt->flags &= ~BT_IRQSTACK;
if (arm64_switch_stack(bt, &stackframe, ofp) == USER_MODE)
break;
@@ -2978,6 +3081,79 @@ arm64_in_kdump_text(struct bt_info *bt, struct arm64_stackframe *frame)
return FALSE;
@@ -2965,6 +3068,81 @@ arm64_in_kdump_text(struct bt_info *bt, struct arm64_stackframe *frame)
}
+static int
static int
+arm64_in_kdump_text_on_sdei_stack(struct bt_info *bt)
+{
+ int cpu;
@ -241,6 +241,8 @@ index 4787fa6..abd5eac 100644
+ return FALSE;
+
+ ms = machdep->machspec;
+ if (!ms->sdei_stacks)
+ return FALSE;
+ cpu = bt->tc->processor;
+ stackbase = ms->sdei_stacks[cpu];
+ stackbuf = GETBUF(ms->sdei_stack_size);
@ -301,10 +303,11 @@ index 4787fa6..abd5eac 100644
+ return FALSE;
+}
+
static int
+static int
arm64_in_kdump_text_on_irq_stack(struct bt_info *bt)
{
@@ -3125,7 +3301,8 @@ try_kernel:
int cpu;
@@ -3111,7 +3287,8 @@ try_kernel:
}
if (arm64_in_kdump_text(bt, frame) ||
@ -314,7 +317,7 @@ index 4787fa6..abd5eac 100644
bt->flags |= BT_KDUMP_ADJUST;
return TRUE;
@@ -3818,6 +3995,31 @@ arm64_in_alternate_stack(int cpu, ulong stkptr)
@@ -3804,6 +3981,31 @@ arm64_in_alternate_stack(int cpu, ulong stkptr)
return FALSE;
}
@ -361,5 +364,5 @@ index 9594950..9cd5ffa 100644
ulong __irqentry_text_end;
/* for exception vector code */
--
2.30.0
2.13.7

View File

@ -1,6 +1,6 @@
Name: crash
Version: 7.3.0
Release: 3
Release: 4
Summary: Linux kernel crash utility.
License: GPLv3
URL: https://crash-utility.github.io
@ -79,6 +79,9 @@ install -D -m 0644 defs.h %{buildroot}%{_includedir}/%{name}/defs.h
%{_mandir}/man8/crash.8*
%changelog
* Tue Feb 8 2022 zhouwenpei <zhouwenpei1@h-partners.com> - 7.3.0-4
- revert to fix null pointer reference when CONFIG_KASAN is open
* Fri Dec 31 2021 zhouwenpei <zhouwenpei1@huawei.com> - 7.3.0-3
- add SDEI stack resolution