kernel: fix crashlog on x86/64
authorJo-Philipp Wich <jo@mein.io>
Mon, 15 Aug 2016 10:14:50 +0000 (12:14 +0200)
committerJo-Philipp Wich <jo@mein.io>
Mon, 15 Aug 2016 11:21:01 +0000 (13:21 +0200)
The bootmem area reserved for crashlog might be smaller than CRASHLOG_OFFSET
bytes, leading to an integer underflow when calculating the memory address
in crashlog_set_addr() which subsequently causes the kernel to crash when
attempting to vmap() the crashlog pages.

Change the logic to only consider the offset when the size of the used memory
area is sufficient.

Signed-off-by: Jo-Philipp Wich <jo@mein.io>
target/linux/generic/patches-4.4/930-crashlog.patch

index bb97c90196d8b81c2d4fb3acab836a967da5d964..fdc80d750aa5a1491a2eb9121c64374004536ff0 100644 (file)
@@ -43,7 +43,7 @@
  
 --- /dev/null
 +++ b/kernel/crashlog.c
-@@ -0,0 +1,209 @@
+@@ -0,0 +1,213 @@
 +/*
 + * Crash information logger
 + * Copyright (C) 2010 Felix Fietkau <nbd@nbd.name>
 +      if (addr + size > limit)
 +              size = limit - addr;
 +
-+      crashlog_addr = addr + size - CRASHLOG_OFFSET;
++      crashlog_addr = addr;
++
++      if (addr + size > CRASHLOG_OFFSET)
++              crashlog_addr += size - CRASHLOG_OFFSET;
++
 +      return true;
 +}
 +