diff -ruN linux-2.4.22.orig/mm/mmap.c linux-2.4.22/mm/mmap.c
--- linux-2.4.22.orig/mm/mmap.c	2003-06-13 22:51:39.000000000 +0800
+++ linux-2.4.22/mm/mmap.c	2003-12-02 12:51:44.000000000 +0800
@@ -1041,6 +1041,9 @@
 	if (!len)
 		return addr;
 
+    if ((addr + len) > TASK_SIZE || (addr + len) < addr)
+        return -EINVAL;
+
 	/*
 	 * mlock MCL_FUTURE?
 	 */

