Hi,

Crash fails to start with current (4.4+) kernels. The following patch
fixes this.

Regards,
Sebastian
----->8

>From ddd809812705ba36796c6750d12a12838b4106ec Mon Sep 17 00:00:00 2001
From: Sebastian Ott <[email protected]>
Date: Tue, 19 Jan 2016 14:14:13 +0100
Subject: [PATCH] Fix invalid structure member offset.

Struct module was changed by kernel commit
7523e4dc50 "module: use a structure to encapsulate layout."

Fix the offsets to handle the following crash error:

crash: invalid structure member offset: module_init_text_size
       FILE: symbols.c  LINE: 1668  FUNCTION: store_module_symbols_v2()

[../crash/crash] error trace: 10062e92 => 10109812 => 1014f16e => 101813ac

  101813ac: OFFSET_verify+124
  1014f16e: store_module_symbols_v2+2182
  10109812: module_init+4386
  10062e92: main_loop+410

Signed-off-by: Sebastian Ott <[email protected]>
---
 kernel.c | 49 +++++++++++++++++++++++++++++++++++++++----------
 1 file changed, 39 insertions(+), 10 deletions(-)

diff --git a/kernel.c b/kernel.c
index 2d4188a..5ce2fb9 100644
--- a/kernel.c
+++ b/kernel.c
@@ -3291,16 +3291,45 @@ module_init(void)
                MEMBER_OFFSET_INIT(module_gpl_syms, "module", "gpl_syms");
                MEMBER_OFFSET_INIT(module_num_gpl_syms, "module", 
                        "num_gpl_syms");
-               MEMBER_OFFSET_INIT(module_module_core, "module", 
-                       "module_core");
-               MEMBER_OFFSET_INIT(module_core_size, "module", 
-                       "core_size");
-               MEMBER_OFFSET_INIT(module_core_text_size, "module", 
-                       "core_text_size");
-               MEMBER_OFFSET_INIT(module_module_init, "module", "module_init");
-               MEMBER_OFFSET_INIT(module_init_size, "module", "init_size");
-               MEMBER_OFFSET_INIT(module_init_text_size, "module", 
-                       "init_text_size");
+
+               if (MEMBER_EXISTS("module", "module_core")) {
+                       MEMBER_OFFSET_INIT(module_core_size, "module",
+                                          "core_size");
+                       MEMBER_OFFSET_INIT(module_init_size, "module",
+                                          "init_size");
+
+                       MEMBER_OFFSET_INIT(module_core_text_size, "module",
+                                          "core_text_size");
+                       MEMBER_OFFSET_INIT(module_init_text_size, "module",
+                                          "init_text_size");
+
+                       MEMBER_OFFSET_INIT(module_module_core, "module",
+                                          "module_core");
+                       MEMBER_OFFSET_INIT(module_module_init, "module",
+                                          "module_init");
+               } else {
+                       ASSIGN_OFFSET(module_core_size) =
+                               MEMBER_OFFSET("module", "core_layout") +
+                               MEMBER_OFFSET("module_layout", "size");
+                       ASSIGN_OFFSET(module_init_size) =
+                               MEMBER_OFFSET("module", "init_layout") +
+                               MEMBER_OFFSET("module_layout", "size");
+
+                       ASSIGN_OFFSET(module_core_text_size) =
+                               MEMBER_OFFSET("module", "core_layout") +
+                               MEMBER_OFFSET("module_layout", "text_size");
+                       ASSIGN_OFFSET(module_init_text_size) =
+                               MEMBER_OFFSET("module", "init_layout") +
+                               MEMBER_OFFSET("module_layout", "text_size");
+
+                       ASSIGN_OFFSET(module_module_core) =
+                               MEMBER_OFFSET("module", "core_layout") +
+                               MEMBER_OFFSET("module_layout", "base");
+                       ASSIGN_OFFSET(module_module_init) =
+                               MEMBER_OFFSET("module", "init_layout") +
+                               MEMBER_OFFSET("module_layout", "base");
+               }
+
                MEMBER_OFFSET_INIT(module_percpu, "module", "percpu");
 
                /*
-- 
2.3.0

--
Crash-utility mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/crash-utility

Reply via email to