diff --git a/loader/preloader.c b/loader/preloader.c
index 274d858041..d9b749c854 100644
--- a/loader/preloader.c
+++ b/loader/preloader.c
@@ -847,6 +847,12 @@ static void preload_reserve( const char *str )
         start = end = NULL;
     }
 
+    /* check for overlap with low memory area */
+    if ((char *)end <= (char *)preload_info[0].addr + preload_info[0].size)
+        start = end = NULL;
+    else if ((char *)start < (char *)preload_info[0].addr + preload_info[0].size)
+        start = (char *)preload_info[0].addr + preload_info[0].size;
+
     /* entry 2 is for the PE exe */
     preload_info[2].addr = start;
     preload_info[2].size = (char *)end - (char *)start;