Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 19752
b: refs/heads/master
c: 1bcdd85
h: refs/heads/master
v: v3
  • Loading branch information
Helge Deller authored and Kyle McMartin committed Jan 23, 2006
1 parent 2a03e07 commit 4bb1092
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a2bb214dcd1db862fdb6421e21f1cff0c3535162
refs/heads/master: 1bcdd8548286743e1d6b3d53c96a90c6da975620
10 changes: 10 additions & 0 deletions trunk/arch/parisc/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,14 @@ config DEBUG_RWLOCK
too many attempts. If you suspect a rwlock problem or a kernel
hacker asks for this option then say Y. Otherwise say N.

config DEBUG_RODATA
bool "Write protect kernel read-only data structures"
depends on DEBUG_KERNEL
help
Mark the kernel read-only data as write-protected in the pagetables,
in order to catch accidental (and incorrect) writes to such const
data. This option may have a slight performance impact because a
portion of the kernel code won't be covered by a TLB anymore.
If in doubt, say "N".

endmenu
3 changes: 1 addition & 2 deletions trunk/arch/parisc/hpux/entry_hpux.S
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,9 @@
#include <linux/linkage.h>
#include <asm/unistd.h>

.text

#define ENTRY_NAME(_name_) .word _name_

.section .rodata,"a"
.align 4
.export hpux_call_table
.import hpux_unimplemented_wrapper
Expand Down
2 changes: 2 additions & 0 deletions trunk/arch/parisc/kernel/syscall.S
Original file line number Diff line number Diff line change
Expand Up @@ -650,6 +650,8 @@ end_linux_gateway_page:
#define LWS_ENTRY(_name_) .word (lws_##_name_ - linux_gateway_page)
#endif

.section .rodata,"a"

.align 4096
/* Light-weight-syscall table */
/* Start of lws table. */
Expand Down
15 changes: 14 additions & 1 deletion trunk/arch/parisc/mm/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -417,6 +417,19 @@ void free_initmem(void)
#endif
}


#ifdef CONFIG_DEBUG_RODATA
void mark_rodata_ro(void)
{
extern char __start_rodata, __end_rodata;
/* rodata memory was already mapped with KERNEL_RO access rights by
pagetable_init() and map_pages(). No need to do additional stuff here */
printk (KERN_INFO "Write protecting the kernel read-only data: %luk\n",
(unsigned long)(&__end_rodata - &__start_rodata) >> 10);
}
#endif


/*
* Just an arbitrary offset to serve as a "hole" between mapping areas
* (between top of physical memory and a potential pcxl dma mapping
Expand Down Expand Up @@ -685,7 +698,7 @@ static void __init pagetable_init(void)

#ifdef CONFIG_BLK_DEV_INITRD
if (initrd_end && initrd_end > mem_limit) {
printk("initrd: mapping %08lx-%08lx\n", initrd_start, initrd_end);
printk(KERN_INFO "initrd: mapping %08lx-%08lx\n", initrd_start, initrd_end);
map_pages(initrd_start, __pa(initrd_start),
initrd_end - initrd_start, PAGE_KERNEL);
}
Expand Down
6 changes: 6 additions & 0 deletions trunk/include/asm-parisc/cacheflush.h
Original file line number Diff line number Diff line change
Expand Up @@ -183,4 +183,10 @@ flush_cache_page(struct vm_area_struct *vma, unsigned long vmaddr, unsigned long
__flush_cache_page(vma, vmaddr);

}

#ifdef CONFIG_DEBUG_RODATA
void mark_rodata_ro(void);
#endif

#endif /* _PARISC_CACHEFLUSH_H */

2 changes: 1 addition & 1 deletion trunk/include/asm-parisc/pgtable.h
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ extern void *vmalloc_start;
#define PAGE_COPY PAGE_EXECREAD
#define PAGE_RWX __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_READ | _PAGE_WRITE | _PAGE_EXEC |_PAGE_ACCESSED)
#define PAGE_KERNEL __pgprot(_PAGE_KERNEL)
#define PAGE_KERNEL_RO __pgprot(_PAGE_PRESENT | _PAGE_EXEC | _PAGE_READ | _PAGE_DIRTY | _PAGE_ACCESSED)
#define PAGE_KERNEL_RO __pgprot(_PAGE_KERNEL & ~_PAGE_WRITE)
#define PAGE_KERNEL_UNC __pgprot(_PAGE_KERNEL | _PAGE_NO_CACHE)
#define PAGE_GATEWAY __pgprot(_PAGE_PRESENT | _PAGE_USER | _PAGE_ACCESSED | _PAGE_GATEWAY| _PAGE_READ)
#define PAGE_FLUSH __pgprot(_PAGE_FLUSH)
Expand Down

0 comments on commit 4bb1092

Please sign in to comment.