f1cd67284d
Release: crash-7.3.0-4 Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
50 lines
1.7 KiB
Diff
50 lines
1.7 KiB
Diff
From b8e1f2735b8dd1303aeb2affa309a2a409a82d38 Mon Sep 17 00:00:00 2001
|
|
From: Tao Liu <ltao@redhat.com>
|
|
Date: Mon, 26 Jul 2021 09:58:54 +0800
|
|
Subject: [PATCH 23/27] Add kernel version dependent check for getting length
|
|
of log_end
|
|
|
|
For kernels(>=2.4.9.11 [1] && <3.5 [2]), log_end was involved in the kernel sources.
|
|
For kernels(>=2.6.25 [3]), log_end was defined as:
|
|
static unsigned log_end;
|
|
For kernels(<2.6.25), log_end was defined as:
|
|
static unsigned long log_end;
|
|
|
|
Previously, the length of log_end is determined by get_symbol_length, but it can
|
|
be a regression when the returned length is 0 for some cases and value unchecked:
|
|
|
|
crash> help -t
|
|
...
|
|
help: invalid size request: 0 type: "log_end"
|
|
|
|
To solve the above issue, let's add a kernel version dependent check to get its
|
|
value appropriately when the length of the 'log_end' returns a value of zero.
|
|
|
|
[1]: https://elixir.bootlin.com/linux/2.4.9.11/source/kernel/printk.c#L74
|
|
[2]: https://elixir.bootlin.com/linux/v3.5/source/kernel/printk.c
|
|
[3]: https://elixir.bootlin.com/linux/v2.6.25/source/kernel/printk.c#L104
|
|
|
|
Signed-off-by: Tao Liu <ltao@redhat.com>
|
|
---
|
|
kernel.c | 4 ++++
|
|
1 file changed, 4 insertions(+)
|
|
|
|
diff --git a/kernel.c b/kernel.c
|
|
index a559f937980e..a8be7bb1947f 100644
|
|
--- a/kernel.c
|
|
+++ b/kernel.c
|
|
@@ -5106,6 +5106,10 @@ dump_log(int msg_flags)
|
|
if ((len = get_symbol_length("log_end")) == sizeof(int)) {
|
|
get_symbol_data("log_end", len, &tmp);
|
|
log_end = (ulong)tmp;
|
|
+ } else if (len == 0) {
|
|
+ THIS_KERNEL_VERSION >= LINUX(2,6,25) ?
|
|
+ get_symbol_data("log_end", sizeof(unsigned), &log_end) :
|
|
+ get_symbol_data("log_end", sizeof(unsigned long), &log_end);
|
|
} else
|
|
get_symbol_data("log_end", len, &log_end);
|
|
|
|
--
|
|
2.30.2
|
|
|