Openwall GNU/*/Linux - a small security-enhanced Linux distro for servers
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date: Thu, 14 Apr 2016 15:28:55 -0700
From: Kees Cook <>
To: Ingo Molnar <>
Cc: Kees Cook <>,
	Baoquan He <>,
	Yinghai Lu <>,
	Ard Biesheuvel <>,
	Matt Redfearn <>,,
	"H. Peter Anvin" <>,
	Ingo Molnar <>,
	Borislav Petkov <>,
	Vivek Goyal <>,
	Andy Lutomirski <>,,
	Andrew Morton <>,
	Dave Young <>,,
	LKML <>
Subject: [PATCH v5 02/21] x86, KASLR: Handle kernel relocation above 2G

From: Baoquan He <>

When processing the relocation table, the offset used to calculate the
relocation is an int. This is sufficient for calculating the physical
address of the relocs entry on 32-bit systems and on 64-bit systems when
the relocation is under 2G. To handle relocations above 2G (seen in
situations like kexec, netboot, etc), this offset needs to be calculated
using a long to avoid wrapping and miscalculating the relocation.

Signed-off-by: Baoquan He <>
[kees: rewrote changelog]
Signed-off-by: Kees Cook <>
 arch/x86/boot/compressed/misc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
index f35ad9eb1bf1..c4477d5f3fff 100644
--- a/arch/x86/boot/compressed/misc.c
+++ b/arch/x86/boot/compressed/misc.c
@@ -295,7 +295,7 @@ static void handle_relocations(void *output, unsigned long output_len)
 	 * So we work backwards from the end of the decompressed image.
 	for (reloc = output + output_len - sizeof(*reloc); *reloc; reloc--) {
-		int extended = *reloc;
+		long extended = *reloc;
 		extended += map;
 		ptr = (unsigned long)extended;

Powered by blists - more mailing lists

Your e-mail address:

Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.