[Crash-utility] [PATCH] Fix kernel version macros for revision numbers over 255
Luiz Capitulino
luizcap at amazon.com
Wed May 10 18:02:37 UTC 2023
On 2023-05-10 03:09, HAGIO KAZUHITO(萩尾 一仁) wrote:
> CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe.
>
>
>
> From: Kazuhito Hagio <k-hagio-ab at nec.com>
>
> 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.
This fixes the issue for me. The only detail is that I couldn't apply
this patch to latest crash HEAD 2505a65ff5471 so I applied it manually.
Thank you very much, Kazu!
Tested-by: Luiz Capitulino <luizcap at amazon.com>
- Luiz
>
> Reported-by: Luiz Capitulino <luizcap at amazon.com>
> Signed-off-by: Kazuhito Hagio <k-hagio-ab at nec.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.31.1
More information about the Crash-utility
mailing list