From: Kazuhito Hagio <k-hagio-ab@xxxxxxx> 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@xxxxxxxxxx> Signed-off-by: Kazuhito Hagio <k-hagio-ab@xxxxxxx> --- 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.31.1 -- Crash-utility mailing list Crash-utility@xxxxxxxxxx https://listman.redhat.com/mailman/listinfo/crash-utility Contribution Guidelines: https://github.com/crash-utility/crash/wiki