Nur in ../../../../temp/linux-2.4.14/arch: alpha. Nur in ../../../../temp/linux-2.4.14/arch: arm. Nur in ../../../../temp/linux-2.4.14/arch: cris. Nur in ../../../../temp/linux-2.4.14/arch/i386: boot. diff -ru ../../../../temp/linux-2.4.14/arch/i386/config.in linux-2.4.14/arch/i386/config.in --- ../../../../temp/linux-2.4.14/arch/i386/config.in 2001-11-03 02:46:47.000000000 +0100 +++ linux-2.4.14/arch/i386/config.in 2003-09-24 19:09:28.000000000 +0200 @@ -271,6 +271,9 @@ bool ' Use real mode APM BIOS call to power off' CONFIG_APM_REAL_MODE_POWER_OFF fi +comment 'Advanced security options' +bool ' Clear Memory when freeing' CONFIG_ASO_MMFREE + endmenu source drivers/mtd/Config.in Nur in ../../../../temp/linux-2.4.14/arch/i386: defconfig. Nur in ../../../../temp/linux-2.4.14/arch/i386: kernel. Nur in ../../../../temp/linux-2.4.14/arch/i386: lib. Nur in ../../../../temp/linux-2.4.14/arch/i386: Makefile. Nur in ../../../../temp/linux-2.4.14/arch/i386: math-emu. Nur in ../../../../temp/linux-2.4.14/arch/i386: mm. Nur in ../../../../temp/linux-2.4.14/arch/i386: vmlinux.lds. Nur in ../../../../temp/linux-2.4.14/arch: ia64. Nur in ../../../../temp/linux-2.4.14/arch: m68k. Nur in ../../../../temp/linux-2.4.14/arch: mips. Nur in ../../../../temp/linux-2.4.14/arch: mips64. Nur in ../../../../temp/linux-2.4.14/arch: parisc. Nur in ../../../../temp/linux-2.4.14/arch: ppc. Nur in ../../../../temp/linux-2.4.14/arch: s390. Nur in ../../../../temp/linux-2.4.14/arch: s390x. Nur in ../../../../temp/linux-2.4.14/arch: sh. Nur in ../../../../temp/linux-2.4.14/arch: sparc. Nur in ../../../../temp/linux-2.4.14/arch: sparc64. Nur in ../../../../temp/linux-2.4.14: COPYING. Nur in ../../../../temp/linux-2.4.14: CREDITS. Nur in ../../../../temp/linux-2.4.14: Documentation. Nur in ../../../../temp/linux-2.4.14: drivers. Nur in ../../../../temp/linux-2.4.14: fs. Nur in ../../../../temp/linux-2.4.14: include. Nur in ../../../../temp/linux-2.4.14: init. Nur in ../../../../temp/linux-2.4.14: ipc. Nur in ../../../../temp/linux-2.4.14: kernel. Nur in ../../../../temp/linux-2.4.14: lib. Nur in ../../../../temp/linux-2.4.14: MAINTAINERS. Nur in ../../../../temp/linux-2.4.14: Makefile. diff -ru ../../../../temp/linux-2.4.14/mm/bootmem.c linux-2.4.14/mm/bootmem.c --- ../../../../temp/linux-2.4.14/mm/bootmem.c 2001-09-18 23:10:43.000000000 +0200 +++ linux-2.4.14/mm/bootmem.c 2003-09-24 19:07:31.000000000 +0200 @@ -249,7 +249,11 @@ count++; ClearPageReserved(page); set_page_count(page, 1); +#ifdef CONFIG_ASO_MMFREE + __free_pages_init(page, 0); +#else __free_page(page); +#endif } } total += count; @@ -264,7 +268,11 @@ count++; ClearPageReserved(page); set_page_count(page, 1); - __free_page(page); +#ifdef CONFIG_ASO_MMFREE + __free_pages_init(page, 0); +#else + __free_page(page); +#endif } total += count; bdata->node_bootmem_map = NULL; Nur in ../../../../temp/linux-2.4.14/mm: filemap.c. Nur in ../../../../temp/linux-2.4.14/mm: highmem.c. Nur in ../../../../temp/linux-2.4.14/mm: Makefile. Nur in ../../../../temp/linux-2.4.14/mm: memory.c. Nur in ../../../../temp/linux-2.4.14/mm: mlock.c. Nur in ../../../../temp/linux-2.4.14/mm: mmap.c. Nur in ../../../../temp/linux-2.4.14/mm: mprotect.c. Nur in ../../../../temp/linux-2.4.14/mm: mremap.c. Nur in ../../../../temp/linux-2.4.14/mm: numa.c. Nur in ../../../../temp/linux-2.4.14/mm: oom_kill.c. diff -ru ../../../../temp/linux-2.4.14/mm/page_alloc.c linux-2.4.14/mm/page_alloc.c --- ../../../../temp/linux-2.4.14/mm/page_alloc.c 2001-11-05 17:25:38.000000000 +0100 +++ linux-2.4.14/mm/page_alloc.c 2003-09-24 19:06:57.000000000 +0200 @@ -62,8 +62,13 @@ * Hint: -mask = 1+~mask */ +#ifdef CONFIG_ASO_MMFREE +static void FASTCALL(__free_pages_ok2 (struct page *page, unsigned int order)); +static void __free_pages_ok2 (struct page *page, unsigned int order) +#else static void FASTCALL(__free_pages_ok (struct page *page, unsigned int order)); static void __free_pages_ok (struct page *page, unsigned int order) +#endif { unsigned long index, page_idx, mask, flags; free_area_t *area; @@ -147,6 +152,24 @@ current->nr_local_pages++; } +#ifdef CONFIG_ASO_MMFREE +static void __free_pages_ok(struct page *page, unsigned int order) +{ + if (!atomic_read(&page->count)) { + unsigned int page_cnt; + void *address = page_address(page); + + for (page_cnt = (1 << order); page_cnt; page_cnt--) { + clear_page(address); + + address = (void *) (((char *) address) + PAGE_SIZE); + } + } + + __free_pages_ok2(page, order); +} +#endif + #define MARK_USED(index, order, area) \ __change_bit((index) >> (1+(order)), (area)->map) @@ -569,6 +592,14 @@ #endif } +#ifdef CONFIG_ASO_MMFREE +void __free_pages_init(struct page *page, unsigned int order) +{ + if (!PageReserved(page) && put_page_testzero(page)) + __free_pages_ok2(page, order); +} +#endif + void show_free_areas(void) { show_free_areas_core(pgdat_list); Nur in ../../../../temp/linux-2.4.14/mm: page_io.c. Nur in ../../../../temp/linux-2.4.14/mm: shmem.c. diff -ru ../../../../temp/linux-2.4.14/mm/slab.c linux-2.4.14/mm/slab.c --- ../../../../temp/linux-2.4.14/mm/slab.c 2001-09-18 23:16:26.000000000 +0200 +++ linux-2.4.14/mm/slab.c 2003-09-24 19:06:15.000000000 +0200 @@ -1346,6 +1346,20 @@ objp = kmem_cache_alloc_one(cachep); #endif local_irq_restore(save_flags); +#ifdef CONFIG_ASO_MMFREE + if (objp) { + unsigned int local_flags; + unsigned long ctor_flags; + + ctor_flags = SLAB_CTOR_CONSTRUCTOR; + local_flags = (flags & SLAB_LEVEL_MASK); + if (local_flags == SLAB_ATOMIC) + ctor_flags |= SLAB_CTOR_ATOMIC; + + if (cachep->ctor) + cachep->ctor(objp, cachep, ctor_flags); + } +#endif return objp; alloc_new_slab: #ifdef CONFIG_SMP @@ -1471,8 +1485,22 @@ */ static inline void __kmem_cache_free (kmem_cache_t *cachep, void* objp) { +#ifdef CONFIG_ASO_MMFREE #ifdef CONFIG_SMP cpucache_t *cc = cc_data(cachep); +#endif + int size = cachep->objsize; + + if (cachep->flags & SLAB_RED_ZONE) + size -= 2 * BYTES_PER_WORD; /* words for redzone */ + + memset((char *) objp, 0, size); +#endif + +#ifdef CONFIG_SMP +#ifndef CONFIG_ASO_MMFREE + cpucache_t *cc = cc_data(cachep); +#endif CHECK_PAGE(virt_to_page(objp)); if (cc) { Nur in ../../../../temp/linux-2.4.14/mm: swap.c. Nur in ../../../../temp/linux-2.4.14/mm: swapfile.c. Nur in ../../../../temp/linux-2.4.14/mm: swap_state.c. Nur in ../../../../temp/linux-2.4.14/mm: vmalloc.c. Nur in ../../../../temp/linux-2.4.14/mm: vmscan.c. Nur in ../../../../temp/linux-2.4.14: net. Nur in ../../../../temp/linux-2.4.14: README. Nur in ../../../../temp/linux-2.4.14: REPORTING-BUGS. Nur in ../../../../temp/linux-2.4.14: Rules.make. Nur in ../../../../temp/linux-2.4.14: scripts.