[PATCH] Fix kernel version macros for revision numbers over 255

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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




[Index of Archives]     [Fedora Development]     [Fedora Desktop]     [Fedora SELinux]     [Yosemite News]     [KDE Users]     [Fedora Tools]

 

Powered by Linux