!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:
commit
3177491352
@ -31,11 +31,12 @@ PID: 55429 TASK: ffff802772e3ae80 CPU: 19 COMMAND: "insmod"
|
|||||||
|
|
||||||
Signed-off-by: Jialong Chen <chenjialong@huawei.com>
|
Signed-off-by: Jialong Chen <chenjialong@huawei.com>
|
||||||
---
|
---
|
||||||
arm64.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++--
|
arm64.c | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
|
||||||
1 file changed, 206 insertions(+), 4 deletions(-)
|
defs.h | 3 +
|
||||||
|
2 files changed, 209 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/arm64.c b/arm64.c
|
diff --git a/arm64.c b/arm64.c
|
||||||
index 4787fa6..abd5eac 100644
|
index fdf77bd..cc32d9d 100644
|
||||||
--- a/arm64.c
|
--- a/arm64.c
|
||||||
+++ b/arm64.c
|
+++ b/arm64.c
|
||||||
@@ -87,6 +87,10 @@ static void arm64_calc_VA_BITS(void);
|
@@ -87,6 +87,10 @@ static void arm64_calc_VA_BITS(void);
|
||||||
@ -57,7 +58,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case POST_VM:
|
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),
|
readmem(p, KVADDR, &(ms->irq_stacks[i]), sizeof(ulong),
|
||||||
"IRQ stack pointer", RETURN_ON_ERROR);
|
"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 high, low, fp;
|
||||||
unsigned long stack_mask;
|
unsigned long stack_mask;
|
||||||
@ -137,7 +138,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
struct arm64_pt_regs *ptregs;
|
struct arm64_pt_regs *ptregs;
|
||||||
struct machine_specific *ms = machdep->machspec;
|
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 (machdep->flags & UNW_4_14) {
|
||||||
if ((bt->flags & BT_IRQSTACK) &&
|
if ((bt->flags & BT_IRQSTACK) &&
|
||||||
@ -147,7 +148,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
if (arm64_on_process_stack(bt, frame->fp)) {
|
if (arm64_on_process_stack(bt, frame->fp)) {
|
||||||
arm64_set_process_stack(bt);
|
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)
|
* 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;
|
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) {
|
if (frame->sp == irq_stack_ptr) {
|
||||||
orig_sp = GET_STACK_ULONG(irq_stack_ptr - 8);
|
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) ? "" : " (?)");
|
frame->fp, INSTACK(frame->fp, bt) ? "" : " (?)");
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
@ -181,7 +182,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
return TRUE;
|
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);
|
arm64_set_irq_stack(bt);
|
||||||
bt->flags |= BT_IRQSTACK;
|
bt->flags |= BT_IRQSTACK;
|
||||||
}
|
}
|
||||||
@ -192,7 +193,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
stackframe.fp = GET_STACK_ULONG(bt->bptr - 8);
|
stackframe.fp = GET_STACK_ULONG(bt->bptr - 8);
|
||||||
stackframe.pc = GET_STACK_ULONG(bt->bptr);
|
stackframe.pc = GET_STACK_ULONG(bt->bptr);
|
||||||
stackframe.sp = bt->bptr + 8;
|
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);
|
arm64_set_irq_stack(bt);
|
||||||
bt->flags |= BT_IRQSTACK;
|
bt->flags |= BT_IRQSTACK;
|
||||||
}
|
}
|
||||||
@ -203,7 +204,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
stackframe.fp = GET_STACK_ULONG(bt->hp->esp - 8);
|
stackframe.fp = GET_STACK_ULONG(bt->hp->esp - 8);
|
||||||
stackframe.pc = bt->hp->eip ?
|
stackframe.pc = bt->hp->eip ?
|
||||||
bt->hp->eip : GET_STACK_ULONG(bt->hp->esp);
|
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);
|
arm64_set_irq_stack(bt);
|
||||||
bt->flags |= BT_IRQSTACK;
|
bt->flags |= BT_IRQSTACK;
|
||||||
}
|
}
|
||||||
@ -214,7 +215,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
stackframe.sp = bt->stkptr;
|
stackframe.sp = bt->stkptr;
|
||||||
stackframe.pc = bt->instptr;
|
stackframe.pc = bt->instptr;
|
||||||
stackframe.fp = bt->frameptr;
|
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) &&
|
if ((bt->flags & BT_IRQSTACK) &&
|
||||||
@ -224,11 +225,10 @@ index 4787fa6..abd5eac 100644
|
|||||||
bt->flags &= ~BT_IRQSTACK;
|
bt->flags &= ~BT_IRQSTACK;
|
||||||
if (arm64_switch_stack(bt, &stackframe, ofp) == USER_MODE)
|
if (arm64_switch_stack(bt, &stackframe, ofp) == USER_MODE)
|
||||||
break;
|
break;
|
||||||
@@ -2978,6 +3081,79 @@ arm64_in_kdump_text(struct bt_info *bt, struct arm64_stackframe *frame)
|
@@ -2965,6 +3068,81 @@ arm64_in_kdump_text(struct bt_info *bt, struct arm64_stackframe *frame)
|
||||||
return FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
+static int
|
static int
|
||||||
+arm64_in_kdump_text_on_sdei_stack(struct bt_info *bt)
|
+arm64_in_kdump_text_on_sdei_stack(struct bt_info *bt)
|
||||||
+{
|
+{
|
||||||
+ int cpu;
|
+ int cpu;
|
||||||
@ -241,6 +241,8 @@ index 4787fa6..abd5eac 100644
|
|||||||
+ return FALSE;
|
+ return FALSE;
|
||||||
+
|
+
|
||||||
+ ms = machdep->machspec;
|
+ ms = machdep->machspec;
|
||||||
|
+ if (!ms->sdei_stacks)
|
||||||
|
+ return FALSE;
|
||||||
+ cpu = bt->tc->processor;
|
+ cpu = bt->tc->processor;
|
||||||
+ stackbase = ms->sdei_stacks[cpu];
|
+ stackbase = ms->sdei_stacks[cpu];
|
||||||
+ stackbuf = GETBUF(ms->sdei_stack_size);
|
+ stackbuf = GETBUF(ms->sdei_stack_size);
|
||||||
@ -301,10 +303,11 @@ index 4787fa6..abd5eac 100644
|
|||||||
+ return FALSE;
|
+ return FALSE;
|
||||||
+}
|
+}
|
||||||
+
|
+
|
||||||
static int
|
+static int
|
||||||
arm64_in_kdump_text_on_irq_stack(struct bt_info *bt)
|
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) ||
|
if (arm64_in_kdump_text(bt, frame) ||
|
||||||
@ -314,7 +317,7 @@ index 4787fa6..abd5eac 100644
|
|||||||
bt->flags |= BT_KDUMP_ADJUST;
|
bt->flags |= BT_KDUMP_ADJUST;
|
||||||
|
|
||||||
return TRUE;
|
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;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -361,5 +364,5 @@ index 9594950..9cd5ffa 100644
|
|||||||
ulong __irqentry_text_end;
|
ulong __irqentry_text_end;
|
||||||
/* for exception vector code */
|
/* for exception vector code */
|
||||||
--
|
--
|
||||||
2.30.0
|
2.13.7
|
||||||
|
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
Name: crash
|
Name: crash
|
||||||
Version: 7.3.0
|
Version: 7.3.0
|
||||||
Release: 3
|
Release: 4
|
||||||
Summary: Linux kernel crash utility.
|
Summary: Linux kernel crash utility.
|
||||||
License: GPLv3
|
License: GPLv3
|
||||||
URL: https://crash-utility.github.io
|
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*
|
%{_mandir}/man8/crash.8*
|
||||||
|
|
||||||
%changelog
|
%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
|
* Fri Dec 31 2021 zhouwenpei <zhouwenpei1@huawei.com> - 7.3.0-3
|
||||||
- add SDEI stack resolution
|
- add SDEI stack resolution
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user