aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2016-08-15 12:14:50 +0200
committerJo-Philipp Wich <jo@mein.io>2016-08-15 13:21:01 +0200
commitd9345bc5bf8063ce433c0152893f93000fb0ddfb (patch)
tree8ee1fc13f8afaa38c8ea87cbce8032b67a150723
parent27b078e83aa05e66697dfc177d6deb69dd7d4491 (diff)
downloadupstream-d9345bc5bf8063ce433c0152893f93000fb0ddfb.tar.gz
upstream-d9345bc5bf8063ce433c0152893f93000fb0ddfb.tar.bz2
upstream-d9345bc5bf8063ce433c0152893f93000fb0ddfb.zip
kernel: fix crashlog on x86/64
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>
-rw-r--r--target/linux/generic/patches-4.4/930-crashlog.patch8
1 files changed, 6 insertions, 2 deletions
diff --git a/target/linux/generic/patches-4.4/930-crashlog.patch b/target/linux/generic/patches-4.4/930-crashlog.patch
index bb97c90196..fdc80d750a 100644
--- a/target/linux/generic/patches-4.4/930-crashlog.patch
+++ b/target/linux/generic/patches-4.4/930-crashlog.patch
@@ -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>
@@ -117,7 +117,11 @@
+ 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;
+}
+