mirror of
https://github.com/crash-utility/crash
synced 2024-12-12 20:24:34 +00:00
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>
This commit is contained in:
parent
2505a65ff5
commit
040a56e9f9
6
defs.h
6
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) + \
|
||||
|
Loading…
Reference in New Issue
Block a user