SOURCES (LINUX_2_6): grsecurity-2.1.9-2.6.18.patch - pldized

zbyniu zbyniu at pld-linux.org
Wed Sep 27 21:11:03 CEST 2006


Author: zbyniu                       Date: Wed Sep 27 19:11:03 2006 GMT
Module: SOURCES                       Tag: LINUX_2_6
---- Log message:
- pldized

---- Files affected:
SOURCES:
   grsecurity-2.1.9-2.6.18.patch (1.1 -> 1.1.2.1) 

---- Diffs:

================================================================
Index: SOURCES/grsecurity-2.1.9-2.6.18.patch
diff -u SOURCES/grsecurity-2.1.9-2.6.18.patch:1.1 SOURCES/grsecurity-2.1.9-2.6.18.patch:1.1.2.1
--- SOURCES/grsecurity-2.1.9-2.6.18.patch:1.1	Wed Sep 27 21:05:40 2006
+++ SOURCES/grsecurity-2.1.9-2.6.18.patch	Wed Sep 27 21:10:58 2006
@@ -38,16 +38,16 @@
 diff -urNp linux-2.6.18/arch/alpha/kernel/ptrace.c linux-2.6.18/arch/alpha/kernel/ptrace.c
 --- linux-2.6.18/arch/alpha/kernel/ptrace.c	2006-09-19 23:42:06.000000000 -0400
 +++ linux-2.6.18/arch/alpha/kernel/ptrace.c	2006-09-22 20:04:35.000000000 -0400
-@@ -15,6 +15,7 @@
- #include <linux/slab.h>
+@@ -16,6 +16,7 @@
  #include <linux/security.h>
  #include <linux/signal.h>
+ #include <linux/vs_pid.h>
 +#include <linux/grsecurity.h>
  
  #include <asm/uaccess.h>
  #include <asm/pgtable.h>
-@@ -283,6 +284,9 @@ do_sys_ptrace(long request, long pid, lo
- 		goto out_notsk;
+@@ -289,6 +290,9 @@ do_sys_ptrace(long request, long pid, lo
+ 		goto out;
  	}
  
 +	if (gr_handle_ptrace(child, request))
@@ -1891,8 +1891,8 @@
  }
  
  /*
-@@ -293,7 +293,7 @@ void show_regs(struct pt_regs * regs)
- 	printk("EIP: %04x:[<%08lx>] CPU: %d\n",0xffff & regs->xcs,regs->eip, smp_processor_id());
+@@ -295,7 +295,7 @@ void show_regs(struct pt_regs * regs)
+ 		0xffff & regs->xcs,regs->eip, smp_processor_id());
  	print_symbol("EIP is at %s\n", regs->eip);
  
 -	if (user_mode_vm(regs))
@@ -1900,7 +1900,7 @@
  		printk(" ESP: %04x:%08lx",0xffff & regs->xss,regs->esp);
  	printk(" EFLAGS: %08lx    %s  (%s %.*s)\n",
  	       regs->eflags, print_tainted(), system_utsname.release,
-@@ -342,8 +342,8 @@ int kernel_thread(int (*fn)(void *), voi
+@@ -344,8 +344,8 @@ int kernel_thread(int (*fn)(void *), voi
  	regs.ebx = (unsigned long) fn;
  	regs.edx = (unsigned long) arg;
  
@@ -1911,7 +1911,7 @@
  	regs.orig_eax = -1;
  	regs.eip = (unsigned long) kernel_thread_helper;
  	regs.xcs = __KERNEL_CS;
-@@ -364,7 +364,7 @@ void exit_thread(void)
+@@ -367,7 +367,7 @@ void exit_thread(void)
  		struct task_struct *tsk = current;
  		struct thread_struct *t = &tsk->thread;
  		int cpu = get_cpu();
@@ -1920,7 +1920,7 @@
  
  		kfree(t->io_bitmap_ptr);
  		t->io_bitmap_ptr = NULL;
-@@ -385,6 +385,9 @@ void flush_thread(void)
+@@ -388,6 +388,9 @@ void flush_thread(void)
  {
  	struct task_struct *tsk = current;
  
@@ -1930,7 +1930,7 @@
  	memset(tsk->thread.debugreg, 0, sizeof(unsigned long)*8);
  	memset(tsk->thread.tls_array, 0, sizeof(tsk->thread.tls_array));	
  	clear_tsk_thread_flag(tsk, TIF_DEBUG);
-@@ -418,7 +421,7 @@ int copy_thread(int nr, unsigned long cl
+@@ -421,7 +424,7 @@ int copy_thread(int nr, unsigned long cl
  	struct task_struct *tsk;
  	int err;
  
@@ -1939,7 +1939,7 @@
  	*childregs = *regs;
  	childregs->eax = 0;
  	childregs->esp = esp;
-@@ -462,6 +465,11 @@ int copy_thread(int nr, unsigned long cl
+@@ -465,6 +468,11 @@ int copy_thread(int nr, unsigned long cl
  		if (idx < GDT_ENTRY_TLS_MIN || idx > GDT_ENTRY_TLS_MAX)
  			goto out;
  
@@ -1951,7 +1951,7 @@
  		desc = p->thread.tls_array + idx - GDT_ENTRY_TLS_MIN;
  		desc->a = LDT_entry_a(&info);
  		desc->b = LDT_entry_b(&info);
-@@ -641,7 +649,11 @@ struct task_struct fastcall * __switch_t
+@@ -644,7 +652,11 @@ struct task_struct fastcall * __switch_t
  	struct thread_struct *prev = &prev_p->thread,
  				 *next = &next_p->thread;
  	int cpu = smp_processor_id();
@@ -4295,7 +4295,7 @@
  		extern u32 pnp_bios_is_utter_crap;
 diff -urNp linux-2.6.18/arch/i386/mm/fault.c linux-2.6.18/arch/i386/mm/fault.c
 --- linux-2.6.18/arch/i386/mm/fault.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/i386/mm/fault.c	2006-09-23 00:26:29.000000000 -0400
++++ linux-2.6.18/arch/i386/mm/fault.c	2006-09-22 23:58:58.000000000 -0400
 @@ -22,6 +22,9 @@
  #include <linux/highmem.h>
  #include <linux/module.h>
@@ -4962,7 +4962,7 @@
 -#endif
  }
  
- #if defined(CONFIG_SOFTWARE_SUSPEND) || defined(CONFIG_ACPI_SLEEP)
+ #if defined(CONFIG_SUSPEND_SHARED) || defined(CONFIG_ACPI_SLEEP)
 @@ -424,7 +394,6 @@ void zap_low_mappings (void)
  	flush_tlb_all();
  }
@@ -5221,696 +5221,6 @@
  
  	set_tss_desc(cpu,t);	/* This just modifies memory; should not be necessary. But... This is necessary, because 386 hardware has concept of busy TSS or some similar stupidity. */
  
-diff -urNp linux-2.6.18/arch/ia64/ia32/binfmt_elf32.c linux-2.6.18/arch/ia64/ia32/binfmt_elf32.c
---- linux-2.6.18/arch/ia64/ia32/binfmt_elf32.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/ia64/ia32/binfmt_elf32.c	2006-09-22 20:45:03.000000000 -0400
-@@ -45,6 +45,17 @@ randomize_stack_top(unsigned long stack_
- 
- #define elf_read_implies_exec(ex, have_pt_gnu_stack)	(!(have_pt_gnu_stack))
- 
-+#ifdef CONFIG_PAX_ASLR
-+#define PAX_ELF_ET_DYN_BASE(tsk)	((tsk)->personality == PER_LINUX32 ? 0x08048000UL : 0x4000000000000000UL)
-+
-+#define PAX_DELTA_MMAP_LSB(tsk)		IA32_PAGE_SHIFT
-+#define PAX_DELTA_MMAP_LEN(tsk)		((tsk)->personality == PER_LINUX32 ? 16 : 3*PAGE_SHIFT - IA32_PAGE_SHIFT)
-+#define PAX_DELTA_EXEC_LSB(tsk)		IA32_PAGE_SHIFT
-+#define PAX_DELTA_EXEC_LEN(tsk)		((tsk)->personality == PER_LINUX32 ? 16 : 3*PAGE_SHIFT - IA32_PAGE_SHIFT)
-+#define PAX_DELTA_STACK_LSB(tsk)	IA32_PAGE_SHIFT
-+#define PAX_DELTA_STACK_LEN(tsk)	((tsk)->personality == PER_LINUX32 ? 16 : 3*PAGE_SHIFT - IA32_PAGE_SHIFT)
-+#endif
-+
- /* Ugly but avoids duplication */
- #include "../../../fs/binfmt_elf.c"
- 
-diff -urNp linux-2.6.18/arch/ia64/ia32/ia32priv.h linux-2.6.18/arch/ia64/ia32/ia32priv.h
---- linux-2.6.18/arch/ia64/ia32/ia32priv.h	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/ia64/ia32/ia32priv.h	2006-09-22 20:45:03.000000000 -0400
-@@ -304,7 +304,14 @@ struct old_linux32_dirent {
- #define ELF_DATA	ELFDATA2LSB
- #define ELF_ARCH	EM_386
- 
--#define IA32_STACK_TOP		IA32_PAGE_OFFSET
-+#ifdef CONFIG_PAX_RANDUSTACK
-+#define __IA32_DELTA_STACK	(current->mm->delta_stack)
-+#else
-+#define __IA32_DELTA_STACK	0UL
-+#endif
-+
-+#define IA32_STACK_TOP		(IA32_PAGE_OFFSET - __IA32_DELTA_STACK)
-+
- #define IA32_GATE_OFFSET	IA32_PAGE_OFFSET
- #define IA32_GATE_END		IA32_PAGE_OFFSET + PAGE_SIZE
- 
-diff -urNp linux-2.6.18/arch/ia64/kernel/module.c linux-2.6.18/arch/ia64/kernel/module.c
---- linux-2.6.18/arch/ia64/kernel/module.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/ia64/kernel/module.c	2006-09-22 20:45:03.000000000 -0400
-@@ -321,7 +321,7 @@ module_alloc (unsigned long size)
- void
- module_free (struct module *mod, void *module_region)
- {
--	if (mod->arch.init_unw_table && module_region == mod->module_init) {
-+	if (mod->arch.init_unw_table && module_region == mod->module_init_rx) {
- 		unw_remove_unwind_table(mod->arch.init_unw_table);
- 		mod->arch.init_unw_table = NULL;
- 	}
-@@ -499,15 +499,39 @@ module_frob_arch_sections (Elf_Ehdr *ehd
- }
- 
- static inline int
-+in_init_rx (const struct module *mod, uint64_t addr)
-+{
-+	return addr - (uint64_t) mod->module_init_rx < mod->init_size_rx;
-+}
-+
-+static inline int
-+in_init_rw (const struct module *mod, uint64_t addr)
-+{
-+	return addr - (uint64_t) mod->module_init_rw < mod->init_size_rw;
-+}
-+
-+static inline int
- in_init (const struct module *mod, uint64_t addr)
- {
--	return addr - (uint64_t) mod->module_init < mod->init_size;
-+	return in_init_rx(mod, value) || in_init_rw(mod, value);
-+}
-+
-+static inline int
-+in_core_rx (const struct module *mod, uint64_t addr)
-+{
-+	return addr - (uint64_t) mod->module_core_rx < mod->core_size_rx;
-+}
-+
-+static inline int
-+in_core_rw (const struct module *mod, uint64_t addr)
-+{
-+	return addr - (uint64_t) mod->module_core_rw < mod->core_size_rw;
- }
- 
- static inline int
- in_core (const struct module *mod, uint64_t addr)
- {
--	return addr - (uint64_t) mod->module_core < mod->core_size;
-+	return in_core_rx(mod, value) || in_core_rw(mod, value);
- }
- 
- static inline int
-@@ -691,7 +715,14 @@ do_reloc (struct module *mod, uint8_t r_
- 		break;
- 
- 	      case RV_BDREL:
--		val -= (uint64_t) (in_init(mod, val) ? mod->module_init : mod->module_core);
-+		if (in_init_rx(mod, val))
-+			val -= (uint64_t) mod->module_init_rx;
-+		else if (in_init_rw(mod, val))
-+			val -= (uint64_t) mod->module_init_rw;
-+		else if (in_core_rx(mod, val))
-+			val -= (uint64_t) mod->module_core_rx;
-+		else if (in_core_rw(mod, val))
-+			val -= (uint64_t) mod->module_core_rw;
- 		break;
- 
- 	      case RV_LTV:
-@@ -825,15 +856,15 @@ apply_relocate_add (Elf64_Shdr *sechdrs,
- 		 *     addresses have been selected...
- 		 */
- 		uint64_t gp;
--		if (mod->core_size > MAX_LTOFF)
-+		if (mod->core_size_rx + mod->core_size_rw > MAX_LTOFF)
- 			/*
- 			 * This takes advantage of fact that SHF_ARCH_SMALL gets allocated
- 			 * at the end of the module.
- 			 */
--			gp = mod->core_size - MAX_LTOFF / 2;
-+			gp = mod->core_size_rx + mod->core_size_rw - MAX_LTOFF / 2;
- 		else
--			gp = mod->core_size / 2;
--		gp = (uint64_t) mod->module_core + ((gp + 7) & -8);
-+			gp = (mod->core_size_rx + mod->core_size_rw) / 2;
-+		gp = (uint64_t) mod->module_core_rx + ((gp + 7) & -8);
- 		mod->arch.gp = gp;
- 		DEBUGP("%s: placing gp at 0x%lx\n", __FUNCTION__, gp);
- 	}
-diff -urNp linux-2.6.18/arch/ia64/kernel/ptrace.c linux-2.6.18/arch/ia64/kernel/ptrace.c
---- linux-2.6.18/arch/ia64/kernel/ptrace.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/ia64/kernel/ptrace.c	2006-09-22 20:04:35.000000000 -0400
-@@ -17,6 +17,7 @@
- #include <linux/security.h>
- #include <linux/audit.h>
- #include <linux/signal.h>
-+#include <linux/grsecurity.h>
- 
- #include <asm/pgtable.h>
- #include <asm/processor.h>
-@@ -1446,6 +1447,9 @@ sys_ptrace (long request, pid_t pid, uns
- 	if (pid == 1)		/* no messing around with init! */
- 		goto out_tsk;
- 
-+	if (gr_handle_ptrace(child, request))
-+		goto out_tsk;
-+
- 	if (request == PTRACE_ATTACH) {
- 		ret = ptrace_attach(child);
- 		goto out_tsk;
-diff -urNp linux-2.6.18/arch/ia64/kernel/sys_ia64.c linux-2.6.18/arch/ia64/kernel/sys_ia64.c
---- linux-2.6.18/arch/ia64/kernel/sys_ia64.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/ia64/kernel/sys_ia64.c	2006-09-22 20:45:03.000000000 -0400
-@@ -37,6 +37,13 @@ arch_get_unmapped_area (struct file *fil
- 	if (REGION_NUMBER(addr) == RGN_HPAGE)
- 		addr = 0;
- #endif
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+	if ((mm->pax_flags & MF_PAX_RANDMMAP) && addr && filp)
-+		addr = mm->free_area_cache;
-+	else
-+#endif
-+
- 	if (!addr)
- 		addr = mm->free_area_cache;
- 
-@@ -55,9 +62,9 @@ arch_get_unmapped_area (struct file *fil
- 	for (vma = find_vma(mm, addr); ; vma = vma->vm_next) {
- 		/* At this point:  (!vma || addr < vma->vm_end). */
- 		if (TASK_SIZE - len < addr || RGN_MAP_LIMIT - len < REGION_OFFSET(addr)) {
--			if (start_addr != TASK_UNMAPPED_BASE) {
-+			if (start_addr != mm->mmap_base) {
- 				/* Start a new search --- just in case we missed some holes.  */
--				addr = TASK_UNMAPPED_BASE;
-+				addr = mm->mmap_base;
- 				goto full_search;
- 			}
- 			return -ENOMEM;
-diff -urNp linux-2.6.18/arch/ia64/mm/fault.c linux-2.6.18/arch/ia64/mm/fault.c
---- linux-2.6.18/arch/ia64/mm/fault.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/ia64/mm/fault.c	2006-09-22 20:45:03.000000000 -0400
-@@ -10,6 +10,7 @@
- #include <linux/smp_lock.h>
- #include <linux/interrupt.h>
- #include <linux/kprobes.h>
-+#include <linux/binfmts.h>
- 
- #include <asm/pgtable.h>
- #include <asm/processor.h>
-@@ -85,6 +86,23 @@ mapped_kernel_page_is_present (unsigned 
- 	return pte_present(pte);
- }
- 
-+#ifdef CONFIG_PAX_PAGEEXEC
-+void pax_report_insns(void *pc, void *sp)
-+{
-+	unsigned long i;
-+
-+	printk(KERN_ERR "PAX: bytes at PC: ");
-+	for (i = 0; i < 8; i++) {
-+		unsigned int c;
-+		if (get_user(c, (unsigned int*)pc+i))
-+			printk("???????? ");
-+		else
-+			printk("%08x ", c);
-+	}
-+	printk("\n");
-+}
-+#endif
-+
- void __kprobes
- ia64_do_page_fault (unsigned long address, unsigned long isr, struct pt_regs *regs)
- {
-@@ -150,9 +168,23 @@ ia64_do_page_fault (unsigned long addres
- 		| (((isr >> IA64_ISR_W_BIT) & 1UL) << VM_WRITE_BIT)
- 		| (((isr >> IA64_ISR_R_BIT) & 1UL) << VM_READ_BIT));
- 
--	if ((vma->vm_flags & mask) != mask)
-+	if ((vma->vm_flags & mask) != mask) {
-+
-+#ifdef CONFIG_PAX_PAGEEXEC
-+		if (!(vma->vm_flags & VM_EXEC) && (mask & VM_EXEC)) {
-+			if (!(mm->pax_flags & MF_PAX_PAGEEXEC) || address != regs->cr_iip)
-+				goto bad_area;
-+
-+			up_read(&mm->mmap_sem);
-+			pax_report_fault(regs, (void*)regs->cr_iip, (void*)regs->r12);
-+			do_exit(SIGKILL);
-+		}
-+#endif
-+
- 		goto bad_area;
- 
-+	}
-+
-   survive:
- 	/*
- 	 * If for any reason at all we couldn't handle the fault, make
-diff -urNp linux-2.6.18/arch/ia64/mm/init.c linux-2.6.18/arch/ia64/mm/init.c
---- linux-2.6.18/arch/ia64/mm/init.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/ia64/mm/init.c	2006-09-22 20:45:03.000000000 -0400
-@@ -19,8 +19,8 @@
- #include <linux/swap.h>
- #include <linux/proc_fs.h>
- #include <linux/bitops.h>
-+#include <linux/a.out.h>
- 
--#include <asm/a.out.h>
- #include <asm/dma.h>
- #include <asm/ia32.h>
- #include <asm/io.h>
-diff -urNp linux-2.6.18/arch/mips/kernel/binfmt_elfn32.c linux-2.6.18/arch/mips/kernel/binfmt_elfn32.c
---- linux-2.6.18/arch/mips/kernel/binfmt_elfn32.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/mips/kernel/binfmt_elfn32.c	2006-09-22 20:45:03.000000000 -0400
-@@ -50,6 +50,17 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_N
- #undef ELF_ET_DYN_BASE
- #define ELF_ET_DYN_BASE         (TASK32_SIZE / 3 * 2)
- 
-+#ifdef CONFIG_PAX_ASLR
-+#define PAX_ELF_ET_DYN_BASE(tsk)	(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 0x00400000UL : 0x00400000UL)
-+
-+#define PAX_DELTA_MMAP_LSB(tsk)		PAGE_SHIFT
-+#define PAX_DELTA_MMAP_LEN(tsk)		(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 27-PAGE_SHIFT : 36-PAGE_SHIFT)
-+#define PAX_DELTA_EXEC_LSB(tsk)		PAGE_SHIFT
-+#define PAX_DELTA_EXEC_LEN(tsk)		(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 27-PAGE_SHIFT : 36-PAGE_SHIFT)
-+#define PAX_DELTA_STACK_LSB(tsk)	PAGE_SHIFT
-+#define PAX_DELTA_STACK_LEN(tsk)	(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 27-PAGE_SHIFT : 36-PAGE_SHIFT)
-+#endif
-+
- #include <asm/processor.h>
- #include <linux/module.h>
- #include <linux/elfcore.h>
-diff -urNp linux-2.6.18/arch/mips/kernel/binfmt_elfo32.c linux-2.6.18/arch/mips/kernel/binfmt_elfo32.c
---- linux-2.6.18/arch/mips/kernel/binfmt_elfo32.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/mips/kernel/binfmt_elfo32.c	2006-09-22 20:45:03.000000000 -0400
-@@ -52,6 +52,17 @@ typedef elf_fpreg_t elf_fpregset_t[ELF_N
- #undef ELF_ET_DYN_BASE
- #define ELF_ET_DYN_BASE         (TASK32_SIZE / 3 * 2)
- 
-+#ifdef CONFIG_PAX_ASLR
-+#define PAX_ELF_ET_DYN_BASE(tsk)	(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 0x00400000UL : 0x00400000UL)
-+
-+#define PAX_DELTA_MMAP_LSB(tsk)		PAGE_SHIFT
-+#define PAX_DELTA_MMAP_LEN(tsk)		(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 27-PAGE_SHIFT : 36-PAGE_SHIFT)
-+#define PAX_DELTA_EXEC_LSB(tsk)		PAGE_SHIFT
-+#define PAX_DELTA_EXEC_LEN(tsk)		(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 27-PAGE_SHIFT : 36-PAGE_SHIFT)
-+#define PAX_DELTA_STACK_LSB(tsk)	PAGE_SHIFT
-+#define PAX_DELTA_STACK_LEN(tsk)	(((tsk)->thread.mflags & MF_32BIT_ADDR) ? 27-PAGE_SHIFT : 36-PAGE_SHIFT)
-+#endif
-+
- #include <asm/processor.h>
- #include <linux/module.h>
- #include <linux/elfcore.h>
-diff -urNp linux-2.6.18/arch/mips/kernel/syscall.c linux-2.6.18/arch/mips/kernel/syscall.c
---- linux-2.6.18/arch/mips/kernel/syscall.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/mips/kernel/syscall.c	2006-09-22 20:45:03.000000000 -0400
-@@ -88,6 +88,11 @@ unsigned long arch_get_unmapped_area(str
- 	do_color_align = 0;
- 	if (filp || (flags & MAP_SHARED))
- 		do_color_align = 1;
-+
-+#ifdef CONFIG_PAX_RANDMMAP
-+	if (!(current->mm->pax_flags & MF_PAX_RANDMMAP) || !filp)
-+#endif
-+
- 	if (addr) {
- 		if (do_color_align)
- 			addr = COLOUR_ALIGN(addr, pgoff);
-@@ -98,7 +103,7 @@ unsigned long arch_get_unmapped_area(str
- 		    (!vmm || addr + len <= vmm->vm_start))
- 			return addr;
- 	}
--	addr = TASK_UNMAPPED_BASE;
-+	addr = current->mm->mmap_base;
- 	if (do_color_align)
- 		addr = COLOUR_ALIGN(addr, pgoff);
- 	else
-diff -urNp linux-2.6.18/arch/mips/mm/fault.c linux-2.6.18/arch/mips/mm/fault.c
---- linux-2.6.18/arch/mips/mm/fault.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/mips/mm/fault.c	2006-09-22 20:45:03.000000000 -0400
-@@ -27,6 +27,23 @@
- #include <asm/ptrace.h>
- #include <asm/highmem.h>		/* For VMALLOC_END */
- 
-+#ifdef CONFIG_PAX_PAGEEXEC
-+void pax_report_insns(void *pc)
-+{
-+	unsigned long i;
-+
-+	printk(KERN_ERR "PAX: bytes at PC: ");
-+	for (i = 0; i < 5; i++) {
-+		unsigned int c;
-+		if (get_user(c, (unsigned int*)pc+i))
-+			printk("???????? ");
-+		else
-+			printk("%08x ", c);
-+	}
-+	printk("\n");
-+}
-+#endif
-+
- /*
-  * This routine handles page faults.  It determines the address,
-  * and the problem, and then passes it off to one of the appropriate
-diff -urNp linux-2.6.18/arch/parisc/kernel/module.c linux-2.6.18/arch/parisc/kernel/module.c
---- linux-2.6.18/arch/parisc/kernel/module.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/parisc/kernel/module.c	2006-09-22 20:45:03.000000000 -0400
-@@ -72,16 +72,38 @@
- 
- /* three functions to determine where in the module core
-  * or init pieces the location is */
-+static inline int is_init_rx(struct module *me, void *loc)
-+{
-+	return (loc >= me->module_init_rx &&
-+		loc < (me->module_init_rx + me->init_size_rx));
-+}
-+
-+static inline int is_init_rw(struct module *me, void *loc)
-+{
-+	return (loc >= me->module_init_rw &&
-+		loc < (me->module_init_rw + me->init_size_rw));
-+}
-+
- static inline int is_init(struct module *me, void *loc)
- {
--	return (loc >= me->module_init &&
--		loc <= (me->module_init + me->init_size));
-+	return is_init_rx(me, loc) || is_init_rw(me, loc);
-+}
-+
-+static inline int is_core_rx(struct module *me, void *loc)
-+{
-+	return (loc >= me->module_core_rx &&
-+		loc < (me->module_core_rx + me->core_size_rx));
-+}
-+
-+static inline int is_core_rw(struct module *me, void *loc)
-+{
-+	return (loc >= me->module_core_rw &&
-+		loc < (me->module_core_rw + me->core_size_rw));
- }
- 
- static inline int is_core(struct module *me, void *loc)
- {
--	return (loc >= me->module_core &&
--		loc <= (me->module_core + me->core_size));
-+	return is_core_rx(me, loc) || is_core_rw(me, loc);
- }
- 
- static inline int is_local(struct module *me, void *loc)
-@@ -295,21 +317,21 @@ int module_frob_arch_sections(CONST Elf_
- 	}
- 
- 	/* align things a bit */
--	me->core_size = ALIGN(me->core_size, 16);
--	me->arch.got_offset = me->core_size;
--	me->core_size += gots * sizeof(struct got_entry);
--
--	me->core_size = ALIGN(me->core_size, 16);
--	me->arch.fdesc_offset = me->core_size;
--	me->core_size += fdescs * sizeof(Elf_Fdesc);
--
--	me->core_size = ALIGN(me->core_size, 16);
--	me->arch.stub_offset = me->core_size;
--	me->core_size += stubs * sizeof(struct stub_entry);
--
--	me->init_size = ALIGN(me->init_size, 16);
--	me->arch.init_stub_offset = me->init_size;
--	me->init_size += init_stubs * sizeof(struct stub_entry);
-+	me->core_size_rw = ALIGN(me->core_size_rw, 16);
-+	me->arch.got_offset = me->core_size_rw;
-+	me->core_size_rw += gots * sizeof(struct got_entry);
-+
-+	me->core_size_rw = ALIGN(me->core_size_rw, 16);
-+	me->arch.fdesc_offset = me->core_size_rw;
-+	me->core_size_rw += fdescs * sizeof(Elf_Fdesc);
-+
-+	me->core_size_rx = ALIGN(me->core_size_rx, 16);
-+	me->arch.stub_offset = me->core_size_rx;
-+	me->core_size_rx += stubs * sizeof(struct stub_entry);
-+
-+	me->init_size_rx = ALIGN(me->init_size_rx, 16);
-+	me->arch.init_stub_offset = me->init_size_rx;
-+	me->init_size_rx += init_stubs * sizeof(struct stub_entry);
- 
- 	me->arch.got_max = gots;
- 	me->arch.fdesc_max = fdescs;
-@@ -329,7 +351,7 @@ static Elf64_Word get_got(struct module 
- 
- 	BUG_ON(value == 0);
- 
--	got = me->module_core + me->arch.got_offset;
-+	got = me->module_core_rw + me->arch.got_offset;
- 	for (i = 0; got[i].addr; i++)
- 		if (got[i].addr == value)
- 			goto out;
-@@ -347,7 +369,7 @@ static Elf64_Word get_got(struct module 
- #ifdef __LP64__
- static Elf_Addr get_fdesc(struct module *me, unsigned long value)
- {
--	Elf_Fdesc *fdesc = me->module_core + me->arch.fdesc_offset;
-+	Elf_Fdesc *fdesc = me->module_core_rw + me->arch.fdesc_offset;
- 
- 	if (!value) {
- 		printk(KERN_ERR "%s: zero OPD requested!\n", me->name);
-@@ -365,7 +387,7 @@ static Elf_Addr get_fdesc(struct module 
- 
- 	/* Create new one */
- 	fdesc->addr = value;
--	fdesc->gp = (Elf_Addr)me->module_core + me->arch.got_offset;
-+	fdesc->gp = (Elf_Addr)me->module_core_rw + me->arch.got_offset;
- 	return (Elf_Addr)fdesc;
- }
- #endif /* __LP64__ */
-@@ -385,12 +407,12 @@ static Elf_Addr get_stub(struct module *
- 	if(init_section) {
- 		i = me->arch.init_stub_count++;
- 		BUG_ON(me->arch.init_stub_count > me->arch.init_stub_max);
--		stub = me->module_init + me->arch.init_stub_offset + 
-+		stub = me->module_init_rx + me->arch.init_stub_offset + 
- 			i * sizeof(struct stub_entry);
- 	} else {
- 		i = me->arch.stub_count++;
- 		BUG_ON(me->arch.stub_count > me->arch.stub_max);
--		stub = me->module_core + me->arch.stub_offset + 
-+		stub = me->module_core_rx + me->arch.stub_offset + 
- 			i * sizeof(struct stub_entry);
- 	}
- 
-@@ -758,7 +780,7 @@ register_unwind_table(struct module *me,
- 
- 	table = (unsigned char *)sechdrs[me->arch.unwind_section].sh_addr;
- 	end = table + sechdrs[me->arch.unwind_section].sh_size;
--	gp = (Elf_Addr)me->module_core + me->arch.got_offset;
-+	gp = (Elf_Addr)me->module_core_rw + me->arch.got_offset;
- 
- 	DEBUGP("register_unwind_table(), sect = %d at 0x%p - 0x%p (gp=0x%lx)\n",
- 	       me->arch.unwind_section, table, end, gp);
-diff -urNp linux-2.6.18/arch/parisc/kernel/ptrace.c linux-2.6.18/arch/parisc/kernel/ptrace.c
---- linux-2.6.18/arch/parisc/kernel/ptrace.c	2006-09-19 23:42:06.000000000 -0400
-+++ linux-2.6.18/arch/parisc/kernel/ptrace.c	2006-09-22 20:04:35.000000000 -0400
-@@ -18,6 +18,7 @@
<<Diff was trimmed, longer than 597 lines>>

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



More information about the pld-cvs-commit mailing list