53 lines
1.9 KiB
Diff
53 lines
1.9 KiB
Diff
From 040a56e9f9d0df15a2f8161ed3a0a907d70dda03 Mon Sep 17 00:00:00 2001
|
|
From: Kazuhito Hagio <k-hagio-ab@nec.com>
|
|
Date: Wed, 10 May 2023 16:09:03 +0900
|
|
Subject: [PATCH 1/6] Fix kernel version macros for revision numbers over 255
|
|
|
|
The current comparison macros for kernel version shift minor number only
|
|
8 bits. This can cause an unexpected result on kernels with revision
|
|
number over 255, e.g. Linux 4.14.314.
|
|
|
|
In fact, on Linux 4.14.314 for x86_64 without CONFIG_RANDOMIZE_BASE=y
|
|
(KASLR), the following condition became false in x86_64_init().
|
|
|
|
((THIS_KERNEL_VERSION >= LINUX(4,14,84)) &&
|
|
(THIS_KERNEL_VERSION < LINUX(4,15,0)))
|
|
|
|
As a result, crash used a wrong hard-coded value for PAGE_OFFSET and
|
|
failed to start a session with the following seek error.
|
|
|
|
crash: seek error: physical address: 200e000 type: "pud page"
|
|
|
|
Shift the major and minor number by 24 and 16 bits respectively to fix
|
|
this issue.
|
|
|
|
Reported-by: Luiz Capitulino <luizcap@amazon.com>
|
|
Tested-by: Luiz Capitulino <luizcap@amazon.com>
|
|
Signed-off-by: Kazuhito Hagio <k-hagio-ab@nec.com>
|
|
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
|
|
---
|
|
defs.h | 6 +++---
|
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/defs.h b/defs.h
|
|
index 12ad6aaa0998..211fc9d55d33 100644
|
|
--- a/defs.h
|
|
+++ b/defs.h
|
|
@@ -807,10 +807,10 @@ struct kernel_table { /* kernel data */
|
|
} \
|
|
}
|
|
|
|
-#define THIS_KERNEL_VERSION ((kt->kernel_version[0] << 16) + \
|
|
- (kt->kernel_version[1] << 8) + \
|
|
+#define THIS_KERNEL_VERSION ((kt->kernel_version[0] << 24) + \
|
|
+ (kt->kernel_version[1] << 16) + \
|
|
(kt->kernel_version[2]))
|
|
-#define LINUX(x,y,z) (((uint)(x) << 16) + ((uint)(y) << 8) + (uint)(z))
|
|
+#define LINUX(x,y,z) (((uint)(x) << 24) + ((uint)(y) << 16) + (uint)(z))
|
|
|
|
#define THIS_GCC_VERSION ((kt->gcc_version[0] << 16) + \
|
|
(kt->gcc_version[1] << 8) + \
|
|
--
|
|
2.37.1
|
|
|