mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-03 14:34:27 -05:00 
			
		
		
		
	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>
This commit is contained in:
		
							parent
							
								
									27b078e83a
								
							
						
					
					
						commit
						d9345bc5bf
					
				@ -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;
 | 
			
		||||
+}
 | 
			
		||||
+
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user