diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c
index 77e9c1c..bcafe88 100644
--- a/arch/x86/mm/init.c
+++ b/arch/x86/mm/init.c
@@ -18,6 +18,7 @@
 #include <asm/proto.h>
 #include <asm/dma.h>		/* for MAX_DMA_PFN */
 #include <asm/desc.h>
+#include <asm/bios_ebda.h>
 
 unsigned long __initdata pgt_buf_start;
 unsigned long __meminitdata pgt_buf_end;
@@ -316,11 +317,26 @@ unsigned long __init_refok init_memory_mapping(unsigned long start,
 int devmem_is_allowed(unsigned long pagenr)
 {
 #ifdef CONFIG_GRKERNSEC_KMEM
+	unsigned int ebda_addr = get_bios_ebda();
+	unsigned int ebda_start = 0;
+	unsigned int ebda_end = 0;
+
+	if (ebda_addr) {
+		unsigned int ebda_size = 0;
+		ebda_size = *(unsigned char *)phys_to_virt(ebda_addr);
+		ebda_size <<= 10;
+		ebda_start = ebda_addr >> PAGE_SHIFT;
+		ebda_end = min(PAGE_ALIGN(ebda_addr + ebda_size), 0xa0000) >> PAGE_SHIFT;
+	} else {
+		ebda_start = 0x9f000 >> PAGE_SHIFT;
+		ebda_end = 0xa0000 >> PAGE_SHIFT;
+	}
+
 	/* allow BDA */
 	if (!pagenr)
 		return 1;
 	/* allow EBDA */
-	if ((0x9f000 >> PAGE_SHIFT) == pagenr)
+	if (pagenr >= ebda_start && pagenr < ebda_end)
 		return 1;
 #else
 	if (!pagenr)
