SOURCES (LINUX_2_6): grsecurity-2.1.9-2.6.17.11.patch - update for...

zbyniu zbyniu at pld-linux.org
Thu Sep 14 18:01:00 CEST 2006


Author: zbyniu                       Date: Thu Sep 14 16:00:59 2006 GMT
Module: SOURCES                       Tag: LINUX_2_6
---- Log message:
- update for 2.6.17.13

---- Files affected:
SOURCES:
   grsecurity-2.1.9-2.6.17.11.patch (1.1.2.1 -> 1.1.2.2) 

---- Diffs:

================================================================
Index: SOURCES/grsecurity-2.1.9-2.6.17.11.patch
diff -u SOURCES/grsecurity-2.1.9-2.6.17.11.patch:1.1.2.1 SOURCES/grsecurity-2.1.9-2.6.17.11.patch:1.1.2.2
--- SOURCES/grsecurity-2.1.9-2.6.17.11.patch:1.1.2.1	Mon Sep  4 22:59:08 2006
+++ SOURCES/grsecurity-2.1.9-2.6.17.11.patch	Thu Sep 14 18:00:54 2006
@@ -7946,7 +7946,7 @@
  	int retval, i, size;
  
  	/* First of all, some simple consistency checks */
-@@ -360,59 +366,80 @@ static unsigned long load_elf_interp(str
+@@ -360,42 +366,64 @@
  		goto out_close;
  	}
  
@@ -7983,52 +7983,30 @@
 -		load_addr = map_addr - ELF_PAGESTART(vaddr);
 -		load_addr_set = 1;
 -	    }
--
--	    /*
--	     * Check to see if the section's size will overflow the
--	     * allowed task size. Note that p_filesz must always be
--	     * <= p_memsize so it is only necessary to check p_memsz.
--	     */
++	    if (eppnt->p_type != PT_LOAD)
++		continue;
+ 
+ 	    /*
+ 	     * Check to see if the section's size will overflow the
+ 	     * allowed task size. Note that p_filesz must always be
+ 	     * <= p_memsize so it is only necessary to check p_memsz.
+ 	     */
 -	    k = load_addr + eppnt->p_vaddr;
--	    if (k > TASK_SIZE || eppnt->p_filesz > eppnt->p_memsz ||
+-	    if (BAD_ADDR(k) || eppnt->p_filesz > eppnt->p_memsz ||
 -		eppnt->p_memsz > TASK_SIZE || TASK_SIZE - eppnt->p_memsz < k) {
 -	        error = -ENOMEM;
-+		if (eppnt->p_type != PT_LOAD)
-+			continue;
++	    if (eppnt->p_filesz > eppnt->p_memsz || eppnt->p_vaddr >= eppnt->p_vaddr + eppnt->p_memsz)
++		goto out_close;
 +
-+		/*
-+		 * Check to see if the section's size will overflow the
-+		 * allowed task size. Note that p_filesz must always be
-+		 * <= p_memsize so it is only necessary to check p_memsz.
-+		 */
-+		if (eppnt->p_filesz > eppnt->p_memsz || eppnt->p_vaddr >= eppnt->p_vaddr + eppnt->p_memsz)
-+			goto out_close;
-+
-+		if (min_addr > ELF_PAGESTART(eppnt->p_vaddr))
-+			min_addr = ELF_PAGESTART(eppnt->p_vaddr);
-+		if (max_addr < ELF_PAGEALIGN(eppnt->p_vaddr + eppnt->p_memsz))
-+			max_addr = ELF_PAGEALIGN(eppnt->p_vaddr + eppnt->p_memsz);
++	    if (min_addr > ELF_PAGESTART(eppnt->p_vaddr))
++		min_addr = ELF_PAGESTART(eppnt->p_vaddr);
++	    if (max_addr < ELF_PAGEALIGN(eppnt->p_vaddr + eppnt->p_memsz))
++		max_addr = ELF_PAGEALIGN(eppnt->p_vaddr + eppnt->p_memsz);
 +	}
 +	if (min_addr >= max_addr)
  		goto out_close;
 -	    }
- 
--	    /*
--	     * Find the end of the file mapping for this phdr, and keep
--	     * track of the largest address we see for this.
--	     */
--	    k = load_addr + eppnt->p_vaddr + eppnt->p_filesz;
--	    if (k > elf_bss)
--		elf_bss = k;
--
--	    /*
--	     * Do the same thing for the memory mapping - between
--	     * elf_bss and last_bss is the bss section.
--	     */
--	    k = load_addr + eppnt->p_memsz + eppnt->p_vaddr;
--	    if (k > last_bss)
--		last_bss = k;
--	  }
++	
 +	eppnt = elf_phdata;
 +	for (i=0; i<interp_elf_ex->e_phnum; i++, eppnt++) {
 +		int elf_type = MAP_PRIVATE | MAP_DENYWRITE | MAP_FIXED;
@@ -8057,22 +8035,14 @@
 +		error = map_addr;
 +		if (BAD_ADDR(map_addr))
 +			goto out_close;
-+
-+		/*
-+		 * Find the end of the file mapping for this phdr, and keep
-+		 * track of the largest address we see for this.
-+		 */
-+		k = load_addr + eppnt->p_vaddr + eppnt->p_filesz;
-+		if (k > elf_bss)
-+			elf_bss = k;
-+
-+		/*
-+		 * Do the same thing for the memory mapping - between
-+		 * elf_bss and last_bss is the bss section.
-+		 */
-+		k = load_addr + eppnt->p_memsz + eppnt->p_vaddr;
-+		if (k > last_bss)
-+			last_bss = k;
+ 
+ 	    /*
+ 	     * Find the end of the file mapping for this phdr, and keep
+@@ -412,7 +440,6 @@
+ 	    k = load_addr + eppnt->p_memsz + eppnt->p_vaddr;
+ 	    if (k > last_bss)
+ 		last_bss = k;
+-	  }
  	}
  
  	/*
@@ -8388,14 +8358,12 @@
  		}
  
  		error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, elf_prot, elf_flags);
-@@ -878,9 +1163,9 @@ static int load_elf_binary(struct linux_
- 		 * allowed task size. Note that p_filesz must always be
+@@ -878,8 +1163,8 @@ static int load_elf_binary(struct linux_
  		 * <= p_memsz so it is only necessary to check p_memsz.
  		 */
--		if (k > TASK_SIZE || elf_ppnt->p_filesz > elf_ppnt->p_memsz ||
+ 		if (BAD_ADDR(k) || elf_ppnt->p_filesz > elf_ppnt->p_memsz ||
 -		    elf_ppnt->p_memsz > TASK_SIZE ||
 -		    TASK_SIZE - elf_ppnt->p_memsz < k) {
-+		if (k > task_size || elf_ppnt->p_filesz > elf_ppnt->p_memsz ||
 +		    elf_ppnt->p_memsz > task_size ||
 +		    task_size - elf_ppnt->p_memsz < k) {
  			/* set_brk can never work.  Avoid overflows.  */
@@ -8414,15 +8382,6 @@
  	/* Calling set_brk effectively mmaps the pages that we need
  	 * for the bss and break sections.  We must do this before
  	 * mapping in the interpreter, to make sure it doesn't wind
-@@ -935,7 +1226,7 @@ static int load_elf_binary(struct linux_
- 			printk(KERN_ERR "Unable to load interpreter %.128s\n",
- 				elf_interpreter);
- 			force_sig(SIGSEGV, current);
--			retval = -ENOEXEC; /* Nobody gets to see this, but.. */
-+			retval = elf_entry; /* Nobody gets to see this, but.. */
- 			goto out_free_dentry;
- 		}
- 		reloc_func_desc = interp_load_addr;
 @@ -1159,7 +1450,7 @@ static int dump_seek(struct file *file, 
   *
   * I think we should skip something. But I am not sure how. H.J.
================================================================

---- CVS-web:
    http://cvs.pld-linux.org/SOURCES/grsecurity-2.1.9-2.6.17.11.patch?r1=1.1.2.1&r2=1.1.2.2&f=u



More information about the pld-cvs-commit mailing list