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

_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to