From 040a56e9f9d0df15a2f8161ed3a0a907d70dda03 Mon Sep 17 00:00:00 2001 From: Kazuhito Hagio Date: Wed, 10 May 2023 16:09:03 +0900 Subject: [PATCH 01/13] 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 Tested-by: Luiz Capitulino Signed-off-by: Kazuhito Hagio Signed-off-by: Lianbo Jiang --- 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