patch-2.3.46 linux/arch/sparc64/solaris/misc.c
Next file: linux/arch/sparc64/solaris/socksys.c
Previous file: linux/arch/sparc64/mm/ultra.S
Back to the patch index
Back to the overall index
-  Lines: 35
-  Date:
Mon Feb 14 15:31:14 2000
-  Orig file: 
v2.3.45/linux/arch/sparc64/solaris/misc.c
-  Orig date: 
Tue Feb  1 01:35:43 2000
diff -u --recursive --new-file v2.3.45/linux/arch/sparc64/solaris/misc.c linux/arch/sparc64/solaris/misc.c
@@ -83,27 +83,25 @@
 		}
 	}
 
-	down(¤t->mm->mmap_sem);
-	retval = -ENOMEM;
-	if(!(flags & MAP_FIXED) && !addr) {
-		unsigned long attempt = get_unmapped_area(addr, len);
-		if(!attempt || (attempt >= 0xf0000000UL))
-			goto out_putf;
-		addr = (u32) attempt;
-	}
+	retval = -EINVAL;
+	len = PAGE_ALIGN(len);
 	if(!(flags & MAP_FIXED))
 		addr = 0;
+	else if (len > 0xf0000000UL || addr > 0xf0000000UL - len)
+		goto out_putf;
 	ret_type = flags & _MAP_NEW;
 	flags &= ~_MAP_NEW;
 
+	down(¤t->mm->mmap_sem);
 	flags &= ~(MAP_EXECUTABLE | MAP_DENYWRITE);
 	retval = do_mmap(file,
 			 (unsigned long) addr, (unsigned long) len,
 			 (unsigned long) prot, (unsigned long) flags, off);
+	up(¤t->mm->mmap_sem);
 	if(!ret_type)
 		retval = ((retval < 0xf0000000) ? 0 : retval);
+	                        
 out_putf:
-	up(¤t->mm->mmap_sem);
 	if (file)
 		fput(file);
 out:
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)